Cupon Пользователь Сообщений: 23 |
Помогите. Есть формулы, расчет комбинаций. Их слишком много. Необходимо заполнить таблицу например на миллион строк, затем продолжить расчет на новом листе с последний строки предыдущей таблицы. Если такое конечно возможно. Для примера кидаю файл. Изменено: Cupon — 04.09.2019 14:49:10 |
Dima S Пользователь Сообщений: 2063 |
а смысл? |
Cupon Пользователь Сообщений: 23 |
извините, делитант полный. что значит в массиве ? Изменено: Cupon — 04.09.2019 15:05:45 |
Cupon Пользователь Сообщений: 23 |
Может кто нибудь помочь ? Или подскажите, куда можно обратиться. Может это все-таки не в excel делать. Буду благодарен за любую подсказку |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#5 05.09.2019 09:48:25
не совсем понятно, что именно вы хотите. Плодить миллионы данных нет никакого толку, т.к. вам же нужен анализ и результат. Так вот анализ нужно проводить в коде и полученный результат уже выводить на лист или в сообщении для пользователя Изменено: Jack Famous — 05.09.2019 09:51:05 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Cupon Пользователь Сообщений: 23 |
#6 05.09.2019 10:10:17 Jack Famous
мне как раз из полученных данных необходимо сделать выборку (привожу пример в новом файле). Мне нужна конечная цифра
можно подробнее, или хотя бы пример такого кода Прикрепленные файлы
Изменено: Cupon — 05.09.2019 10:14:09 |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#7 05.09.2019 10:33:44
вы добавили 2 столбца. Что за конечная цифра (строго говоря, число тогда уж)? Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Cupon Пользователь Сообщений: 23 |
да, верно — число |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Cupon, вы не поняли — вы добавили 2 столбца, то есть 2*кол-во строк чисел. Вам их сумма нужна, среднее, минимум/максимум? Что в итоге-то нужно? Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Cupon Пользователь Сообщений: 23 |
Идут 6 столбцов с числами. в 7 столбце высчитывается число из предыдущих шести. Именно оно мне нужно Изменено: Cupon — 05.09.2019 10:51:07 |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Cupon, ещё раз: 7ой столбец это МИЛЛИОНЫ итоговых чисел (по количеству строк). Я понял, что вам нужно это число (+ округление), но их по-прежнему очень много и я пытаюсь выяснить, что вы с ними будете делать. Суммировать, сортировать… Неужели вы просто потом весь этот массив куда-то копируете? Изменено: Jack Famous — 05.09.2019 10:55:08 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Cupon Пользователь Сообщений: 23 |
аа) дальше что Изменено: Cupon — 05.09.2019 10:57:57 |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Cupon, ну наконец-то)) тут пришёл главный по комбинаторике
не подскажу, потому что не вдупляю ваш алгоритм Название темы: «Комбинаторика. Перебор всех сочетаний с выводом списка повторений» Изменено: Jack Famous — 05.09.2019 11:10:17 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Cupon Пользователь Сообщений: 23 |
Jack Famous
спасибо большое. буду ждать) |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#15 05.09.2019 11:11:30
поторопился я с обещаниями — прощу прощения…
это для модераторов — они меняют Изменено: Jack Famous — 05.09.2019 11:11:39 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||||
Cupon Пользователь Сообщений: 23 |
алгоритм там прост: количество сочетаний шести чисел без повтора из определенного числа |
MCH Пользователь Сообщений: 3875 |
#17 05.09.2019 11:23:40
Вам же не нужны все 13 миллионов чисел в итоге, скорее всего нужно найти оптимальное (максимальное или минимальное) перебирая все возможные сочетания чисел. http://www.excelworld.ru/forum/3-36449-1 Не все задачи можно решать простым перебором, количество комбинаций может быть очень большим, и не хватит времени найти решение перебором |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#18 05.09.2019 11:25:01
ОК — скачайте файл отсюда и скажите, какой вариант ваш Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
MCH Пользователь Сообщений: 3875 |
#19 05.09.2019 11:26:54
Пока писал предыдущее сообщение, уже появилась конкретная задача, что нужно |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Cupon, взял Combin за основу. Смотрите: для 6 понятно — сумму первых 3х делим на сумму остальных 3х и округляем до двух знаков. А если k<>6? Изменено: Jack Famous — 05.09.2019 11:56:51 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
MCH Пользователь Сообщений: 3875 |
|
Cupon Пользователь Сообщений: 23 |
#22 05.09.2019 13:40:14
запутался ) у меня сочетание без повторений
вот тут я еще не продвинулся дальше. Я думаю методом подбора функций надо выйти на оптимальное решение. Пытался с пятью числами, но пока ерунда выходит
спасибо вам огромное. Я вторую неделю тут мучаюсь) но это естественно все от незнания. А можно сам алгоритм. В будущем хочу еще 5 из 50 Изменено: Cupon — 05.09.2019 13:40:58 |
||||||||
MCH Пользователь Сообщений: 3875 |
#23 05.09.2019 13:48:48
Какую функцию подбираем? какой результат нужен в итоге? для чего все это? |
||
PooHkrd Пользователь Сообщений: 6602 Excel x64 О365 / 2016 / Online / Power BI |
#24 05.09.2019 13:49:22
гм, а для нечетного количества как рассчитывать столбец с отношением суммы первых трех элементов к сумме последних трех? Вот горшок пустой, он предмет простой… |
||
Cupon Пользователь Сообщений: 23 |
#25 05.09.2019 14:01:15 тут уже надо искать другую формулу
да. Анализ всех вариантов и сравнение с уже имеющимися. функция (1+2+3)/(4+5+6) придумана чисто для удобства и более-менее выхода на красивую кривую можно ли увидеть из вашего итога, например какие варианты шести чисел содержит получившееся число 0,38 ? |
||
MCH Пользователь Сообщений: 3875 |
Посмотрите макрос, он небольшой (40 строчек кода), попробуйте разобраться самостоятельно. |
Cupon Пользователь Сообщений: 23 |
#27 05.09.2019 15:04:05 MCH
да, макрос уже посмотрел….буду разбираться MCH написал:
т.е. в этом же макросе внести изменения и выдаст результат ? |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#28 05.09.2019 15:34:33
да — всего пару-тройку строчек добавить, но вы это должны сами сделать, чтобы понять Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Cupon Пользователь Сообщений: 23 |
Изменено: Cupon — 05.09.2019 16:37:08 |
PooHkrd Пользователь Сообщений: 6602 Excel x64 О365 / 2016 / Online / Power BI |
#30 05.09.2019 16:28:42 Во вложении вариант на базе Power Query и Power Pivot.
Загружаем их в модель данных и в модели уже рисуем любую формулу, и её выводим в сводную в качестве агрегатора. Работает медленнее чем на VBA, но вдруг кому потребуется. Прикрепленные файлы
Изменено: PooHkrd — 10.09.2019 12:11:27 Вот горшок пустой, он предмет простой… |
|
Скажем, у меня есть следующие два столбца данных, и теперь я хочу сгенерировать список всех возможных комбинаций на основе двух списков значений, как показано на скриншоте слева. Возможно, вы можете перечислить все комбинации одну за другой, если есть несколько значений, но, если есть несколько столбцов с несколькими значениями, которые необходимо перечислить, возможные комбинации, вот несколько быстрых приемов, которые могут помочь вам справиться с этой проблемой в Excel .
Перечислите или сгенерируйте все возможные комбинации из двух списков с формулой
Перечислите или сгенерируйте все возможные комбинации из трех или более списков с кодом VBA
Составьте список или сгенерируйте все возможные комбинации из нескольких списков с помощью мощной функции
Перечислите или сгенерируйте все возможные комбинации из двух списков с формулой
Следующая длинная формула поможет вам быстро составить список всех возможных комбинаций значений двух списков. Пожалуйста, сделайте следующее:
1. Введите или скопируйте приведенную ниже формулу в пустую ячейку, в этом случае я введу ее в ячейку D2, а затем нажмите Enter ключ для получения результата, см. снимок экрана:
=IF(ROW()-ROW($D$2)+1>COUNTA($A$2:$A$5)*COUNTA($B$2:$B$4),»»,INDEX($A$2:$A$5,INT((ROW()-ROW($D$2))/COUNTA($B$2:$B$4)+1))&»-«&INDEX($B$2:$B$4,MOD(ROW()-ROW($D$2),COUNTA($B$2:$B$4))+1))
Внимание: В приведенной выше формуле $ A $ 2: $ A $ 5 — это диапазон значений первого столбца, а 2 млрд долларов: 4 млрд долларов — это диапазон значений второго списка, в котором вы хотите перечислить все их возможные комбинации, $ D $ 2 это ячейка, в которую вы поместили формулу, вы можете изменить ссылки на ячейки по своему усмотрению.
2. Затем выберите ячейку D2 и перетащите маркер заполнения вниз к ячейкам, пока не получите пустые ячейки, и все возможные комбинации будут перечислены на основе значений двух списков. Смотрите скриншот:
Перечислите или сгенерируйте все возможные комбинации из трех или более списков с кодом VBA
Возможно, вам будет сложно применить приведенную выше формулу, если есть данные из нескольких столбцов, ее будет сложно изменить. Здесь я представлю код VBA, чтобы быстро с этим справиться.
1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA: генерировать все комбинации из 3 или нескольких столбцов
Sub ListAllCombinations()
'Updateby Extendoffice
Dim xDRg1, xDRg2, xDRg3 As Range
Dim xRg As Range
Dim xStr As String
Dim xFN1, xFN2, xFN3 As Integer
Dim xSV1, xSV2, xSV3 As String
Set xDRg1 = Range("A2:A5") 'First column data
Set xDRg2 = Range("B2:B4") 'Second column data
Set xDRg3 = Range("C2:C4") 'Third column data
xStr = "-" 'Separator
Set xRg = Range("E2") 'Output cell
For xFN1 = 1 To xDRg1.Count
xSV1 = xDRg1.Item(xFN1).Text
For xFN2 = 1 To xDRg2.Count
xSV2 = xDRg2.Item(xFN2).Text
For xFN3 = 1 To xDRg3.Count
xSV3 = xDRg3.Item(xFN3).Text
xRg.Value = xSV1 & xStr & xSV2 & xStr & xSV3
Set xRg = xRg.Offset(1, 0)
Next
Next
Next
End Sub
Внимание: В приведенном выше коде A2: A5, B2: B4, C2: C4 диапазон данных, который вы хотите использовать, E2 — это выходная ячейка, в которой вы хотите найти результаты. Если вы хотите получить все комбинации из большего количества столбцов, измените и добавьте другие параметры в код по мере необходимости.
3. Затем нажмите F5 ключ для запуска этого кода, и все комбинации из 3 столбцов будут сгенерированы сразу, см. снимок экрана:
Составьте список или сгенерируйте все возможные комбинации из нескольких списков с помощью мощной функции
Если имеется несколько значений списков, необходимо указать возможные комбинации, возможно, вам будет сложно изменить код. Здесь я могу порекомендовать мощный инструмент — Kutools for Excel, он содержит удобную функцию Список всех комбинаций который может быстро перечислить все возможные комбинации на основе заданных списков данных.
Tips:Чтобы применить это Список всех комбинаций функция, во-первых, вы должны скачать Kutools for Excel, а затем быстро и легко примените эту функцию.
После установки Kutools for Excel, пожалуйста, сделайте так:
1. Нажмите Кутулс > Вставить > Список всех комбинаций, см. снимок экрана:
2. В Список всех комбинаций В диалоговом окне выполните операции, как показано в демонстрации ниже:
3. Затем все указанные значения и разделители были перечислены в диалоговом окне, см. Снимок экрана:
4.А затем нажмите Ok Кнопка, и появится окно подсказки, напоминающее вам о выборе ячейки для вывода результата, см. снимок экрана:
5. Нажмите OK, все возможные комбинации на основе данных списков были сгенерированы на листе, как показано на следующем снимке экрана:
Нажмите, чтобы скачать Kutools for Excel Сейчас !
Больше относительных статей:
- Создать все комбинации из 3 или нескольких столбцов
- Предположим, у меня есть 3 столбца данных, теперь я хочу сгенерировать или перечислить все комбинации данных в этих 3 столбцах, как показано ниже. Есть ли у вас какие-нибудь хорошие методы решения этой задачи в Excel?
- Найдите все комбинации, равные заданной сумме
- Например, у меня есть следующий список чисел, и теперь я хочу знать, какая комбинация чисел в списке дает в сумме 480, на следующем скриншоте вы можете увидеть, что есть пять групп возможных комбинаций, которые в сумме равны до 480, например, 300 + 60 + 120, 300 + 60 + 40 + 80 и т. д. В этой статье я расскажу о некоторых методах определения суммирования ячеек до определенного значения в Excel.
- Сгенерировать или перечислить все возможные перестановки
- Например, у меня есть три символа XYZ, теперь я хочу перечислить все возможные перестановки на основе этих трех символов, чтобы получить шесть разных результатов, например: XYZ, XZY, YXZ, YZX, ZXY и ZYX. Как в Excel быстро сгенерировать или составить список всех перестановок на основе разного количества символов?
- Составьте список всех возможных комбинаций из 4 цифр
- В некоторых случаях нам может потребоваться сгенерировать список всех возможных 4-значных комбинаций чисел от 0 до 9, что означает создание списка 0000, 0001, 0002… 9999. Чтобы быстро решить задачу списка в Excel, я предлагаю вам несколько уловок.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Содержание
- Проход по диапазону ячеек
- Поддержка и обратная связь
- Перестановки без повторений: Комбинаторика в EXCEL
- Задача
- Инверсии перестановок
- Комбинаторика в Excel
- Перестановки без повторений
- Перестановки с повторениями
- Размещение без повторений
- Размещение с повторениями
- Сочетания без повторений
- Сочетания с повторениями
Проход по диапазону ячеек
При использовании Visual Basic часто требуется выполнить один и тот же блок операторов в каждой ячейке диапазона. Для этого необходимо объединить оператор цикла и один или несколько методов для идентификации каждой ячейки по отдельности и выполнить операцию.
Один из способов пройти по диапазону — использовать цикл For. Next со свойством Cells. С помощью свойства Cells можно заменить номера индексов ячеек счетчиком циклов (или другими переменными или выражениями). В следующем примере индекс строки заменяется переменной counter . Процедура проходит по диапазону ячеек C1:C20, присваивая значение 0 (ноль) каждому числу, абсолютное значение которого меньше 0,01.
Еще один простой способ пройти по диапазону — использовать цикл For Each. Next с коллекцией ячеек, указанной в свойстве Range. Visual Basic автоматически присваивает объектную переменную для следующей ячейки при каждом выполнении цикла. Следующая процедура проходит по диапазону ячеек A1:D10, присваивая значение 0 (ноль) каждому числу, абсолютное значение которого меньше 0,01.
Если вы не знаете границы диапазона, по которому нужно пройти, можно использовать свойство CurrentRegion, чтобы возвратить диапазон, окружающий активную ячейку. Например, при запуске на листе следующая процедура выполняет проход по диапазону, окружающему активную ячейку, присваивая значение 0 (ноль) каждому числу, абсолютное значение которого меньше 0,01.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Перестановки без повторений: Комбинаторика в EXCEL
history 2 февраля 2016 г.
Подсчитаем в MS EXCEL количество перестановок из n элементов. С помощью формул выведем на лист все варианты перестановок (английский перевод термина: permutation).
Перестановкой множества из n элементов называется расположение элементов в определенном порядке.
Элементами множества могут быть числа, буквы и вообще любые объекты. Главное, чтобы эти элементы были различными. Т.к. любому объекту можно сопоставить число, то для Перестановок обычно используют конечное множество целых чисел, например, <1; 2; 3; 4; 5>. Хотя множества из букв также можно часто встретить в литературе. Например, все различные Перестановки множества из трех элементов – это abc , acb , bac , bca , cab , cba .
Число Перестановок n элементов равно n! (факториал).
Для вычисления факториала в MS EXCEL есть функция =ФАКТР() , английский вариант FACT(). Понятно, что число перестановок растет очень быстро с ростом n: для n=7 число перестановок равно 5040. Справедливости ради, нужно отметить, что зачастую сами варианты перестановок находить не требуется, главное – найти их количество.
Примечание : Перестановки можно считать частным случаем размещений при n=k (см. статью Размещения без повторений: Комбинаторика в MS EXCEL ). Поэтому для вычисления количества перестановок можно использовать функцию ПЕРЕСТ() . Для n=7 число Перестановок вычисляется по формуле =ПЕРЕСТ(7;7)
Примечание : О Перестановках с повторениями (с возвращением элементов обратно во множество, из которого они берутся, после выборки каждого элемента) можно прочитать в статье Перестановки с повторениями: Комбинаторика в MS EXCEL .
В файле примера создана универсальная формула для вывода всех Перестановок для заданного n. Например, для n=3.
Задача
6 машин разных марок участвуют в гонках на выживание: LADA Granta, Hyundai Solaris, KIA Rio, Renault Duster, Lada Kalina, Volkswagen Polo. Определить число возможных вариантов распределения мест между всеми участниками.
Нам нужно определить число перестановок 6 машин на 6-и местах. Т.е. n=6. Оказывается, что таких перестановок 720: =ПЕРЕСТ(6;6) или 6! =ФАКТР(6)
Воспользуемся файлом примера , чтобы найти все варианты перестановок.
Произвольным образом сопоставим маркам машин числовые значения и сделаем сокращения названий марок: LADA Granta (LG=1), Hyundai Solaris (HS=2), …
Введя в ячейке В5 значение 6, определим все варианты расстановок машин на занятых ими в гонке местах.
Инверсии перестановок
Для каждой перестановки a 1, a 2, a 3. a n из n целых чисел 1, 2, 3, . n , инверсией называется пара ( a i, a j) если для i a j. Число инверсией в перестановке показывает насколько перестановка является «несортированной» по возрастанию.
Например, число инверсий в перестановке 1, 2, 3, 4 равно 0 (перестановка из 4-х целых чисел отсортирована по возрастанию от 1 до 4), а число инверсий в перестановке 4, 3, 1, 2 равно 5, т.к.:
- первый элемент (i=1) равен 4 и он больше 3-х чисел (с j=2, 3, 4), которые расположены правее (4>3, 4>1, 4>2), т.е. мы имеем 3 инверсии;
- второй элемент (i=2) равен 3 и он больше 2-х чисел (с j=3, 4), которые расположены правее (3>1, 3>2), т.е. мы имеем еще 2 инверсии;
- так третий элемент (i=3) равен 1 и он меньше числа с j=4, которое расположено правее (1 файле примера для каждой Перестановки подсчитывается число инверсией.
Инверсии перестановок, например, используются при вычислении определителя матрицы (см. статью Вычисление определителя матрицы в MS EXCEL ).
Источник
Комбинаторика в Excel
Комбинаторика в Excel
Комбинаторика — раздел математики, изучающий дискретные объекты, множества (сочетания, перестановки, размещения элементов) и отношения на них. Термин комбинаторика был введён в математический обиход Лейбницем, который в 1666 году опубликовал свой труд «Рассуждения о комбинаторном искусстве». Excel поддерживает ряд функций комбинаторики. Чтобы разобраться, какую формулу использовать, следует ответить на ряд вопросов:
- Исходное множество содержит только уникальные элементы, или некоторые из них могут повторяться?
- Операция выполняется со всеми элементами множества, или только с некоторой выборкой из них?
- Важен ли порядок элементов в выборке?
- После выбора элемента мы его возвращаем назад?
Рис. 1. Дерево решений, какую формулу комбинаторики использовать
Скачать заметку в формате Word или pdf, примеры в формате Excel
Перестановки без повторений
Возьмем несколько различных элементов (предметов) и будем переставлять их всевозможными способами, оставляя неизменным их число и меняя только их порядок (рис. 2). Каждая из получившихся таким образом комбинаций носит название перестановки. Перестановкой из n элементов называется упорядоченное множество, составленное из всех элементов множества.
Рис. 2. Перестановки (картинка взята здесь)
Если все n элементы разные, то число перестановок обозначается Pn от perturbation.
С другой стороны, произведение n первых натуральных чисел называется n-факториал и обозначается n!
По определению: 1! = 1; 0! = 1.
Функция в Excel =ФАКТР(n). Факториал растет очень быстро. Существенно быстрее экспоненты (рис. 3).
Рис. 3. Расчет числа перестановок без повторений с помощью факториала
Перестановки с повторениями
Если в основном n множестве не все элементы разные, то число перестановок будет меньше n! Например, если наше множество состоит из трех яблок и одной груши, то всего возможно 4 перестановки (рис. 4). Груша может быть первой, второй, третьей или четвертой, а яблоки неразличимы).
Рис. 4. Перестановки с повторениями (картинка найдена здесь)
В общем случае, можно сказать: последовательность длины n, составленная из k разных символов, первый из которых повторяется n1 раз, второй – n2 раз, третий – n3 раз, …, k-й – nk раз (где n1 + n2 + … + nk = n) называется перестановкой с повторениями из n элементов.
Пример. Сколько различных пятибуквенных слов можно составить из букв слова «манна»?
Решение. Буквы а и н повторяются 2 раза, а буква м один раз.
Размещение без повторений
Размещением из n элементов по m называется упорядоченный набор из m различных элементов, выбранных из n-элементного множества (все элементы множества уникальны; позиции элементов в выборке важны). Число размещений обозначается от arrangement.
Например, два элемента из трех можно выбрать и расположить шестью способами (рис. 4):
Рис. 5. Размещение без повторений (картинка из презентации)
Если m = n количество элементов совпадает с количеством имеющихся мест для размещения. Знаменатель в формуле (4) превращается в 0! = 1. Остается только числитель n! А это – изученная выше перестановка без повторений; см. формулу (1).
Название функции в Excel несколько обескураживает. Но… что поделаешь: =ПЕРЕСТ(n;m)
Рис. 6. Размещение без повторений; обратите внимание на смешанные ссылки, которые позволяют протянуть формулу на всю таблицу
Размещение с повторениями
Размещение с повторениями по смыслу отличается от перестановок с повторением. Перестановки с повторением – это операция над множеством, которое состоит из нескольких видов элементов, так что каждый вид представлен несколькими одинаковыми элементами. Размещение с повторениями – выборки из множества с возвращением выбранного элемента назад перед каждым новым выбором.
Например, если у вас множество, включающее грушу, яблоко и лимон, и вам нужно выбрать два элемента, так что после первого выбора вы возвращаете выбранный предмет назад, то существует девять различных комбинаций (рис. 7).
Рис. 7. Размещение с повторениями
В общем случае размещение с повторениями или выборка с возвращением – это размещение «предметов» в предположении, что каждый «предмет» может участвовать в размещении несколько раз. По правилу умножения количество размещений с повторениями из n по k:
В Excel используется функция ПЕРЕСТА(n;k).
Задача. Сколько различных номеров можно составить в одном коде региона?
Подсказка. В номере используется 12 букв алфавита, также существующих и в латинском алфавите (А, В, Е, К, М, Н, О, Р, С, Т, У, Х).
Решение. Можно воспользоваться формулой для размещения с повторениями:
Каждую цифру можно выбрать 10 способами, а всего цифр 3, при этом они могут повторяться, и их порядок важен. Каждую букву можно выбрать 12 способами, при этом буквы могут повторяться, и их порядок важен.
Сочетания без повторений
Сочетаниями из n множества по m элементов называются комбинации, составленные из данных n элементов по m элементов, которые различаются хотя бы одним элементом (в сочетаниях не учитывается порядок элементов).
Например, два элемента из 4 сочетаются 6 способами (порядок следования не важен):
Сочетания без повторений образуют знаменитый треугольник Паскаля (рис. 10). В этом треугольнике на вершине и по бокам стоят единицы. Каждое число равно сумме двух расположенных над ним чисел. Строки треугольника симметричны относительно вертикальной оси. Числа в строках, составляющие треугольник Паскаля, являются сочетаниями
где n – номер строки, m – номер элемента в строке, начиная с нулевого. Например, в строке 7:
Рис. 10. Треугольник Паскаля; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке
В Excel используется функция =ЧИСЛКОМБ(n;m).
Сочетания с повторениями
Сочетания с повторениями по смыслу похожи на размещение с повторениями – это выборки из множества с возвращением выбранного элемента назад перед каждым новым выбором. При этом порядок в выборке не важен.
Например, два предмета из четырех можно выбрать 10 способами, если после каждого выбора предмет возвращается назад (рис. 11).
В общем случае, число сочетаний с повторениями:
Для нашего примера с фруктами
В Excel для подсчета числа сочетаний с повторениями используется функция =ЧИСЛКОМБА(n;m). В нашем примере =ЧИСЛКОМБА(4;2) = 10.
Источник
Yesterday I received an email, refering to some 2 old articles in VitoshAcademy for nested loops without recursion:
- VBA – Nested loops with recursion (Permutations)
- VBA – Avoid nested loops with recursion (Part 2)
As far as the person from the email was taking a look at the code and was struggling, wanting to perform the combinations of the set [1,2,3,4,5,6] with 4 samples, I thought it would be interesting, if I give it a try, rewriting the old code I was using almost 5 years ago.
It was fun to see how I was thinking about programming back then and that I actually have changed slightly after. Anyway, while rewriting the code I noticed, that there are 2 main differences between permutations and combinations:
- In combinations there are no values repeated;
- In combinations every value is bigger than the previous one;
The latter is actually not true in general, but if we follow this rule, we are forced to skip adding “1243” after having already written “1234”. So, it is a kind of logic I decided to use, as far as sorting and implementing to a set was requiring more words to explain.
Long story short, implementing the old code I wrote 5 years ago, I have added 2 new conditions:
If Not AnyValueBiggerThanNext(arr) And Not AnyValueIsRepeated(arr) Then PrintArrayOnSingleLine arr |
And it actually brought me to the desired result:
And this is the code, which probably looks better than the one I have written in 2015:
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
Sub Main() Dim size As Long: size = 4 Dim initialArray As Variant: initialArray = Array(1, 2, 3, 4, 5, 6) Dim arr As Variant: ReDim arr(size — 1) Dim n As Long: n = UBound(arr) + 1 EmbeddedLoops 0, size, initialArray, n, arr End Sub Function EmbeddedLoops(index As Long, size As Long, initialArray As Variant, n As Long, arr As Variant) Dim p As Variant If index >= size Then If Not AnyValueBiggerThanNext(arr) And Not AnyValueIsRepeated(arr) Then PrintArrayOnSingleLine arr End If Else For Each p In initialArray arr(index) = p EmbeddedLoops index + 1, size, initialArray, n, arr Next p End If End Function Public Function AnyValueBiggerThanNext(arr As Variant) As Boolean Dim i As Long For i = LBound(arr) To UBound(arr) — 1 If arr(i) > arr(i + 1) Then AnyValueBiggerThanNext = True Exit Function End If Next i AnyValueBiggerThanNext = False End Function Public Function AnyValueIsRepeated(arr As Variant) As Boolean On Error GoTo AnyValueIsRepeated_Error: Dim element As Variant Dim testCollection As New Collection For Each element In arr testCollection.Add «item», CStr(element) Next element AnyValueIsRepeated = False On Error GoTo 0 Exit Function AnyValueIsRepeated_Error: AnyValueIsRepeated = True End Function Public Sub PrintArrayOnSingleLine(myArray As Variant) Dim i As Long Dim textArray As String For i = LBound(myArray) To UBound(myArray) textArray = textArray & myArray(i) Next i Debug.Print textArray End Sub |
Actually, there are plenty of faster ways to make it happen, but my idea was to rewrite the old code with some new conditions. A quick good look for the faster ways – https://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n
A picture from Rila mountain, Bulgaria. Taken by me.
Hope you are enjoying it. 🙂
Комбинаторика: Генерирование перестановок: Алгоритм Нарайаны |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |