![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 18.10.2016
Сообщений: 27
|
![]()
Всем привет!
Стоит задача случайно перемешать последовательность символов (алфавит известный и фиксированный) длинной около 70млн символов. Подскажите как это проще всего реализовать? |
![]() |
![]() |
![]() |
#2 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]()
std::shuffle?
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 18.10.2016
Сообщений: 27
|
![]()
Необходимо на языке Си.
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
я же правильно понимаю, у Вас есть последовательность символов, нужно эти символы переставить в последовательности случайным образом, так? где символы хранятся? если в массиве, то перемешать можно легко за один проход по массиву (ну, разумеется, будет ~70*2 миллионов перестановок. перемешать можно по алгоритму отсюда |
|
![]() |
![]() |
![]() |
#5 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,821
|
![]()
По коду из ссылки:
Код:
Для 70 млн нет необходимости в проверке (2). E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
#6 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
читайте статью: Цитата:
ну и, насколько я понимаю, это просто реализация алгоритма Тасование Фишера — Йетса (см. википедию) |
||
![]() |
![]() |
![]() |
#7 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,821
|
![]()
Serge_Bliznykov, понятно. Только там получается перевернутый вариант алгоритма, хотя суть та же. Набросал пример на Си, реализующий алгоритм тасование Фишера-Йетса:
Код:
E-Mail: arigato.freelance@gmail.com
Последний раз редактировалось Arigato; 04.09.2017 в 12:12. |
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
спасибо.
Цитата:
а как можно в чистом си получить случайное вещественное число от 0 до 1 ? (с нормальным распределением псч, разумеется) а в данном случае, может быть, стоит так? Код:
Последний раз редактировалось Serge_Bliznykov; 04.09.2017 в 13:16. |
|
![]() |
![]() |
![]() |
#9 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,821
|
![]()
Нужно равномерное распределение. Можно вот так вычислить большое случайное число:
Код:
Код:
E-Mail: arigato.freelance@gmail.com
Последний раз редактировалось Arigato; 04.09.2017 в 14:22. |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 18.10.2016
Сообщений: 27
|
![]()
Последовательность хранится в файле. Хотелось бы не запихивать всю последовательность в массив, если способ это реализовать?
Поскольку 70млн - это еще не предел, в дальнейшем они будут в разы, а то еще и на порядок длиннее. Или всё-таки самый простой и быстрый способ - это присвоить все массиву и его перемешивать? |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нахождение самой длинной последовательности | ARV.net | C# (си шарп) | 7 | 03.11.2012 13:06 |
Перемешивание массива | revaldo666 | Общие вопросы C/C++ | 6 | 19.01.2011 15:04 |
Перемешивание строк | gamer123 | Общие вопросы Delphi | 17 | 25.08.2010 20:10 |
Текст в очень длинной таблице | ANG3 | Microsoft Office Word | 2 | 27.01.2010 19:58 |
Перемешивание строк | Черничный | БД в Delphi | 3 | 15.07.2008 14:11 |