Не могу проинициализировать массив (задача на комбинаторику) - страница 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 Гб памяти.
Я абсолютно уверен, что для реализации вашей задачи, не нужен такой массив. Создание такого массива это алгоритмическая ошибка. Но Вы упорно не хотите говорить, зачем этот массив нужен. Какая его функция?