|
Нахождение всех вариантов комбинаций значений ячеек, совпадающих по значению с задаными
|
|||
---|---|---|---|
#18+
Есть таблица с данными 40х20: 40 строк в 20 столбцах (столбцы А-Т). B каждой из строк разные числа от 1 до 70. В столбцax АI1-AI10 вводятся разные 10 чисел (1-70). Надо как-то найти те комбинации таких чисел, количество совпадений которых с 20 числами из каждой из 40-ka строк (A1-T1; a2-T2...A40-T40) будет больше 4, либо не будет ни одного совпадения. Для этого параллельно таблице А1-Т40 создана связанная с ней таблица 40x20 (V1-AE40) с формулами "=СЧЁТЕСЛИ($A1:$T1;$AI$1)"..."=СЧЁТЕСЛИ($A40:$T40;$AI$10)": проверяет совпадает ли каждое число из ячеек AI1-AI10, куда мы вводим пробные комбинации 10 чисел (1-70). Далее в столбце AF (AF1-AF40) считаем сумму совпадений чисел из каждой из строк с введенными нами в AI1-AI10 десятью числами "=СУММ(V1:AE1)". В соседнем столбце (AG1-AG40) проверяем удовлетворяет ли выбранная комбинация заданным условиям (больше 4 совпадений заданых чисел с числами из исходной таблицы A1-T40, либо ни одного совпадения): =ЕСЛИ(ИЛИ(AF1>4;AF1=0);1;0). И считаем сумму таких совпадений (из 40 строк с данными) в ячейке АН1: =СУММ(AG1:AG40). Как с помощью Excel сделать "обратное": выявить все комбинации десяти чисел, которые мы ввели бы в ячейки AI1-AI10, удовлевтворяющие заданым условиям (больше 4 совпадений заданых чисел с числами из исходной таблицы A1-T40, либо ни одного совпадения) введенное в ячейку АН1 число раз. Т.е. задали в АН1 допустим "8" - и получаем 10 чисел (1-70), в которых ровно 8 раз из 40 совпало выполнение условия (либо 5 и более чисел совпало с 5 или более числами из 40 строк таблицы А1-Т40, либо ни одного совпадения)? (Подозреваю, что нужен либо макрос, либо что-то из анализа "что если", но не могу найти, как конкретно это реализовать...) Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2015, 01:58 |
|
Нахождение всех вариантов комбинаций значений ячеек, совпадающих по значению с задаными
|
|||
---|---|---|---|
#18+
Поправка: "T.е. задали в АН1 допустим "8" - и получаем все варианты десяти чисел (1-70), в которых ровно 8 раз из 40 совпало выполнение условия (либо 5 и более чисел совпало с 5 или более числами из 40 строк таблицы А1-Т40, либо ни одного совпадения." ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2015, 02:02 |
|
Нахождение всех вариантов комбинаций значений ячеек, совпадающих по значению с задаными
|
|||
---|---|---|---|
#18+
Excel-Starter, Будь добр, пожалуйста уточни вопрос поэтапно, а то смутно очень. Как понял я. 1)Вот есть матрица 40х20, где стоят числа из множества 1...70. Это только целые числа? 2) Пишем вектор 10 чисел, выбирая их из матрицы, а точнее из подмножества уникальных чисел (вдруг в ней только "1" записаны много раз). Таких векторов я могу составить дофига, но максимум "Цэ из 40 по 10". Так? 3) Из всех сочетаний оставляем только "правильные совпадения". Что это такое, "правильные совпадения"? Пока понятно, что их можно разделить на 2 группы: "нет совпадений" и "есть N совпадений". Это стоит уточнить. И потом, 5 или 4 раза? По реализации. 4) В каком виде требуется "выявить все комбинации десяти чисел" ? Ну и да, лучше макросом, анализом вряд ли, там ведь эксэл перебирает значения., как он тебе будет только целые перебирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2015, 16:58 |
|
Нахождение всех вариантов комбинаций значений ячеек, совпадающих по значению с задаными
|
|||
---|---|---|---|
#18+
exp98, Спасибо за ответ! exp981)Вот есть матрица 40х20, где стоят числа из множества 1...70. Это только целые числа? Да, числа только целые. В каждой строке 20 целых чисел из диапазона 1-70, все 20 чисел в каждой строке не повторяются. В перспективе матрица будет расти вниз, т.е. будут добавлятся строки с новыми значениями 2) Пишем вектор 10 чисел, выбирая их из матрицы, а точнее из подмножества уникальных чисел (вдруг в ней только "1" записаны много раз). Таких векторов я могу составить дофига, но максимум "Цэ из 40 по 10". Так? Проверяем комбинации из любых десяти целых неповторяющихся в каждой десятке чисел. Каждое из десяти чисел может быть 1,2,3,...69,70 3) Из всех сочетаний оставляем только "правильные совпадения". Что это такое, "правильные совпадения"? Пока понятно, что их можно разделить на 2 группы: "нет совпадений" и "есть N совпадений". Это стоит уточнить. И потом, 5 или 4 раза? Совпадения все "равны": не важно в найденных 10 числах нет ни одного попадания в 20 чисел одной строки матрицы, или 5 и более совпаденений. Т.е. если унас задано найти все комбинации с "2" попаданиями, то выходят все комбинации, у которых совпало допустим 2 из 10 с 2 из 20 одной строки матрицы и допустим 5 из 10 с 5 из 20 в другой строке матрицы ИЛИ 5 из 20 одной строки матрицы и ни одного совпадения в другой строке матрицы. (итого и там, и там 2 попадания одной комбинации из 10, как мы и задавали) По реализации. 4) В каком виде требуется "выявить все комбинации десяти чисел" ? В идеале - список из всех подходящих вариантов под заданные условия, т.е. например таблица шириной 10 ячеек на столько строк, сколько нашлось комбинаций. Eсли так будет проще: просто нахождение тех комбинаций (или одной комбинации), где количество попаданий самое большое (тогда не нужно отдельно забивать нужное число, под которое мы ищем комбинации - просто находим ту комбинацию/комбинации, которая дает максимальное число попаданий). (одно попадание= одна комбинация из 10 чисел, у которой совпадение с одной строкой матрицы из 20 ячеек: либо 5 значений из 20 ячеек совпало с 10 найдеными значениями либо 6 значений из 20 ячеек совпало с 10 найдеными значениями либо 7 значений из 20 ячеек совпало с 10 найдеными значениями либо 8 значений из 20 ячеек совпало с 10 найдеными значениями либо 9 значений из 20 ячеек совпало с 10 найдеными значениями либо 10 значений из 20 ячеек совпало с 10 найдеными значениями либо 0 значений из 20 ячеек совпало с 10 найдеными значениями) (Как вариант, я думал методом подбора до первого совпадения вручную искать с помощью перебора "Поиска значений" (подраздел анализа "Что если"), и далее в ручную до следующего попадания, но не получилось настроить подбор...) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2015, 17:56 |
|
Нахождение всех вариантов комбинаций значений ячеек, совпадающих по значению с задаными
|
|||
---|---|---|---|
#18+
Нее, пытаюсь уточнить дальше, могу и наврать. Возможно, что проверять условия можно и формулами, даже так легче, но формировать список придётся макросом. п 2) можно так. Т.к. матрица фиксирована, в неё все числа известны заранее, а в каждой строке ещё и различные. Пусть мы задали параметр 5. 2.1. Для k-й строки матрицы обозначим мн-во уникальных чисел в ней через "Аk" остальные из 70-ти обозначим ~Ak. Генерим 10-вектор. 2.1.1. Нам нужно сгенерить все "размещения без повторений" по 5 чисел из Аk 2.1.2 Дополнительно сгенерить все "размещения без повторений" по (10-5) чисел из ~Аk 2.1.3. Стыкуем их и получаем 10-векторы, каждый из которых СОДЕРЖИТ требуемое кол-во совпадений. 2.1.4. Дополняем список "размещениями без повторений" по 10 чисел из ~Аk Придётся весь список запомнить (где-то), т.к. он будет разный для каждой строки матрицы. 2,1,5, Крутим цикл по всем строкам матрицы. По п.4. Каждый k-й список, сформированный в п.2, можно запоминать сразу в формате, похожем на сводную таблицу, например на новом листе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
А удобнее в формате простой таблицы, но она будет длиннее ------------------------------------------------------------------------------- строка_матрицы кол-во_совпадений ЗНАЧЕНИЕ NN ------------------------------------------------------------------------------- Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
По-моему почти готовый алгоритм, надо только подсчитать чем равно "размещения без повторений" и нарыть алгоритм его генерации. Там дофига вариантов, а я сперва ошибся, не "ЦЭ". Как-то так, и не надо пугаться макросов, это ведь барсик, интерпретатор)), сперва в массив пишешь, потом подскажут, как в ячейки писать. Где я ошибся, пусть меня поправят. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2015, 19:05 |
|
Нахождение всех вариантов комбинаций значений ячеек, совпадающих по значению с задаными
|
|||
---|---|---|---|
#18+
exp98, А может можно сделать иначе: у нас есть 10 ячеек AI1-AI10. При замене их значений меняется и значение привязаной к ним ячейки AH1, выдающей готовый результат для конкретного варианта комбинации 10 чисел (сколько совпадений-попаданий при заданой комбинации 10 чисел). Может можно встроить "кнопку" с соотв. макросом, который перебирает подряд все варианты разных значений каждой из 10 ячеек AI1-AI10 до тех пор, пока значение ячейки AH1 не совпадет с значением, заданным в другой ячейке, например AH2. Туда мы пишем например "5" и "нажав на кнопку" включается макрос, меняющий значения 10 ячеек до тех пор, пока не совпадут значения ячейки AH2 (в которую мы занесли нужное нам значение) со значением ячейки AH1 (где получаются разные результаты в зависимости от значений 10 ячеек)? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2015, 20:07 |
|
Нахождение всех вариантов комбинаций значений ячеек, совпадающих по значению с задаными
|
|||
---|---|---|---|
#18+
Сорри, особенно не вникал, наверное можно, главное - обеспечить перебор комбинаций, Вам делать, не мне. Можно вообще все комбинации из 10 чисел заранее создать, а потом только вычёркивать лишние ... если бы не 70^10. Я лишь хотел внести поправку, вчера пропустил. 2.1. Для k-й строки матрицы 2.1.0. Цикл, по всем "сочетаниям по 5 из 20" (затем по 6 из 20 и т.д.). В строке матрицы ведь 20 значений, и не обязательно 5/6/7 ... будут самыми первыми или в серединке. Длина этого внутреннего цикла= Цэ 5/20 = 17*18*19*20= 18,5*4=72. Соответственно мой "алгоритм" надо скорректировать. Итого. Имеем 2 процедуры генерации списков: число сочетаний и число размещений. На последнем можно сэкономить, если упорядоченонсть в 10-векторе не важна, тогда это будут сочетания. Помнится размещений 5 из 10 = 6*7*8*9*10 остальных поменьше. На Ваш вопрос о самом большом кол-ве совпадений. По-моему всегда оно=10, или я неправильно понял условия. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2015, 09:19 |
|
Нахождение всех вариантов комбинаций значений ячеек, совпадающих по значению с задаными
|
|||
---|---|---|---|
#18+
фигню спорол 17*18*19*20= 116280 - длина внутреннего цикла, а также 70^10 можно заменить на 70! / 60! = 61*62*... 69*70= 10^10 * 143 956 137,7475021, если калькулятор не ошибся ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2015, 11:34 |
|
|
start [/forum/topic.php?fid=61&msg=39056894&tid=2173344]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 138ms |
0 / 0 |