Не могу проинициализировать массив (задача на комбинаторику) - страница 2

 
Nikolai Semko:

Так в реальности какой размерности Вы будете использовать массив?

Если скажем в Вашем случае массив 2200X 8 X 2, то вероятность, что хотя бы две строки будут одинаковые примерно один шанс на  10 тысяч.

я просто задачи не понимаю. Этот массив необходимо сгенерировать один раз и скорость не имеет значения или скорость важна, т.к. он должен генерироваться постоянно?

Если Вам нужно сгенерировать массив только один раз и скорость не важна, то это элементарно -  проверить на уникальность каждую строку можно простым перебором. Займет пару секунд. 
Но если скорость важна, то придется чуть повозиться.

Но лично мне времени жаль, т.к. я осознаю слишком малую вероятность совпадения хотя бы одного совпадения. Это все равно что в лотерею выиграть.

массив будет размерностью от 4-10 (пусть 4-15)

массив нужен чтобы один раз его сгенерировать и потом считать повторения данной последовательности - массив в структуре, в структуре count

скорость Важна потом, а в памяти будет храниться эталонные строки - сгенерированный массив


Nikolai Semko:

:)))  Если это Вам нужно для индикатора на МТ, то забудьте про эксель. Это для школьных лабораторных работ.

MQL5 Вам дает все необходимое. Для проверки уникальности там всего то нужно 4 строчки кода добавить ( правда время выполнения вырастет на порядки). 
Если же Вы пытаете заниматься распознаванием образов и поисков патернов, то сразу скажу - не с той стороны зашли. 
Впрочем мне пора уходить. Семья зовет ))) Удачи.

тут эксель пока чтобы оценить количество повторений, расчеты в нем не ведутся

да образы, но не паттерны - не важно, если есть повторения значит. можно искать вероятность....

индикатор уже готов, но там "по варварски" все сделал, тупо инициализирую массив при объявлении - копирую из экселя более четверти из 2000 строк - все работает, но увы не по программистки как то - не красиво ((((

 
Igor Makanu:

массив будет размерностью от 4-10 (пусть 4-15)

массив нужен чтобы один раз его сгенерировать и потом считать повторения данной последовательности - массив в структуре, в структуре count

скорость Важна потом, а в памяти будет храниться эталонные строки - сгенерированный массив


тут эксель пока чтобы оценить количество повторений, расчеты в нем не ведутся

да образы, но не паттерны - не важно, если есть повторения значит. можно искать вероятность....

индикатор уже готов, но там "по варварски" все сделал, тупо инициализирую массив при объявлении - копирую из экселя более четверти из 2000 строк - все работает, но увы не по программистки как то - не красиво ((((

Добро пожаловать  в сообщество MQL!! :))
Если Вы уверены в том, что хотите продолжать в том же духе, могу дать лишь пару-тройку советов исходя из собственного опыта:
- подружитесь с документацией (справкой) mql чтобы понимать возможности mql и осознать что ексель здесь совсем не в тему.
- не тратьте время на MQL4, там уже делать нечего. И не слушайте песни и ностальгические завывания консервативного большинства про MQL4.
- не откладывайте в долгий ящик ООП.
 
Nikolai Semko:
Добро пожаловать  в сообщество MQL!! :))
Если Вы уверены в том, что хотите продолжать в том же духе, могу дать лишь пару-тройку советов исходя из собственного опыта:
- подружитесь с документацией (справкой) mql чтобы понимать возможности mql и осознать что ексель здесь совсем не в тему.
- не тратьте время на MQL4, там уже делать нечего. И не слушайте песни и ностальгические завывания консервативного большинства про MQL4.
- не откладывайте в долгий ящик ООП.

да нет у меня проблем с mql и ООП, восстановил понемногу забытые знания, проблема пока с логикой - никак не придумаю как сделать массив похожий на то, что приатачил

ЗЫ: что Вы с этим экселем пристали?  -могу в блокноте смотреть, в Printы не удобно выводить, то Sleep()забудешь поставить - половина Printoв мимо терминала пролетит... для моей протсой задачи совсем не хочется прикручивать к скрипту панели окон, вот и смотрю в экселе ибо вывод в файл прикрутил сразу :)

вот что то похожее на мою задачу, хотя моя задача проще 

http://www.cyberforum.ru/cpp-beginners/thread276590.html

в кодобазе еще вчера видел 

https://www.mql5.com/ru/code/1197

но чет не срослось с этим кодом вчера, наверное сегодня буду смотреть повнимательнее

Дано n различных чисел, напечатать все возможные перестановки этих чисел - С++ для начинающих - Киберфорум
  • отзывов: 43
  • www.cyberforum.ru
Что не кто не знает как это сделать ? Препод просит что бы в задачи был рекурсивный спуск и рекурсивный подъем, а я не представляю как это сделать ( Спасибо тебе большое, за помощь. Очень благодарен за то что откликнулся.Буду пытаться сдать твой код. Препод у меня не толстый тролль, а худенькая девушка )) Ей главное что бы мы научились...
 
Igor Makanu:

да нет у меня проблем с mql и ООП, восстановил понемногу забытые знания, проблема пока с логикой - никак не придумаю как сделать массив похожий на то, что приатачил

ЗЫ: что Вы с этим экселем пристали?  -могу в блокноте смотреть, в Printы не удобно выводить, то Sleep()забудешь поставить - половина Printoв мимо терминала пролетит... для моей протсой задачи совсем не хочется прикручивать к скрипту панели окон, вот и смотрю в экселе ибо вывод в файл прикрутил сразу :)

вот что то похожее на мою задачу, хотя моя задача проще 

http://www.cyberforum.ru/cpp-beginners/thread276590.html

в кодобазе еще вчера видел 

https://www.mql5.com/ru/code/1197

но чет не срослось с этим кодом вчера, наверное сегодня буду смотреть повнимательнее

Вы все же попробуйте исчерпывающе сформулировать задачу, если ищете помощи на стороне.
И будет эффективней, если оперировать трейдерскими понятиями, например такими как в вашем случае вершины зигзага. 
 
Nikolai Semko:
Вы все же попробуйте исчерпывающе сформулировать задачу, если ищете помощи на стороне.

задача:

есть массив трехмерный массив, размерностью [MAXARR] [2] , сколько строк в данном массиве не знаю, предположительно (экспериментально) около 2000 строк (в теории это 8! = 40320)

строки формируются по принципу:

1.первый элемент строки всегда {1,1}

2. следующий столбик в строке будет комбинация цифр, цифры в этом элементе не могут быть больше № столбца и не равных 0 ( именно в столбце ), в столбце должны быть перебраны все комбинации цифр допустимых в этом столбце, цифры в элементе не повторяются. Т.е.

для столбца №2 макс.цифра это  2 и комбинации {1,2}  и {2,1}

для столбца №3 макс. цифра это 3 и комбинации {1,2}  , {1,3}, {2,1}, {2,3} и {3,1}, {3,2}  - подозреваю, что это факториал № столбца ))))

и так формируем все столбцы до MAXARR

строки формируются с повторяющимися первыми столбцами и по мере наполнения последних столбцов - даже не знаю, но по другому не сумею сказать

пример - на стр.№ 1 этого топика

ЗЫ: появились сомнения насколько это задача на комбинаторику - может быть это задача на систему исчисления? т.е. вот "грызу" пример с  MAXARR = 8, это восьмеричная система исчисления исключаем нули и ограничиваем элементы № столбца и в теории получится массив что ищу?

 
Igor Makanu:

задача:

есть массив трехмерный массив, размерностью [MAXARR] [2] , сколько строк в данном массиве не знаю, предположительно (экспериментально) около 2000 строк (в теории это 8! = 40320)

строки формируются по принципу:

1.первый элемент строки всегда {1,1}

2. следующий столбик в строке будет комбинация цифр, цифры в этом элементе не могут быть больше № столбца и не равных 0 ( именно в столбце ), в столбце должны быть перебраны все комбинации цифр допустимых в этом столбце, цифры в элементе не повторяются. Т.е.

для столбца №2 макс.цифра это  2 и комбинации {1,2}  и {2,1}

для столбца №3 макс. цифра это 3 и комбинации {1,2}  , {1,3}, {2,1}, {2,3} и {3,1}, {3,2}  - подозреваю, что это факториал № столбца ))))

и так формируем все столбцы до MAXARR

строки формируются с повторяющимися первыми столбцами и по мере наполнения последних столбцов - даже не знаю, но по другому не сумею сказать

пример - на стр.№ 1 этого топика

ЗЫ: появились сомнения насколько это задача на комбинаторику - может быть это задача на систему исчисления? т.е. вот "грызу" пример с  MAXARR = 8, это восьмеричная система исчисления исключаем нули и ограничиваем элементы № столбца и в теории получится массив что ищу?

теперь задача имеет совершенно другую формулировку от первоначального варианта, но так же совершенно неясная:

- теперь не должно быть нулей - понятно

- Могут ли быть одинаковые значения? Например {2,2} для второго столбца

- Не понятно, массив есть, или его нужно сгенерировать? Если генерировать, то случайным образом, или не имеет значения и можно последовательным перебором?

Давайте все же сформулируйте задачу исходя не из странноватой логики массива, а из конкретной трейдерской задачи. На сколько я понял - на примере вершин зигзага.

У меня такое ощущение, что Вас ошибка в логике еще до этапа формирования этого массива и формирование данного массива вообще не требуется.

 
Nikolai Semko:

теперь задача имеет совершенно другую формулировку от первоначального варианта, но так же совершенно неясная:

- теперь не должно быть нулей - понятно

- Могут ли быть одинаковые значения? Например {2,2} для второго столбца

- Не понятно, массив есть, или его нужно сгенерировать? Если генерировать, то случайным образом, или не имеет значения и можно последовательным перебором?

Давайте все же сформулируйте задачу исходя не из странноватой логики массива, а из конкретной трейдерской задачи. На сколько я понял - на примере вершин зигзага.

У меня такое ощущение, что Вас ошибка в логике еще до этапа формирования этого массива и формирование данного массива вообще не требуется.

трейдерской задачи не получится - статистические исследования, я же писал, в целом все работает, но не нравится мне "уродский вид" инициализации в коде индикатора, вот так:

PatternStruct InitArr[FRCONST]=
  {
     { { {1,1},{2,1},{3,1},{4,1},{5,1},{6,1},{7,1},{8,1} } },
     { { {1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8} } },
     { { {1,1},{1,2},{2,2},{3,2},{4,2},{5,2},{6,2},{7,2} } },
     { { {1,1},{2,1},{2,2},{2,3},{2,4},{2,5},{2,6},{2,7} } },
     { { {1,1},{2,1},{3,1},{3,2},{3,3},{3,4},{3,5},{3,6} } },
     { { {1,1},{1,2},{1,3},{2,3},{3,3},{4,3},{5,3},{6,3} } },
     { { {1,1},{1,2},{1,3},{1,4},{2,4},{3,4},{4,4},{5,4} } },
     { { {1,1},{2,1},{3,1},{4,1},{4,2},{4,3},{4,4},{4,5} } },
     { { {1,1},{1,2},{1,3},{1,4},{1,5},{2,5},{3,5},{4,5} } },
     { { {1,1},{2,1},{3,1},{4,1},{5,1},{5,2},{5,3},{5,4} } },
     { { {1,1},{2,1},{2,2},{3,2},{4,2},{5,2},{6,2},{7,2} } },
     { { {1,1},{2,1},{3,1},{4,1},{5,1},{6,1},{6,2},{6,3} } },
     { { {1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{2,6},{3,6} } },
     { { {1,1},{1,2},{2,2},{3,2},{3,3},{3,4},{3,5},{3,6} } },
     { { {1,1},{2,1},{3,1},{4,1},{5,1},{6,1},{7,1},{7,2} } },
     { { {1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{2,7} } },
     { { {1,1},{1

- да могут быть во втором столбце {2,2} и в третьем максимум {3,3}

- массив нужно сгенерировать в качестве инициализации массива Arr[][MAXARR] [2] 

- логика массива такая как есть, ибо по этой логике ищу повторы мат.модели, раз количсество счетчиков повторов всегда одинаково, и зависит от размерности массива = значит логика одна и та же - т.е. логических ошибок нет

вот приатачил примеры того, что скрипт выдает при разной размерности, нулевые значения не нужны, если и будут, то не критично - все равно потом не попадут в счетчики повторений

Файлы:
inp7yz8_3-8.zip  15 kb
 
Igor Makanu:

трейдерской задачи не получится - статистические исследования, я же писал, в целом все работает, но не нравится мне "уродский вид" инициализации в коде индикатора, вот так:

да могут быть во втором столбце {2,2} и в третьем максимум {3,3}

вот приатачил примеры того, что скрипт выдает при разной размерности, нулевые значения не нужны, если и будут, то не критично - все равно потом не попадут в счетчики повторений

Так можно простым последовательным перебором формировать массив?
 
Nikolai Semko:
Так можно простым последовательным перебором формировать массив?

да, лишь бы было похоже на примеры, я никак не смог решить эту задачу, видимо сам себя запутал (((

 
Igor Makanu:

да, лишь бы было похоже на примеры, я никак не смог решить эту задачу, видимо сам себя запутал (((

Но полный перебор ( при отсутствии нулей) будет равен не 8!=40320,  а 3*8*15*24*35*48*63 = 914 457 600 комбинаций. 
А это, если даже использовать uchar без скобок и запятых, 15 Гб памяти.
Я абсолютно уверен, что для реализации вашей задачи, не нужен такой массив. Создание такого массива это алгоритмическая ошибка. Но Вы упорно не хотите говорить, зачем этот массив нужен. Какая его функция?
Причина обращения: