|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Добрый день. Есть задача генерации лотерейных билетов. Один билет 6 цифр. Билетов 500 000. Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения. Если ехать простым for или через linq по массивам, получается очень долго, т.к. каждый раз надо проверять, есть ли совпадения в комбинациях или нет и если есть, комбинацию надо перегенерировать. Исходя из этого вопрос, есть ли какой-то более быстрый способ проверки наличия набора значений в массиве данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 09:52 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
25 и 11 - это цифры? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 10:10 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Проверяй не каждую цифру а хеш отсортированной строки, например "156981125".GetHashCode() в массиве хешей уже созданных билетов. думаю ускорит. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 10:19 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Первое, что в голову пришло: отсортировать, сформировать строку "1 5 6 9 8 11 25", взять от неё хэш и использовать в качестве ключа комбинации. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 10:20 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
dzone, только разделитель между цифрами в строке нужен :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 10:21 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskini, Вы не поняли задачу, лотерейные билеты - один билет имеет идентификатор из шесть цифр пример 000001, 0000002 и тд. задача простая от 0 до 500 000 простой инкремент, забить пустые регистры нулями. То что вы написали 1 5 6 9 8 11 25, вы будете удивлены но тут 9 цифр, они никак не укладываются в ваше задание. Вы путаете число с цифрой, номер это также комбинация из цифр, уникальность номера тут можно развести холивар ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 10:29 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
skyANA, массив случайных цифр от 1 1 1 1 1 1 1 до 9 9 9 9 9 9 9 или просто цифр и потом их перемешать не? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 10:32 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Взаимоисключающие условия. Если "причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11", то будет и 1 2 3 4 5 6 равно 6 5 4 3 2 1,etc. Что уменьшает количество возможных комбинаций в разы. (0 0 0 0 0 1 = 0 0 0 0 1 0 = 0 0 0 1 0 0 = 0 0 1 0 0 0 = 0 1 0 0 0 0 = 1 0 0 0 0 0). Так что Вы определитесь - у Вас там 6 ЦИФР или 6 ЧИСЕЛ? И уже после этого задавайте вопрос, как Вам сгенерить случайный массив. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 12:29 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
dzoneПроверяй не каждую цифру а хеш отсортированной строки, например "156981125".GetHashCode() в массиве хешей уже созданных билетов. думаю ускорит. Да, возможно это ускорит, я тоже думал про хеши, попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 12:52 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Где-то в степиizoldov-roskini, Вы не поняли задачу, лотерейные билеты - один билет имеет идентификатор из шесть цифр пример 000001, 0000002 и тд. задача простая от 0 до 500 000 простой инкремент, забить пустые регистры нулями. То что вы написали 1 5 6 9 8 11 25, вы будете удивлены но тут 9 цифр, они никак не укладываются в ваше задание. Вы путаете число с цифрой, номер это также комбинация из цифр, уникальность номера тут можно развести холивар Я говорю не о номере билета, а о игровой комбинации, я в первом посте все верно написал ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 12:53 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniДобрый день. Есть задача генерации лотерейных билетов. Один билет 6 цифр. Билетов 500 000. Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения. Если ехать простым for или через linq по массивам, получается очень долго, т.к. каждый раз надо проверять, есть ли совпадения в комбинациях или нет и если есть, комбинацию надо перегенерировать. Исходя из этого вопрос, есть ли какой-то более быстрый способ проверки наличия набора значений в массиве данных?Отвечая на заданный вопрос - есть: использовать упорядоченные массивы. Другое дело, что, ИМХО, практичнее сначала сгенерировать 500000 неповторяющихся чисел, каждое из которых потом превращать в набор номеров. Или сразу использовать процесс генерации, в принципе не допускающий повторов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 12:56 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniДобрый день. Есть задача генерации лотерейных билетов. Один билет 6 цифр ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 13:05 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Abstraction, вы определитесь, что есть цифра, что есть число - это разные понятия. вы блондинка? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 13:08 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Abstraction, извиняюсь, это не вам, а ТС ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 13:09 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Где-то в степиAbstraction, вы определитесь, что есть цифра, что есть число - это разные понятия. *вежливо* Спасибо, я в общих чертах в курсе. Слезьте уже с белого носорога. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 13:12 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Abstraction, значит вы блондинка, если в общих чертах а по теме что вы виртуально представляете никакой тут рандоминизации и проверок не надо просто простой инкримент 1,2,3,4,5,6 7,8,9,10,11,12 .......... .......... uint.max(); ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 13:18 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Abstraction, я по моему извинился перед вами, что запостил ответ вместо автору вам. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 13:20 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Где-то в степиAbstraction, значит вы блондинка, если в общих чертах а по теме что вы виртуально представляете никакой тут рандоминизации и проверок не надо просто простой инкримент 1,2,3,4,5,6 7,8,9,10,11,12 .......... .......... uint.max();Подсказка: номера в лото и подобных играх обычно ограничены сверху - раз, комбинации должны быть случайными - два. Хотя ТС обо всём этом предоставляет догадываться отвечающим, да. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 13:22 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Abstraction, в том то и дело, что автор не указал ничего, и что у него цифры и число и номер, это одно и тоже. ЕГЭ еще не то с людьми может сделать )) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 13:25 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniДобрый день. Есть задача генерации лотерейных билетов. Один билет 6 цифр. Билетов 500 000. Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения. Если ехать простым for или через linq по массивам, получается очень долго, т.к. каждый раз надо проверять, есть ли совпадения в комбинациях или нет и если есть, комбинацию надо перегенерировать. Исходя из этого вопрос, есть ли какой-то более быстрый способ проверки наличия набора значений в массиве данных? Ты бы лучше ссылку на правила проведения лотереи дал, они должны быть доступны, чем пытаться своими словами излагать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 13:34 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
AbstractionГде-то в степиAbstraction, значит вы блондинка, если в общих чертах а по теме что вы виртуально представляете никакой тут рандоминизации и проверок не надо просто простой инкримент 1,2,3,4,5,6 7,8,9,10,11,12 .......... .......... uint.max();Подсказка: номера в лото и подобных играх обычно ограничены сверху - раз, комбинации должны быть случайными - два. Хотя ТС обо всём этом предоставляет догадываться отвечающим, да. если число ограничить двумя порядками , и требовать что бы в массиве не повторялось число ( оно было бы уникальным для всего массива массивов) задача вообще не имеет решения ибо мы сможем получить только 99/6 массивов и все.... что имел ввиду автор, так и осталось загадкой.... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 16:04 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
По поводу использования GetHashCode(), не годится: Код: sql 1.
Это из MSDN, выход я нашел, делаем строку вида 1 2 3 4 45 26 15 и заталкиваем в массив, а потом просто проверяем наличие строки в массиве, Hash тут в принципе не нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 16:06 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Где-то в степиAbstractionпропущено... Подсказка: номера в лото и подобных играх обычно ограничены сверху - раз, комбинации должны быть случайными - два. Хотя ТС обо всём этом предоставляет догадываться отвечающим, да. если число ограничить двумя порядками , и требовать что бы в массиве не повторялось число ( оно было бы уникальным для всего массива массивов) задача вообще не имеет решения ибо мы сможем получить только 99/6 массивов и все.... что имел ввиду автор, так и осталось загадкой....Что должны быть уникальные комбинации. Поскольку числа обычно от 1 до 90, то имеем 622614630 возможных вариантов. Также, полагаю, автор хочет, чтобы вероятности возникновения в серии каждого из возможных вариантов были с хорошей точностью равны, корреляция варианта с номером билета отсутствовала, корреляция вариантов на соседних билетах отсутствовала. Будет не лень - вечером напишу алгоритм за линейное время. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 16:23 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Abstraction, понял, если автор под цифрой имеет ввиду число а их в билете 6 чисел, то почему он везде в примерах оперирует таким видом . "Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения" тут же везде по семь чисел? и второе, имхо было бы правильно делать выравнивание нулем, ну а так параллели и словарь. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 16:35 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniПо поводу использования GetHashCode(), не годится: Код: sql 1.
Это из MSDN, выход я нашел, делаем строку вида 1 2 3 4 45 26 15 и заталкиваем в массив, а потом просто проверяем наличие строки в массиве, Hash тут в принципе не нужен Чёт вы не то написали. Вот если числа отсортировать по возрастанию(1 2 3 4 15 26 45) , то тогда потом действительно можно просто сравнивать строки. А какая у вас лотерейная система? Что это 6 из 49 + доп.число + суперчисло или 6 из 45 просто или ещё какая? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2012, 16:40 |
|
Перебор 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 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
sphinx_mvНу, со своими "сугуботеоретическими" познаниями МСУ бы нас еще объектно-ориентированному программированию начал учить... Тебя учи не учи - как был бестолочью, так им и остался :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2012, 01:36 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
МСУsphinx_mvНу, со своими "сугуботеоретическими" познаниями МСУ бы нас еще объектно-ориентированному программированию начал учить... Тебя учи не учи - как был бестолочью, так им и остался :)Ага-ага... Ваши познания Вы вполне продемонстрировали. Или думаете, если Ваш бред почистили, он от этого перестал быть бредом? Так что сядьте в сторонке и тихонечко покурите. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2012, 02:27 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-er, По поводу алгоритма, у вас формируется 500 000 билетов, но в каждом билете у меня таких комбинаций 12, т.е. это все надо сделать 12 раз. За секунды тут ничего не делается, это бред, такой набор чисел формируется гораздо дольше. Получается в итоге 12 массивов по 500 000 в каждом, уникальность только в пределах 1-го массива, чем ближе к 500 000 тем скорость по понятным причинам падает. Плюс мне надо еже и в базу затолкать это все, поэтому не все так быстро. Алгоритм похожий Вашему я сделал еще раньше, только без использования goto , но у вас тоже есть пару идей, за них спасибо, сейчас попробую Так что в общем, благодарю ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2012, 13:36 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskini, Товарищь, вы просто не умеете читать и думать. предложенный алгоритм делает то что надо , 6 лямов уникальных билетов за 10 секунд. izoldov-roskini мож вам сменить профессию? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2012, 13:48 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
sphinx_mvАга-ага... Ваши познания Вы вполне продемонстрировали. Или думаете, если Ваш бред почистили, он от этого перестал быть бредом? Так что сядьте в сторонке и тихонечко покурите. Бред обычно хостился у тебя в мозжечке, даже сидя на короточках в сторонке его так просто не выкуришь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2012, 18:44 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
МСУsphinx_mvАга-ага... Ваши познания Вы вполне продемонстрировали. Или думаете, если Ваш бред почистили, он от этого перестал быть бредом? Так что сядьте в сторонке и тихонечко покурите. Бред обычно хостился у тебя в мозжечке, даже сидя на короточках в сторонке его так просто не выкуришь. Ссылки на документацию на конкретные программных средств и продуктов - у Вас называется бредом? И Вы уже разобрались, что такое инкапсуляция, наследование и полиморфизм? Может это не в Вашем воспаленном воображении родилось гениальное "использование объектно-ориентированных методик в программировании не является объектно-ориентированным программированием"? В-общем, до того, чтобы хотя бы пытаться корчить из себя "крупного специалиста" Вам еще лечи учиться и учиться... И долго-долго набираться практического опыта... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2012, 23:17 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
sphinx_mvСсылки на документацию на конкретные программных средств и продуктов - у Вас называется бредом? Сынок, о каких ссылках ты вещаешь? Ты двух слов в теме не мог связать, о чем ты. sphinx_mv И Вы уже разобрались, что такое инкапсуляция, наследование и полиморфизм? Я-то разобрался, а вот ты так и не осилил сие фундаментальные принципы построения бизнес логики в приложениях. Шагом марш в сад, учить. sphinx_mvМожет это не в Вашем воспаленном воображении родилось гениальное "использование объектно-ориентированных методик в программировании не является объектно-ориентированным программированием"? Ты сам-то понял что ляпнул, двоешник? sphinx_mv В-общем, до того, чтобы хотя бы пытаться корчить из себя "крупного специалиста" Вам еще лечи учиться и учиться... И долго-долго наб quot ираться практического опыта... И это мне пишет ламер, который по документации оракла осилил пакеты с хранимыми процедурами? Не смешно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2012, 23:53 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-erizoldov-roskini, Товарищь, вы просто не умеете читать и думать. предложенный алгоритм делает то что надо , 6 лямов уникальных билетов за 10 секунд. izoldov-roskini мож вам сменить профессию? А может Вам перестать трындеть и просто говорить по существу и слушать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 00:10 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Кто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 00:20 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
МСУsphinx_mvСсылки на документацию на конкретные программных средств и продуктов - у Вас называется бредом? Сынок, о каких ссылках ты вещаешь? А вот тех самых, по поводу которых Вы совершенно бестолковым образом размазывали сопли... МСУТы двух слов в теме не мог связать, о чем ты. Это не потому, что я не смог их связать... Это потому что Вы не способны их воспринять - для этого необходимо иметь определенный багаж базовых знаний, чем Вы, к сожалению, не очень владеете... Знать название термин мало - нужно еще и понимать, что он означает и как и когда применяется. И с этим у Вас весьма слабовато. И еще раз напоминаю: если Ваш бред был затерт - от этого он не перестал быть Вашим бредом. МСУsphinx_mv И Вы уже разобрались, что такое инкапсуляция, наследование и полиморфизм? Я-то разобрался, а вот ты так и не осилил сие фундаментальные принципы построения бизнес логики в приложениях. Шагом марш в сад, учить. Вы бы с основами программирования для начала разобрались, прежде чем вещать о проектировании архитектур приложений. И, кстати, я вполне могу позволить себе, взяв дрын покрепче - и даже не "шагом", а "бегом" - погнать Вас перед собой в сад учить матчасть... МСУsphinx_mvМожет это не в Вашем воспаленном воображении родилось гениальное "использование объектно-ориентированных методик в программировании не является объектно-ориентированным программированием"? Ты сам-то понял что ляпнул, двоешник? Расслабьтесь и получите удовольствие: это была дословная цитата того, что некогда ляпнул МСУ. Может знаете такого? Нет? Ну, ничего... Кто-нибудь другой точно знает... И даже соответствующий "спич" наверняка вспомнит... МСУsphinx_mv В-общем, до того, чтобы хотя бы пытаться корчить из себя "крупного специалиста" Вам еще лечи учиться и учиться... И долго-долго набираться практического опыта... И это мне пишет ламер, который по документации оракла осилил пакеты с хранимыми процедурами? Не смешно.Я затрудняюсь оценить степень ламеризма "профессиАнала", который объектный тип данных в Оракле (после всех приведенных ссылок на документацию и примеров конкретных реализаций) все еще воспринимает всего лишь как пакеты с хранимыми процедурами, а собственный програмазм в "лапше с соплями" считает верхом совершенства... Вот такая вот суровая действительность, которой до просто "не смешно" очень неблизко.... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 02:18 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniКто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1. Abstraction привел вам формулу на 2м листе, поменяйте в ней м и к на нужные вам. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 06:39 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
goto нужен только если нет механизма исключений. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 07:58 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Алексей Кgoto нужен только если нет механизма исключений.Правильный ответ: goto нужен тогда, когда он нужен. :) И к наличию/отсутствию механизма исключений его использование никакого отношения не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 10:11 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
sphinx_mvАлексей Кgoto нужен только если нет механизма исключений.Правильный ответ: goto нужен тогда, когда он нужен. :)Когда он ещё нужен? Нужен показательный пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 10:42 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
sphinx_mvА вот тех самых, по поводу которых Вы совершенно бестолковым образом размазывали сопли... Твои сопли бесполезно размазывать, поэтому вернее сказать так: "учил балбеса объектно-ориентированным постулатам, размазывая его ошметки мозгов о кирпичную кладь". Пойдет? sphinx_mvЭто не потому, что я не смог их связать... Это потому что Вы не способны их воспринять - для этого необходимо иметь определенный багаж базовых знаний, чем Вы, к сожалению, не очень владеете... Знать название термин мало - нужно еще и понимать, что он означает и как и когда применяется. И с этим у Вас весьма слабовато. И еще раз напоминаю: если Ваш бред был затерт -от этого он не перестал быть Вашим бредом. Ту несносную порожень, которую изливало твое больное воображение, априори нельзя "воспринять". Называть PL/SQL объектно-ориентированным языком программирования может только полоумный. А те ошметки из документации оракла, которые ты тупо пытался искать по паттерну "oracle object oriented programming" можешь показать своим коллегам -детям из детского садика. Они вместе с тобой посмеются над, особенно над "одноуровневым наследованием". sphinx_mvВы бы с основами программирования для начала разобрались, прежде чем вещать о проектировании архитектур приложений. И, кстати, я вполне могу позволить себе, взяв дрын покрепче - и даже не "шагом", а "бегом" - погнать Вас перед собой в сад учить матчасть... Погонялка еще не выросла, чтобы такие пуки из кустов издавать. Если твое убогое сознание видит в программировании только goto и хранимые процедуры, могу посоветовать тебе убить себя об стену. Большей пользы твое скудное сознание не может привнести в этот форум. sphinx_mvРасслабьтесь и получите удовольствие: это была дословная цитата того, что некогда ляпнул МСУ. Может знаете такого? Нет? Ну, ничего... Кто-нибудь другой точно знает... И даже соответствующий "спич" наверняка вспомнит... Ты сам с собой разговариваешь, задавая и отвечая на свои же тупые вопросы? В клинику сходи, там помогут. sphinx_mvЯ затрудняюсь оценить степень ламеризма "профессиАнала", который объектный тип данных в Оракле (после всех приведенных ссылок на документацию и примеров конкретных реализаций) все еще воспринимает всего лишь как пакеты с хранимыми процедурами, а собственный програмазм в "лапше с соплями" считает верхом совершенства... Вот такая вот суровая действительность, которой до просто "не смешно" очень неблизко.... Твои оценки слишком посредственны, от них веет тупым быдломышлением ораклоида-неудачника. С объектным типом данных в Оракле ты можешь сходить повеситься, а не орать во всю гортань, что это - ООП. Повесели своих коллег в саду, уже ведь советовал. sphinx_mvПравильный ответ: goto нужен тогда, когда он нужен Правильный ответ: только безумные кретины в языках высокого уровня используют goto. В этих языках данный оператор в принципе не нужен. Хотя, твое тупое мышление кодирующей PL-обезьянки еще не доросло до этих позывов здравой логики. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 11:06 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Алексей ККогда он ещё нужен? Нужен показательный пример. сходу 1. выход из глубокого цыкла Код: c# 1. 2. 3. 4. 5. 6. 7.
2. Замена сложной рекурсии по моему глубокому, и уже непоколебимому убеждению, все , кто говорит что goto это признак плохого, просто до конца не понимают что такое синтетический язык программирования. потому как необходимость применения/неприменения этого злощастного оператора goto прямо следует из понимания того , что есть язык программирования. но думаю это особая тема, и в рамках этой темы развивать это направление не буду, т.к. это явный офтопэ. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 11:23 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniКто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1.Ответ для самопроверки: 593775. Способ его получения ищется или в моём посте выше, или в Вики, или в Гугле, или в любой книге по теории вероятностей. Заодно обратите внимание, что вы упустили фразу "без повторов", т.к. 1 1 1 2 2 3 - тоже набор из 6 чисел от 1 до 30; количество наборов из N по k с повторами - ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 11:26 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-erАлексей ККогда он ещё нужен? Нужен показательный пример. сходу 1. выход из глубокого цыкла Код: c# 1. 2. 3. 4. 5. 6. 7.
Нормально разбить по методам + return ? Код: c# 1. 2. 3. 4. 5. 6. 7.
beg-in-er2. Замена сложной рекурсииНужен пример. beg-in-erпо моему глубокому, и уже непоколебимому убеждению, все , кто говорит что goto это признак плохого, просто до конца не понимают что такое синтетический язык программирования. потому как необходимость применения/неприменения этого злощастного оператора goto прямо следует из понимания того , что есть язык программирования. но думаю это особая тема, и в рамках этой темы развивать это направление не буду, т.к. это явный офтопэ.Мне кажется нужно провести соответствующий рефакторинг и никакой goto не потребуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 11:33 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Алексей КНормально разбить по методам + return ? ))) 1. налетаем каждый раз на то , что надо метод создавать. допстроки + много веселья. метод может быть живым. 2. можем прыгнуть не обязательно в конец цыклов. а подальше 3. скажем , если требуется быстродействие , то стоимость вызова метода уже имеет значение см: тута beg-in-er2. Замена сложной рекурсииНужен пример. ну сами подумайте, как можно просто заменить сложную рекурсию, с большим количеством ветвлений внутри, на однократно вызываемый метод. я не фанат goto, я его применяю только там где его применение обходится дешевле других конструкций управления. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 11:44 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
МСУ, поскольку оператор goto не изжит из C# - соответственно им кто-то пользуется, и его использование не помечено ни obsolet ни другой чёрной меткой. Ваши личные предпочтения в употреблении goto таки продолжают оставаться вашими как и предпочтения beg-in-er. Все при своих зачем дальше засорять форум? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 11:50 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
фиганычМСУ, поскольку оператор goto не изжит из C# - соответственно им кто-то пользуется, и его использование не помечено ни obsolet ни другой чёрной меткой. Ваши личные предпочтения в употреблении goto таки продолжают оставаться вашими как и предпочтения beg-in-er. Все при своих зачем дальше засорять форум? Он и не может быть изжит, т.к. есть понятие функциональности языка, а так же обратной совместимости. Речь даже не о моих предпочтениях, а о критике со стороны общества. При всех отрицательных сторонах этого оператора. По поводу офтопа - любая ветка, впринципе так или иначе офтопична, т.к. в дискуссии участвуют люди, а не роботы. Так что расслабься. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 12:06 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-erАлексей КНормально разбить по методам + return ? ))) 1. налетаем каждый раз на то , что надо метод создавать. допстроки + много веселья. метод может быть живым. 2. можем прыгнуть не обязательно в конец цыклов. а подальшеЛучше не полениться, и произвести выделение метода(ов). Тут даже старина Фаулер со мной согласен. :-) beg-in-er3. скажем , если требуется быстродействие , то стоимость вызова метода уже имеет значение см: тутаВроде как при компиляции производится инлайнинг методов. beg-in-erbeg-in-er2. Замена сложной рекурсииНужен пример. ну сами подумайте, как можно просто заменить сложную рекурсию, с большим количеством ветвлений внутри, на однократно вызываемый метод.Как раз в рекурсии использовать return самое оно. В качестве примера см. парсеры дерева выражений LINQ через ExpressionVisitor. А там рекурсию я бы не назвал простой. beg-in-erя не фанатЭто хорошо. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 12:30 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
фиганычВаши личные предпочтения в употреблении goto таки продолжают оставаться вашими... Нарушение фундаментальных основ. Не? Тут авторНаиболее сильной критике со стороны разработчиков структурного подхода к программированию подвергся оператор GOTO (оператор безусловного перехода), имевшийся тогда почти во всех языках программирования. Неправильное и необдуманное использование произвольных переходов в тексте программы приводит к получению запутанных, плохо структурированных программ (т. н. спагетти-кода), по тексту которых практически невозможно понять порядок исполнения и взаимозависимость фрагментов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 12:39 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniКто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1. Может проще сгенерить все возможные варианты, а после этого случайным образом "выдергивать" их? PS - по крайней мере так генерировали в Русском Лото. Генерилось у них минут 10-15 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 12:40 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Алексей КВроде как при компиляции производится инлайнинг методов. не знаю что там именно происходит, но я вижу что происходит замедление исполнения команд. Как раз в рекурсии использовать return самое оно. цель как раз отказаться от рекурсии по причине ускорения ( до 10 раз , а то и более) .................... Алексей К Неправильное и необдуманное использование goto.... так это чьи проблемы , оператора goto , или хомосапиенса его использующего??? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 12:54 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Syrexizoldov-roskiniКто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1. Может проще сгенерить все возможные варианты, а после этого случайным образом "выдергивать" их? PS - по крайней мере так генерировали в Русском Лото. Генерилось у них минут 10-15А смысл? Выше приведён алгоритм, который получает комбинацию по числу, где число - от 0 до (количество вариантов-1). То есть, "все возможные варианты" - просто множество чисел. Вопрос в том, как нормально "выдернуть" без повторов, с равномерным распределением. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 13:01 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-erАлексей КВроде как при компиляции производится инлайнинг методов. не знаю что там именно происходит, но я вижу что происходит замедление исполнения команд.Не замечал. beg-in-erКак раз в рекурсии использовать return самое оно. цель как раз отказаться от рекурсии по причине ускорения ( до 10 раз , а то и более)Опять же нужен пример. Верить наслово никому нельзя. :-) beg-in-erАлексей К Неправильное и необдуманное использование goto.... так это чьи проблемы , оператора goto , или хомосапиенса его использующего???Вроде как все "обдуманные" стратегии использования goto завёрнуты в конструкции структурного программирования: if, while, throw, return и т. п. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 13:18 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-erАлексей КВроде как при компиляции производится инлайнинг методов. не знаю что там именно происходит, но я вижу что происходит замедление исполнения команд. Элементарно... При вызове процедуры/функции добавляется, самое меньшее, передача параметров и возврат результатов - и это не считая выделения памяти под локальные переменные и их инициализацию. Переход по метке всего этого не требует. Соответственно, и работает быстрее... beg-in-erКак раз в рекурсии использовать return самое оно. цель как раз отказаться от рекурсии по причине ускорения ( до 10 раз , а то и более) Конкретная цель -> конкретное решение -> конкретный результат... И если решениеи использовать (или не использовать) какое-то средства положительно сказывается на этой цепочке - решение правильное... И пусть весь мир подождет... beg-in-erАлексей К Неправильное и необдуманное использование goto.... так это чьи проблемы , оператора goto , или хомосапиенса его использующего???+100500 :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 13:22 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Алексей Кbeg-in-erтак это чьи проблемы , оператора goto , или хомосапиенса его использующего???Вроде как все "обдуманные" стратегии использования goto завёрнуты в конструкции структурного программирования: if, while, throw, return и т. п. Десяток-другой вложенных друг в друга "завернутых" if/else со сложными условиями в каждом операторе - вынос мозга гарантирован... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 13:36 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
beg-in-erАлексей КВроде как при компиляции производится инлайнинг методов. не знаю что там именно происходит, но я вижу что происходит замедление исполнения команд. Тут и тут . ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 13:37 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
sphinx_mvАлексей Кпропущено... Вроде как все "обдуманные" стратегии использования goto завёрнуты в конструкции структурного программирования: if, while, throw, return и т. п. Десяток-другой вложенных друг в друга "завернутых" if/else со сложными условиями в каждом операторе - вынос мозга гарантирован...Ещё раз - не нужно пихать всё в один метод. Желание сделать goto - одна из причин для выделения метода(ов). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 13:44 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Алексей Кsphinx_mvпропущено... Десяток-другой вложенных друг в друга "завернутых" if/else со сложными условиями в каждом операторе - вынос мозга гарантирован...Ещё раз - не нужно пихать всё в один метод. Желание сделать goto - одна из причин для выделения метода(ов).Ага... А желание выделить класс - причина еще раз хорошо подумать... "Иметь причину" что-либо сделать, совершенно не означает "иметь основание" делать именно это. :) Исхожу из того, что в "homo sapiens" ключевой частью служит все же "разумный"... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 14:02 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
AbstractionSyrexпропущено... Может проще сгенерить все возможные варианты, а после этого случайным образом "выдергивать" их? PS - по крайней мере так генерировали в Русском Лото. Генерилось у них минут 10-15А смысл? Выше приведён алгоритм, который получает комбинацию по числу, где число - от 0 до (количество вариантов-1). То есть, "все возможные варианты" - просто множество чисел. Вопрос в том, как нормально "выдернуть" без повторов, с равномерным распределением. После генерации создать "массив_а" на 500 000 элементов (цифр от 0 до 499 999) и далее по этим номерам вытаскивать строки из массива "всех возможных вариантов", номера которых соответствуют числам из "массив_а" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 14:15 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskiniГоспода, какая разница, зачем и почему, надо быстро сгенерить 500 000 комбинаций из 6 чисел каждая, причем чтобы соблюдалась уникальность вне зависимости от порядка чисел внутри одной комбинации. Как это какая разница? Хотелось бы знать что бы прикинуть стоимость этой затеи. Если ЭТО немецкое LOTTO 6 из 49, на что это очень похоже, то тогда 500 000 комбинаций это будет 41667 билетов по 12 полей в каждом и ценой в 9,25 Евро, ИТОГО = 385419,75 € Ну а дальше не сложно посмотреть какие у вас шансы выиграть и сколько вы можете выиграть. Хотите умереть молодым и красивым - найдите какого-нить бандита уважаемого человека который даст вам денег на эту затею. Вот затем и хотелось бы знать. Давайте колитесь уже. А то может и правда надо уже бежать покупать 41667 билетов что бы разбогатеть, а мужики то не знают. ;) Я жду. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 17:05 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Сделал генерацию комбинаций из 6 цифр от 1 до 30, расположение цифр в комбинации не имеет значения, т.е. 1 2 3 4 5 6 = 2 1 3 5 6 5, но почему-то при 475020 идет резкое падение скорости, падение практически до нуля, не могу понять в чем причина, комбинаций по комбинаторике должно получаться чуть больше 593 000, где косяк? Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 18:37 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Забыл написать что Hashes - это HashSet<string> ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 18:55 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Все нашел косяк, Random.Next(1,30) - максимальное число которое он возвращает = 29 , чтобы было 30 надо указывать 31 - в документации написано что это верхний исключенный предел Е мае :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 18:58 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
izoldov-roskini, о, я что то узнаю но вот этот фрагмент в предложенном варианте безсмысленен Код: c# 1. 2.
нулей то нет в последовательности )) и отсутствует проверка на повторения. ну это дело ваше. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 19:39 |
|
Перебор 500 000 строк
|
|||
---|---|---|---|
#18+
Тему не осилил. так как взорвался мозг. но если я правильно понимаю то задача получить комбинацию k - чисел в диапазоне от 1 до n без учета порядка. - это сочетания. . теперь нам остается посчитать кол-во. потом в диапазоне 1..cnt генерить номер. (тут его можно проверять на уникальность, или алгоритм чтобы сразу не давал повторений). далее по номеру строить сочетание. и все. чего там 4 страницы обсуждать, или я не прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 22:53 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1405371]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
156ms |
get tp. blocked users: |
2ms |
others: | 325ms |
total: | 581ms |
0 / 0 |