4 / 4 / 2
Регистрация: 14.07.2011
Сообщений: 19
|
|
1 | |
Перемешать случайным образом массив целых чисел26.11.2013, 00:59. Показов 18970. Ответов 16
Метки нет (Все метки)
Здравствуйте!
Подскажите, пожалуйста, как в C# перемешать случайным образом массив целых чисел. Аналог random.shuffle(lst) в Python. Спасибо!
0
|
26.11.2013, 00:59 | |
Ответы с готовыми решениями:
16
Массив целых чисел из 10 элементов заполнить случайным образом. Упорядочить массив по убыванию. Найти сумму квадратов Дан массив целых чисел (n=25), заполненный случайным образом числами из промежутка [-50,50] Массив 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
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
||||||
26.11.2013, 12:13 | 8 | |||||
O(n) с гарантированной сменой позиции каждого элемента:
2
|
4 / 4 / 2
Регистрация: 14.07.2011
Сообщений: 19
|
|
26.11.2013, 15:52 [ТС] | 9 |
kolorotur, спасибо!
Но у меня по-моему тоже самое
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
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
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
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
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
10.05.2015, 01:58 | 15 |
Так я о том же: есть перемешивание — это получение одной пермутации из другой, а есть генерирование случайной/уникальной пермутации. Они хоть и похожи, но по сути разные вещи и выполняют разные задачи.
Плохой значит этот shuffle. Но хоть какой-то, конечно, лучше, чем никакого.
0
|
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
|
|
10.05.2015, 02:02 | 16 |
Чем перемешивание отличается от случайной перестановки?
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
10.05.2015, 02:34 | 17 |
Тем, что идентичность перестановки является случайной перестановкой, но не является перемешиванием.
Очевидно же.
0
|
10.05.2015, 02:34 | |
10.05.2015, 02:34 | |
Помогаю со студенческими работами здесь
17
Шифрование. Сгенерировать случайным образом последовательность шестнадцатеричных чисел Дан двумерный целочисленый массив, заполненный случайным образом Заполните массив случайным образом нулями согласно условия Создать класс для формирования случайным образом чисел из 5 цифр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |