вобщем-то метод самый примитивный и доступный:
задать двумерный массив целых чисел размера Н на 2^(H-1), забить первые три ячейки массива начальными данными и дальше циклом заполнить все оставшиеся. И дальше уже работать с этими числами.
Алгоритм: получение начальных условий - создание массива - заполнение массива - выборка/сравнение с заданным параметром К с подсчётом количества повторений числа ЧШ = К - вывод результатов.
первая трудность подстерегает нас при выборе типа данных. Длинные или целочисленные? мой выбор упал на самый нерациональный вариант: Variant c последующим преобразованием с помощью функции Cdec() в Decimal. самый большой диапазон целочисленных значений в этой среде, порядка 10 в 30 степени.
вторая трудность: динамический массив. первый раз сталкивался с подобным определением и ради пользы дела поэкспериментировал с таким массивом в отдельной программке. суть в том, что изначально создаётся оболочка массива и только потом (по мере надобности) указывается его размер, тем самым определяется количество необходимой оперативной памяти. Делается достаточно просто:
Dim Array1() as variant
...'тело программы
Redim Array1(n,2^n)
Тип Вариантный понадобится немного позже, пояснение к нему тоже позже.
третяя трудность: каждые две следующие ячейки массива зависят от одной и той же ячейки предыдущего эксперимента:
n || 1 || || 2 || ......... || n ||
z || 1,2 || || 1,2,3,4 || ..........|| 1,2,..2^n ||
Примерный вид модели из Н экспериментов. Очевидно, что читатель уже заметил ещё один весомый недостаток метода матрицы. Она заполняется треугольником, что значит что она будет нести полезную информацию лишь на 50%, остальные ячейки просто съедят память компьютера и соответственно увеличат количество бесполезных операций. Подобная модель на моей машине позволяет просчитать исходы до 17 эксперимента. Хватит для наглядности.
Так вот вернёмся к трудности. Как выразить эту зависимость. Спасибо Устюгову В.А. хорошему знакомому и отличному преподавателю, именно он подсказал мне две гениальные формулы человечества:
n => 2(n-1)+1
n => 2(n-1)+2
если словами: Н-ой ячейки предыдущего эксперимента соответствуют ячейки следующего эксперимента под номерами 2(Н-1)+1 и 2(Н-1)+2. Тупо конечно, что сам не догадался, плохо пытался наверно )
что ж, а дальше больше..
задать двумерный массив целых чисел размера Н на 2^(H-1), забить первые три ячейки массива начальными данными и дальше циклом заполнить все оставшиеся. И дальше уже работать с этими числами.
Алгоритм: получение начальных условий - создание массива - заполнение массива - выборка/сравнение с заданным параметром К с подсчётом количества повторений числа ЧШ = К - вывод результатов.
первая трудность подстерегает нас при выборе типа данных. Длинные или целочисленные? мой выбор упал на самый нерациональный вариант: Variant c последующим преобразованием с помощью функции Cdec() в Decimal. самый большой диапазон целочисленных значений в этой среде, порядка 10 в 30 степени.
вторая трудность: динамический массив. первый раз сталкивался с подобным определением и ради пользы дела поэкспериментировал с таким массивом в отдельной программке. суть в том, что изначально создаётся оболочка массива и только потом (по мере надобности) указывается его размер, тем самым определяется количество необходимой оперативной памяти. Делается достаточно просто:
Dim Array1() as variant
...'тело программы
Redim Array1(n,2^n)
Тип Вариантный понадобится немного позже, пояснение к нему тоже позже.
третяя трудность: каждые две следующие ячейки массива зависят от одной и той же ячейки предыдущего эксперимента:
n || 1 || || 2 || ......... || n ||
z || 1,2 || || 1,2,3,4 || ..........|| 1,2,..2^n ||
Примерный вид модели из Н экспериментов. Очевидно, что читатель уже заметил ещё один весомый недостаток метода матрицы. Она заполняется треугольником, что значит что она будет нести полезную информацию лишь на 50%, остальные ячейки просто съедят память компьютера и соответственно увеличат количество бесполезных операций. Подобная модель на моей машине позволяет просчитать исходы до 17 эксперимента. Хватит для наглядности.
Так вот вернёмся к трудности. Как выразить эту зависимость. Спасибо Устюгову В.А. хорошему знакомому и отличному преподавателю, именно он подсказал мне две гениальные формулы человечества:
n => 2(n-1)+1
n => 2(n-1)+2
если словами: Н-ой ячейки предыдущего эксперимента соответствуют ячейки следующего эксперимента под номерами 2(Н-1)+1 и 2(Н-1)+2. Тупо конечно, что сам не догадался, плохо пытался наверно )
что ж, а дальше больше..