4 / 4 / 2
Регистрация: 14.07.2011
Сообщений: 19
|
|
1 | |
Перемешать случайным образом массив целых чисел26.11.2013, 00:59. Показов 18701. Ответов 16
Метки нет Все метки)
(
Здравствуйте!
Подскажите, пожалуйста, как в C# перемешать случайным образом массив целых чисел. Аналог random.shuffle(lst) в Python. Спасибо!
0
|
|
26.11.2013, 00:59 | |
Ответы с готовыми решениями:
16
Массив целых чисел из 10 элементов заполнить случайным образом. Упорядочить массив по убыванию. Найти сумму квадратов
Массив 10х10 заполнить 0 и1 случайным образом но в соотношении 3:1 Заполнить массив случайным образом: вещественными значениями |
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
|
|
26.11.2013, 03:18 | 2 |
В шарпе тоже есть Random.Next
0
|
4 / 4 / 2
Регистрация: 14.07.2011
Сообщений: 19
|
||||||
26.11.2013, 11:22 [ТС] | 3 | |||||
Это я нашел. А встроенной функции перемешивания нету?
Вот моя реализация:
0
|
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
|
|
26.11.2013, 11:32 | 4 |
встроенной функции перемешивания нет
0
|
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
|
|
26.11.2013, 11:38 | 5 |
3
|
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
|
|
26.11.2013, 11:42 | 6 |
0
|
4 / 4 / 2
Регистрация: 14.07.2011
Сообщений: 19
|
|
26.11.2013, 11:54 [ТС] | 7 |
Diman777, спасибо!
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
||||||
26.11.2013, 12:13 | 8 | |||||
O(n) с гарантированной сменой позиции каждого элемента:
2
|
4 / 4 / 2
Регистрация: 14.07.2011
Сообщений: 19
|
|
26.11.2013, 15:52 [ТС] | 9 |
kolorotur, спасибо!
Но у меня по-моему тоже самое ![]()
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
26.11.2013, 17:23 | 10 |
Ага, оно
![]() Можно, конечно, придраться к тому, что последний элемент сам с собой свопнется, но это чепуха.
0
|
4 / 4 / 2
Регистрация: 14.07.2011
Сообщений: 19
|
|
26.11.2013, 20:40 [ТС] | 11 |
kolorotur, спасибо за замечание!
Действительно, так оно и есть. Поставил условие i < array.Length-1
0
|
foo();
|
||||||
09.05.2015, 23:34 | 12 | |||||
на самом деле, это не всегда хорошо. теряется солидная доля перестановок, я насчитал (n - 1)! перестановок вместо n! . для малых n - это критично, например 4! = 24 вместо 5! = 120 для n = 5. благо, исправить несложно - заменив 4-ю строку
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
10.05.2015, 00:55 | 13 |
Почему же не хорошо, если стоит задача — перемешать?
Тут важно понимать: в чем цель алгоритма. Если цель в генерации как можно большего количества возможных комбинаций, то да — здесь не поспоришь. Если же цель состоит в перемешивании массива и надо допустить возможность того, что какие-то из элементов могут остаться на своих местах, то нужно определить предел этому количеству. 1? 2? n/2? n? Последний вариант — это отсутствие перемешивания, т.к. конечная пермутация является идентичностью. Потому если цель состоит в перемешивании, то лучше смириться с потерей некоторого количества пермутаций в обмен на гарантию того, что в итоге не получим идентичность. Ну или значительно усложнять алгоритм для учета количества элементов, которым можно оставаться на местах. Вы когда колоду карт тасуете, вам что важнее: какое количество уникальных раскладов вы можете теоретически получить или то, что у вас колода после перетасовки не будет такой же, как до? Для малых n как раз более критична гарантия перестановки, т.к. если у вас множество { 1, 2 }, то при выбранном вами подходе мы либо имеем перестановку, либо идентичность: 50/50. Если нужно перемешивание, то меня расклад фифти-фифти ну никак не устраивает ![]() Тем самым сведя на нет весь замысел — гарантию того, что массив перемешается ![]()
0
|
foo();
|
|
10.05.2015, 01:40 | 14 |
kolorotur, ну тут спорить не о чем, все зависит о поставления задачи. Вы ведь не будете не будете заведомо исключать комбинацию( 1 2 3 4) из лотерейных билетов, не говоря уже про (3 2 4 1).
Кстати, питоновский random.shuffle, упомянутый в шапке, мешает рандомно без каких-либо ограничений.
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
10.05.2015, 01:58 | 15 |
Так я о том же: есть перемешивание — это получение одной пермутации из другой, а есть генерирование случайной/уникальной пермутации. Они хоть и похожи, но по сути разные вещи и выполняют разные задачи.
Плохой значит этот shuffle. Но хоть какой-то, конечно, лучше, чем никакого.
0
|
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
|
|
10.05.2015, 02:02 | 16 |
Чем перемешивание отличается от случайной перестановки?
![]()
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
10.05.2015, 02:34 | 17 |
Тем, что идентичность перестановки является случайной перестановкой, но не является перемешиванием.
Очевидно же.
0
|
10.05.2015, 02:34 | |
10.05.2015, 02:34 | |
Помогаю со студенческими работами здесь
17
Шифрование. Сгенерировать случайным образом последовательность шестнадцатеричных чисел Дан двумерный целочисленый массив, заполненный случайным образом
Создать класс для формирования случайным образом чисел из 5 цифр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |