3. Размещения без повторений
Обратите внимание на другие наши ресурсы: Youtube | Telegram | VK | Rutube | Dzen | Boosty
Определение
Размещение без повторений - это упорядоченное расположение элементов, выбранных из различных элементов, в позициях. Каждый выбранный элемент используется только один раз, и порядок элементов имеет значение.
Формула
Где:
- - количество размещений без повторений из элементов по элементов.
- - факториал числа .
- - факториал числа , равен произведению всех положительных целых чисел от до .
Принцип работы
Пусть у нас есть набор {A, B, C, D}, и мы хотим выбрать и упорядочить 2 элемента из этого набора.
Определение переменных:
- — общее количество элементов, из которых мы выбираем. Здесь: , так как у нас есть 4 элемента: A, B, C, D.
- — количество элементов, которые мы выбираем и упорядочиваем из общего числа . В этом примере: , так как нам нужно выбрать и упорядочить два элемента из четырёx.
Разберем все по шагам:
-
Шаг 1: Подсчёт количества размещений без повторений Число размещений из по без повторений рассчитывается по формуле:
-
Шаг 2: Подстановка значений Подставим значения и в формулу:
-
Шаг 3: Проверка результата (перечисление размещений) Перечислим все возможные варианты выбора и упорядочивания 2 элементов из 4: AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC.
Всего 12 уникальных вариантов, что соответствует расчётам.
Вычислительная сложность
Вычислительная сложность : Поскольку для нужно перемножить только членов из , сложность вычисления также пропорциональна .
Пространственная сложность
Пространственная сложность - , потому что память остается постоянной, так как все вычисления идут с сохранением промежуточного результата.
Применение
Размещения без повторений имеют широкий спектр применений в различных областях:
-
Комбинаторика: Размещения без повторений широко используются в комбинаторике для решения различных задач, таких как перестановки, сочетания и размещения. Например, они могут быть использованы для вычисления количества способов разместить n элементов в определенном порядке.
-
Cтатистика: В статистике размещения без повторений могут быть использованы для моделирования случайных выборок из заданного множества. Это может быть полезно при проведении экспериментов или опросов.
-
Информатика: В информатике размещения без повторений применяются в алгоритмах, связанных с упорядоченными данными. Например, при генерации всех возможных перестановок элементов в массиве.
Готовые функции в Python
В Python, библиотека itertools предоставляет функции для работы Размещениями без повторений, например:
permutations(iterable, r)- функция, которая генерирует все возможные перестановки длиныrиз итерируемого объектаiterable. Она возвращает объект-генератор, который может быть использован для перебора всех перестановок.
Готовые функции в C++
В C++, библиотека <algorithm> предоставляет функции для работы с перестановками без повторений. Некоторые из них:
next_permutation()- функция переставляет элементы в диапазоне так, чтобы они образовывали следующую лексикографическую перестановку. Если такой перестановки больше нет, функция вернетfalse.
Псевдокод
Функция arrangements_without_repetition(elements: список, size: целое) -> целое: Если size > длина(elements), то Вернуть 0 numerator <- Факториал(длина(elements)) denominator <- Факториал(длина(elements) - size) result <- numerator / denominator Вернуть result
Реализация на Python
Аннотация: arrangements_without_repetition - функция для вычисления количества размещений без повторений для заданной последовательности элементов elements - последовательность элементов size - размер размещения numerator - факториал длины последовательности элементов denominator - факториал разности между длиной последовательности элементов и размером размещения result - результат вычисления количества размещений без повторений
import math def arrangements_without_repetition(elements, size): if size > len(elements): return 0 numerator = math.factorial(len(elements)) denominator = math.factorial(len(elements) - size) result = numerator // denominator return result
Олимпиадная реализация на С++
Аннотация: elements - последовательность элементов, представленных в виде вектора символов size - размер размещения num - числитель, представляющий собой факториал длины последовательности элементов denom - знаменатель, представляющий собой факториал разности между длиной последовательности элементов и размером размещения res - результат вычисления количества размещений без повторений
#include <iostream> #include <vector> using namespace std; long long arrangements_without_repetition(vector<char>& elements, int size){ if (size > elements.size()) { return 0; } long long num = 1; for (int i = 1; i <= elements.size(); i++) { num *= i; } long long denom = 1; for (int i = 1; i <= elements.size() - size; i++) { denom *= i; } long long res = num / denom; return res; }
Продуктовая реализация на С++
Аннотация: factorial - функция нахождения факториала числа n - число, факториал которого нужно найти result - результат выполнения факториала permutations_without_repetition - функция перестановок без повторений size - размер последовательности
#include <iostream> #include <vector> using namespace std; long long factorial(int n) { long long res = 1; for (int i = 1; i <= n; i++) { res *= i; } return res; } long long arrangements_without_repetition(vector<char>& elements, int size) { if (size > elements.size()) { return 0; } long long numerator = factorial(elements.size()); long long denominator = factorial(elements.size() - size); long long result = numerator / denominator; return result; }