Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 11 Февраль, 2012, 06:39:55

Страниц: [1] 2
Печать
Автор Тема: Алгоритм перемешивания (елементов/значений массива) - в добрые руки)  (Прочитано 2497 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Rotten    ↓ 
31 Декабрь, 2009, 04:24:51
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 1911
Сила слова: 0.47

Вообщем, недавно столкнулся с задачкой одной, в котором необходимо перемешать рандомно елементы в массиве.
Я нигде не нашел(или плохо искал) методов, которые либо были бы уже предопределены в АПИ по 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, в курсе. Просто не знал до этого. Имя для примера/класса-образца влетело буквально рандомно в голову, ничего не подозревая).
« Последнее редактирование: 31 Декабрь, 2009, 04:24:51 от Rotten » Записан

When some kind of technology becomes a religion...
md5    ↓ 
31 Декабрь, 2009, 07:27:06 , спустя 3 часа 2 минуты 15 секунд
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10447
Сила слова: 1.2

В пизду!
Всех с Новым годом!
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
Sinkler    ↓ 
01 Январь, 2010, 10:04:47 , спустя 1 день 2 часа 37 минут 41 секунду
НЕ ХУЕТА! ХУЕТА!

Похуй, пляшем!
Группа: Джедаи

Карма: 61
Сообщений: 6101
Сила слова: 1

прикольный рассказ =))))))))))))
Записан

phpdude    ↓ 
02 Январь, 2010, 10:20:44 , спустя 12 часов 15 минут 57 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 339
Сообщений: 19713
Сила слова: 1.72

блоги на пиху.ру
 
а так хуйня, я уверен на 100% что есть готовое решение и я 100% УВЕРЕН ЧТО ОНО ЕСТЬ!
 
ты бы знал как я матерился однажды на яву изза ебаную документацию и хуй пойми какие пространства имен от балды пришедшие в голову разработчикам, что хуй "наугад" сориентируешься.
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Rotten    ↓ 
02 Январь, 2010, 01:12:51 , спустя 2 часа 52 минуты 7 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 1911
Сила слова: 0.47

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

When some kind of technology becomes a religion...
phpdude    ↓ 
02 Январь, 2010, 01:46:24 , спустя 33 минуты 33 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 339
Сообщений: 19713
Сила слова: 1.72


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

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
krasun    ↓ 
02 Январь, 2010, 03:58:17 , спустя 2 часа 11 минут 53 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1378
Сила слова: 2.98

Дело не в языке.
Записан
Rotten    ↓ 
02 Январь, 2010, 08:12:03 , спустя 4 часа 13 минут 46 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 1911
Сила слова: 0.47

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

When some kind of technology becomes a religion...
Ewg777    ↓ 
02 Январь, 2010, 08:12:58 , спустя 55 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 666
Сообщений: 512
Сила слова: 4.69


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

Этот сайт не наркоманов. Это сайт программистов.
phpdude    ↓ 
02 Январь, 2010, 08:24:48 , спустя 11 минут 50 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 339
Сообщений: д-о-х-у-я!
Сила слова: 1.72



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

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
krasun    ↓ 
02 Январь, 2010, 09:55:34 , спустя 1 час 30 минут 46 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1378
Сила слова: 2.98


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

Дело не в языке. А в том как ты на него смотришь и как его используешь.
Записан
Timur    ↓ 
16 Май, 2010, 07:08:22 , спустя 133 дня 20 часов 12 минут 48 секунд
НЕ ХУЕТА! ХУЕТА!

NullPointerException
Группа: в ухо

Карма: 56
Сообщений: 1009
Сила слова: 5.55

Я нигде не нашел(или плохо искал) методов, которые либо были бы уже предопределены в АПИ по JDK, либо - что еще похлеще, - были бы заданы в какомто интерфейсе (типа Collection)

Collections.shuffle(List list) - не то?
Записан
md5    ↓ 
16 Май, 2010, 09:47:43 , спустя 2 часа 39 минут 21 секунду
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10447
Сила слова: 1.2

Тимур на форуме Оо
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
Sinkler    ↓ 
16 Май, 2010, 09:48:16 , спустя 33 секунды
НЕ ХУЕТА! ХУЕТА!

Похуй, пляшем!
Группа: Джедаи

Карма: 61
Сообщений: 6101
Сила слова: 1

так выпьем же за это
Записан

adw0rd    ↓ 
16 Май, 2010, 11:55:58 , спустя 2 часа 7 минут 42 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: Санитары

Карма: не нужна
Сообщений: 17222
Сила слова: 1.65

Да, Тимур вернулся, аллилуйя!
Записан

FreeBSD, Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch
Кинсбург * Либург * Футбург * Мой блог
Страниц: [1] 2
Печать
 

Перейти в: