|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Где-то в степиAbstraction, понял, если автор под цифрой имеет ввиду число а их в билете 6 чисел, то почему он везде в примерах оперирует таким видом . "Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения" тут же везде по семь чисел? и второе, имхо было бы правильно делать выравнивание нулем, ну а так параллели и словарь. Я ж говорю - сильно похоже на 6 из 49 + доп.число + суперчисло(но оно выбирается системой а не игроком) Допчисло играет только тогда когда угаданы не менее 3 чисел. Тогда 3 угаданных числа дают выигрыш допустим 10 нерублей, а 3 угаданных числа + доп.число дают выигрыш допустим 20 нерублей. Так "размазывается" призовой фонд по большему числу классов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 16:44 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
M234, а понял, автор хочет купить 500 000 билетов, и ему надо заполнить 6 из 49 плюс 1 итого семь в массиве.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 16:55 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
M234, Я то грешным делом подумал что лотерея это образное понятие, 6 цифр это ID билета,( были всякие лотереи Досаф, госзаймы( мсу должен помнить - рожденный в СССР)), а оказывается у поколения некс, лотерея - это однозначно лотто.. зы печалька.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 17:08 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Где-то в степиM234, Я то грешным делом подумал что лотерея это образное понятие, 6 цифр это ID билета,( были всякие лотереи Досаф, госзаймы( мсу должен помнить - рожденный в СССР)), а оказывается у поколения некс, лотерея - это однозначно лотто.. зы печалька.. Я вообще смысл затеи не понимаю. Все это "лотто" просчитываются на такие вот "хаки" математически. То есть выиграть ты выиграешь, но выигрыш будет меньше или равен вложенному, ну разве что тебе повезёт и заполнив грубо говоря четверь возможных комбинаций ты возьмёшь "потного джека" ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 17:16 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
M234, я и назвал все это печалькой, то что вы сказали, это туда входит. ( песенка котэ Базилио) а еще плюс не играть в эти игры,( посмотреть кто хозяин этой игры) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 17:21 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Господа, какая разница, зачем и почему, надо быстро сгенерить 500 000 комбинаций из 6 чисел каждая, причем чтобы соблюдалась уникальность вне зависимости от порядка чисел внутри одной комбинации. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 19:37 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniКомбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11 Значит, комбинация не уникальна ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 20:38 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Количество вариантов из 6 цифр - 1 000 000. Что уже выше заявленных 500 000. Количество их перестановок - 6! = 720 Таким образом, количество возможных вариантов равно 1 000 000 * 720. Я полагаю, что после исключения повторов все равно не будет меньше миллиона. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 20:48 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Cat2Количество вариантов из 6 цифр - 1 000 000. Что уже выше заявленных 500 000. Количество их перестановок - 6! = 720??????? Я тоже хочу так считать... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 22:59 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniпричем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения. Если ехать простым for или через linq по массивам, получается очень долго, т.к. каждый раз надо проверять, есть ли совпадения в комбинациях или нет и если есть, комбинацию надо перегенерировать. Для каждой комбинации сразу делать отсортированный "Хеш" ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 23:29 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
AbstractionCat2Количество вариантов из 6 цифр - 1 000 000. Что уже выше заявленных 500 000. Количество их перестановок - 6! = 720??????? Я тоже хочу так считать... Надо было математику в ВУЗе учить Правда, я неправильно посчитал. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 23:36 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Теперь кто скажет, как быстро посчитать хеш набора чисел или строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 00:39 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Так. Обещанное решение за линейное время. 1. Формулировка задачи. Поскольку исходная задача особой ясностью не отличилась, я буду иметь наглость додумать детали удобным мне образом. Итак, пусть требуется создать 500 000 (N) разных нумерованных лотерейных билетов. Каждый билет - это шесть (k) неповторяющихся чисел от 1 до 90 (m). Билеты, отличающиеся только порядком чисел, разными не считаются. Требуется, чтобы нельзя было угадать числа на билете, зная его номер и vice versa. Требуется, чтобы для любого билета любые две возможные комбинации номеров встречались с примерно равной вероятностью; желательно, чтобы это не менялось в результате знакомства с любыми иными билетами. 2. Анализ билетов. Сжатие содержания билета до одного числа. Сколько всего может быть разных билетов? Очевидно, столько, сколько существует способов неупорядоченным образом выбрать k чисел из m без возвращения (т.е. каждое число выбирается не более одного раза): Таким образом, 500 000 билетов мы наберём без проблем. Теперь вопрос: какова вероятность, что конкретное число (скажем, m) окажется на конкретном билете P(m)? Это отношение числа билетов, на которых оно есть, к числу всех билетов. Но если про билет известно только, что он содержит m, таких билетов столько, сколько было бы билетов с k-1 числом от 1 до m-1; а если билет не содержит m - это то же самое, как если бы мы с самого начала выбирали только числа от 1 до m-1: Что подводит нас к методу "сжатия" билета до одного числа. Пусть у нас есть одно случайное натуральное число, равномерно распределённое от 1 до C m k . Если оно не больше C m-1 k-1 , добавим к билету m и для последующих расчётов уменьшим k на 1; иначе же уменьшим само число на количество "несбывшихся" вариантов C m-1 k-1 и получим число, равномерно распределённое уже от 1 до C m-1 k . Код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
3. Обеспечение уникальности и случайности. Очевидно, различным числам GetList сопоставит различные билеты, но работу мы себе не слишком упростили: теперь надо быть уверенным, что числа будут уникальными. Проще всего, конечно, использовать в качестве числа номер билета, но тогда мы не удовлетворим условиям из пункта 1. Можно начать со случайного 32-разрядного числа seed, в цикле прибавлять к нему некоторое другое случайное нечётное число и генерировать билет, только если seed меньше C m k . Несложно доказать, что при этом seed повторит своё значение только через 2 32 итераций, сгенерировав в процессе все возможные билеты. Также, любой один конкретный билет при этом будет совершенно случайным... но уже три билета подряд по-прежнему будут находится в чёткой зависимости. Симметричный шифр переводит открытый текст (набор байт) в шифртекст такого же размера, причём это преобразование обратимо. То есть, если мы будем шифровать seed некоторым симметричным шифром (со случайным ключом), разным значениям seed всегда будут соответствовать разные результаты шифрования - и, по цепочке, разные билеты. Достаточно хороший шифр также гарантирует практический "разрыв" видимой зависимости между выходным значением и любыми косвенными данными о входном значении. Вот пример шифра, "достаточно хорошего" для этого примера (но не для реальной лотереи!): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Окончательно, пишем саму программу. Чисто косметическая добавка: поскольку список чисел билета у нас строится от больших к меньшим, его можно бы развернуть перед выводом на печать. Код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 01:12 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniИсходя из этого вопрос, есть ли какой-то более быстрый способ проверки наличия набора значений в массиве данных? Используйте множества (HashSet/SortedSet): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 06:56 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
AbstractionТак. Обещанное решение за линейное время. 1. Формулировка задачи. Поскольку исходная задача особой ясностью не отличилась, я буду иметь наглость додумать детали удобным мне образом. Итак, пусть требуется создать 500 000 (N) разных нумерованных лотерейных билетов. Каждый билет - это шесть (k) неповторяющихся чисел от 1 до 90 (m). Билеты, отличающиеся только порядком чисел, разными не считаются. Требуется, чтобы нельзя было угадать числа на билете, зная его номер и vice versa. Требуется, чтобы для любого билета любые две возможные комбинации номеров встречались с примерно равной вероятностью; желательно, чтобы это не менялось в результате знакомства с любыми иными билетами. 2. Анализ билетов. Сжатие содержания билета до одного числа. Сколько всего может быть разных билетов? Очевидно, столько, сколько существует способов неупорядоченным образом выбрать k чисел из m без возвращения (т.е. каждое число выбирается не более одного раза): Таким образом, 500 000 билетов мы наберём без проблем. Теперь вопрос: какова вероятность, что конкретное число (скажем, m) окажется на конкретном билете P(m)? Это отношение числа билетов, на которых оно есть, к числу всех билетов. Но если про билет известно только, что он содержит m, таких билетов столько, сколько было бы билетов с k-1 числом от 1 до m-1; а если билет не содержит m - это то же самое, как если бы мы с самого начала выбирали только числа от 1 до m-1: Что подводит нас к методу "сжатия" билета до одного числа. Пусть у нас есть одно случайное натуральное число, равномерно распределённое от 1 до C m k . Если оно не больше C m-1 k-1 , добавим к билету m и для последующих расчётов уменьшим k на 1; иначе же уменьшим само число на количество "несбывшихся" вариантов C m-1 k-1 и получим число, равномерно распределённое уже от 1 до C m-1 k . Код:+ Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
3. Обеспечение уникальности и случайности. Очевидно, различным числам GetList сопоставит различные билеты, но работу мы себе не слишком упростили: теперь надо быть уверенным, что числа будут уникальными. Проще всего, конечно, использовать в качестве числа номер билета, но тогда мы не удовлетворим условиям из пункта 1. Можно начать со случайного 32-разрядного числа seed, в цикле прибавлять к нему некоторое другое случайное нечётное число и генерировать билет, только если seed меньше C m k . Несложно доказать, что при этом seed повторит своё значение только через 2 32 итераций, сгенерировав в процессе все возможные билеты. Также, любой один конкретный билет при этом будет совершенно случайным... но уже три билета подряд по-прежнему будут находится в чёткой зависимости. Симметричный шифр переводит открытый текст (набор байт) в шифртекст такого же размера, причём это преобразование обратимо. То есть, если мы будем шифровать seed некоторым симметричным шифром (со случайным ключом), разным значениям seed всегда будут соответствовать разные результаты шифрования - и, по цепочке, разные билеты. Достаточно хороший шифр также гарантирует практический "разрыв" видимой зависимости между выходным значением и любыми косвенными данными о входном значении. Вот пример шифра, "достаточно хорошего" для этого примера (но не для реальной лотереи!):+ Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Окончательно, пишем саму программу. Чисто косметическая добавка: поскольку список чисел билета у нас строится от больших к меньшим, его можно бы развернуть перед выводом на печать. Код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Спасибо за исчерпывающий ответ, НО, у вас написано Код: sql 1.
А у меня ситуация наоборот, ОНИ БУДУТ считаться РАВНЫМИ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 10:10 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskini Спасибо за исчерпывающий ответ, НО, у вас написано Код: sql 1.
А у меня ситуация наоборот, ОНИ БУДУТ считаться РАВНЫМИ Разными не считаются = считаются равными, вам нельзя в программисты Уникальность 500 тыс билетов из 6 чисел получается простым последовательным перебором от 1 до 500000, могу предположить, что каждое число может быть двузначным или даже трехзначным, так как об это не сказано в первом сообщении, то в постановщики задач вам тоже нельзя ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 10:37 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
автор топика жжёт ))) 10 минут и код готов. минус его только метод Рандом. а так шустро работает. меньше секунды Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
ЗЫ. число повторений (MISMATCH) на 500.000 около 10.000 штук ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 11:39 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
типа с утречка , взамен зарядки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 11:42 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-erтипа с утречка , взамен зарядки. За "goto" нужно отстреливать из винтореза на месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 13:20 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
МСУЗа "goto" нужно отстреливать из винтореза на месте. МСУ, ты это детям рассказывай, что goto это есть плёхо. а мне лично влом писать лишние строчки с while , break ...etc утяжеляют код и ограничивают в возможностях. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 13:37 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-erМСУ, ты это детям рассказывай, что goto это есть плёхо Вот тебе и рассказываю же. beg-in-erа мне лично влом писать лишние строчки с while , break ...etc утяжеляют код и ограничивают в возможностях. Хрень эту в яслях коллегам расскажи, недоросль. Goto - признак идиотизма. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 18:30 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-er, таким как ты посвещается: ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 18:33 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
МСУ Goto - признак идиотизма.авторпрограммисты делятся на три группы: -кто знает, что такое goto и используют его по назначению -кто не знают этого оператора, но хотят узнать -кто вообще отрицают его существование...простим МСУ его заносчивость и жырное тролление. goto всего лишь инструмент. и как любой инструмент, в нормальных руках он будет работать как надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 19:08 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-ergoto всего лишь инструмент. и как любой инструмент, в нормальных руках он будет работать как надо. goto - пережитки прошлого, этим лохмотьям не место в языках высокого уровня. P.S. Почитай, что такое структурное программирование (последовательное исполнение, ветвление и цикл). Операторам безусловного перехода место только в воспаленном сознании кодирующих обезьянок, не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 19:17 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
МСУbeg-in-ergoto всего лишь инструмент. и как любой инструмент, в нормальных руках он будет работать как надо. goto - пережитки прошлого, этим лохмотьям не место в языках высокого уровня. P.S. Почитай, что такое структурное программирование (последовательное исполнение, ветвление и цикл). Операторам безусловного перехода место только в воспаленном сознании кодирующих обезьянок, не более того. Ну, со своими "сугуботеоретическими" познаниями МСУ бы нас еще объектно-ориентированному программированию начал учить... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2012, 21:04 |
|
|
start [/forum/topic.php?fid=20&msg=38032502&tid=1405371]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
97ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 204ms |
0 / 0 |