PHP форум на ПЫХА.РУ

PHP форум на ПЫХА.РУ

Языки программирования => Java => Тема начата: Rotten от 31 Декабрь, 2009, 04:24:51



Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки)
Отправлено: 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

phpdude, Чувак, отчасти согласен. Но, в принципе, с 2й стороны - даже интересно покопаться в этом всем...
Никогда, дуд, не замечал? - Чем сложнее язык, чем сложнее в нем разобраться, чем больше нужно разгребать тонны навоза в нем, копаться в доках...короче говоря - чем больше с ним ебешься и убиваешь себе нервы - тем больше платят за работу на нем....
 
хз. ты опять на пхп наезжаешь?)


Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки)
Отправлено: krasun от 02 Январь, 2010, 03:58:17
Дело не в языке.


Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки)
Отправлено: Rotten от 02 Январь, 2010, 08:12:03
phpdude, ну та не, с чего бы то... о джаве я...и си, и асп, и в том роде....)
Хотя если наезжать на пхп с той стороны что он самый простой - то все же да). Ты наверное не сам создавал неконтролируемый поток матов из себя когда он изза своей нетипизированости, багов и прочего выводил тебя не раз из себя....)


Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки)
Отправлено: Ewg777 от 02 Январь, 2010, 08:12:58

phpdude, ну та не, с чего бы то... о джаве я...и си, и асп, и в том роде....)
Хотя если наезжать на пхп с той стороны что он самый простой - то все же да). Ты наверное не сам создавал неконтролируемый поток матов из себя когда он изза своей нетипизированости, багов и прочего выводил тебя не раз из себя....)
 
Это решается написание тестов и грамотной системой ошибок.


Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки)
Отправлено: phpdude от 02 Январь, 2010, 08:24:48


phpdude, ну та не, с чего бы то... о джаве я...и си, и асп, и в том роде....)
Хотя если наезжать на пхп с той стороны что он самый простой - то все же да). Ты наверное не сам создавал неконтролируемый поток матов из себя когда он изза своей нетипизированости, багов и прочего выводил тебя не раз из себя....)
 
Это решается написание тестов и грамотной системой ошибок.
как и с любым другим языком.


Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки)
Отправлено: krasun от 02 Январь, 2010, 09:55:34

phpdude, ну та не, с чего бы то... о джаве я...и си, и асп, и в том роде....)
Хотя если наезжать на пхп с той стороны что он самый простой - то все же да). Ты наверное не сам создавал неконтролируемый поток матов из себя когда он изза своей нетипизированости, багов и прочего выводил тебя не раз из себя....)
 

Дело не в языке. А в том как ты на него смотришь и как его используешь.


Название: Алгоритм перемешивания (елементов/значений массива) - в добрые руки)
Отправлено: 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
тоже рад всех видеть, обещаю почаще заходить )


PHP форум на ПЫХА.РУ