|
Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: Rotten от 31 Декабрь, 2009, 04:24:51 Вообщем, недавно столкнулся с задачкой одной, в котором необходимо перемешать рандомно елементы в массиве.
Я нигде не нашел(или плохо искал) методов, которые либо были бы уже предопределены в АПИ по JDK, либо - что еще похлеще, - были бы заданы в какомто интерфейсе (типа Collection), в которых нужно было бы их описать самому. По перемешиванию/тасованию элементов есть немало алгоритмов, согласен. Я в принцыпе, признаюсь - искал не так уж много, потому что при поиске результаты предлагали мне алгоритмы на основе математики/алгебры, каких то сложных вычитаний и тому подобное. Я, откровенно говоря, не любитель программировать, исользуя паттерны, построенные на основе математических формул(знаю, что зря, так как большинство задач без простейших формул - не реализовать). Еще более гнетет то что великого старину Доналда Кнута я так и не прочел. Дело в том что там большинство алгоритмов на математических формулах и основаны(бля, меня колбасит от такого)))... Короче говоря, решил выложить тут, может кому пригодится - простейший алгоритм тасовки элементов(без всяких алгебраических формул/выебонов), содержащихся в массиве. Если такой вы уже где то использовали/встречали/видели - то так и скажите. Наверное все же гдето он не одну тысячу раз использовал. Я ж не хочу ставать в шеренгу очередных изобретателей колес). Итак, для осуществления перемешивания элементов(вернее - для получения готового массива с такими элементами) нам сначала понадобится 2 массива. 1й - основной, в котором элементы будут располагаться в исходном постоянном порядке. 2й же - для хранения тех же элементов, но только в перемешанном виде. Далее - заполняем 1й массив, чем хотите. Основными инструментами в алгоритме являются размеры 2-х массивов. Суть лежит в том, что необходимо в цикле(условием которого является сравнение размеров этих 2-х массивов) каждую итерацию проверять, не содержится ли уже рандомно полученный элемент(в диапазоне от нуля до размера массива) 1го массива - в нашем втором массиве. Если не содержится - тогда добавляем во 2й массив. Это, ясень пень - для того чтобы не было дублируищехся значений(если кто не понял). Ну и....так до того момента пока 2й массив не насобирает то количество значений, которое присуще в 1м массиве. код: Java
ArrayList<String> Stack = new ArrayList<String>(14); ArrayList<String> ShuffledStack = new ArrayList<String>(14); Stack.add(0,"a"); Stack.add(1,"b"); Stack.add(2,"c"); Stack.add(3,"d"); Stack.add(4,"e"); Stack.add(5,"f"); Stack.add(6,"e"); Stack.add(7,"g"); Stack.add(8,"h"); Stack.add(9,"j"); Stack.add(10,"k"); Stack.add(11,"l"); Stack.add(12,"o"); Stack.add(13,"m"); int size = Stack.size(); while(ShuffledStack.size() != size) { int r = (int)(Math.random()*(size)); if(!ShuffledStack.contains( Stack.get( r ))) ShuffledStack.add( Stack.get( r )); } Алгоритм - прост до невозможности. Меня, вообще заинтересовала данная тема. Если у кого есть подобные мысли, иные реализации алгоритма в самом эффективном/оптимальном пути - пожалуйста, делитесь. Спустя 2 минуты 53 секунды добавил Stack - такой класс уже существует в JDK, в курсе. Просто не знал до этого. Имя для примера/класса-образца влетело буквально рандомно в голову, ничего не подозревая).Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: md5 от 31 Декабрь, 2009, 07:27:06 В пизду!
Всех с Новым годом! Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: Sinkler от 01 Январь, 2010, 10:04:47 прикольный рассказ =))))))))))))
Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: phpdude от 02 Январь, 2010, 10:20:44 блоги на пиху.ру
а так хуйня, я уверен на 100% что есть готовое решение и я 100% УВЕРЕН ЧТО ОНО ЕСТЬ! ты бы знал как я матерился однажды на яву изза ебаную документацию и хуй пойми какие пространства имен от балды пришедшие в голову разработчикам, что хуй "наугад" сориентируешься. Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: Rotten от 02 Январь, 2010, 01:12:51 phpdude, Чувак, отчасти согласен. Но, в принципе, с 2й стороны - даже интересно покопаться в этом всем...
Никогда, дуд, не замечал? - Чем сложнее язык, чем сложнее в нем разобраться, чем больше нужно разгребать тонны навоза в нем, копаться в доках...короче говоря - чем больше с ним ебешься и убиваешь себе нервы - тем больше платят за работу на нем.... Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: phpdude от 02 Январь, 2010, 01:46:24 хз. ты опять на пхп наезжаешь?) Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: krasun от 02 Январь, 2010, 03:58:17 Дело не в языке.
Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: Rotten от 02 Январь, 2010, 08:12:03 phpdude, ну та не, с чего бы то... о джаве я...и си, и асп, и в том роде....)
Хотя если наезжать на пхп с той стороны что он самый простой - то все же да). Ты наверное не сам создавал неконтролируемый поток матов из себя когда он изза своей нетипизированости, багов и прочего выводил тебя не раз из себя....) Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: Ewg777 от 02 Январь, 2010, 08:12:58 Это решается написание тестов и грамотной системой ошибок. Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: phpdude от 02 Январь, 2010, 08:24:48 как и с любым другим языком. Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: krasun от 02 Январь, 2010, 09:55:34
Дело не в языке. А в том как ты на него смотришь и как его используешь. Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: Timur от 16 Май, 2010, 07:08:22 Я нигде не нашел(или плохо искал) методов, которые либо были бы уже предопределены в АПИ по JDK, либо - что еще похлеще, - были бы заданы в какомто интерфейсе (типа Collection) Collections.shuffle(List list) - не то? Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: md5 от 16 Май, 2010, 09:47:43 Тимур на форуме Оо
Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: Sinkler от 16 Май, 2010, 09:48:16 так выпьем же за это
Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: adw0rd от 16 Май, 2010, 11:55:58 Да, Тимур вернулся, аллилуйя!
Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки) Отправлено: Timur от 17 Май, 2010, 03:06:20 тоже рад всех видеть, обещаю почаще заходить )
|