Топ питань
Часова шкала
Чат
Перспективи
Розміщення (комбінаторика)
З Вікіпедії, вільної енциклопедії
Remove ads
В комбінаториці, розміщенням із n елементів по m, або впорядкованою (n, m) вибіркою із множини M (потужність n, m≤n) називають довільний кортеж що складається із m попарно відмінних елементів. Розміщення можна розглядати як різнозначну функцію f: , для якої .

Кількість розміщень із n по m позначається як або і обчислюється за такою формулою:
Remove ads
Розміщення з повтореннями
Узагальнити
Перспектива
Розміщенням з повтореннями із n елементів по m або впорядкованою (n, m) вибіркою з поверненнями називається довільний кортеж елементів множини M, для якого |M| = n.
Кількість можливих розміщень з повтореннями із n елементів по m дорівнює n піднесене до степеня m:
Наприклад, із цифр 1, 2, 3, 4 можна скласти трьохзначних числа.
Remove ads
Приклад алгоритму отримання розміщень з повторюваннями на С
#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[])
{
	const int len = 4;		// довжина розміщення
	char elements[] = {'0', '1'};	// елементи в розміщенні
	int els = (int)(sizeof(elements) / sizeof(char));
	// кількість розміщень
	int permutations = (unsigned int) pow((double)els, len);
	char **table = new char *[permutations];
	for(int i = 0; i < permutations; ++i)
		table[i] = new char[4];
	for (int i = 0; i < len; i++) {
		int t = (int) pow((double)els, i);
		for (int position_i = 0; position_i < permutations;)
			for (int el_num = 0; el_num < els; el_num++)
				for (int repeats = 0; repeats < t; repeats++) {
					table[position_i][i] = elements[el_num];
					position_i++;
				}
	}
	// виведення результату у консоль
	for (int i = 0; i < permutations; i++) {
		printf("%3d - ", i + 1);
		for (int j = 0; j < len; j++)
			printf("%c ", table[i][j]);
		printf("\n");
	}
	return 0;
}
Remove ads
Приклад алгоритму отримання розміщень з повторюваннями на С#
 /// <summary>
        /// 
        /// </summary>
        /// <param name="length">Довжина розміщення</param>
        /// <param name="alphabet">Абетка</param>
        /// <returns></returns>
        public IEnumerable<string> Bruteforce(int length, string alphabet)
        {
            if (length > 0 && alphabet != null)
            {
                int[] indexes = new int[length];
                int index = 0;
                int iteration = 0;
                // кількість розміщень
                var permutations = Math.Pow(alphabet.Length, length);
                while (iteration < permutations)
                {
                   var target = alphabet[index].ToString();
                    // перераховуються перестановки
                    for (int i = 1; i < length; i++)
                    {
                        if (indexes[i - 1] >= alphabet.Length)
                        {
                            indexes[i]++;
                            indexes[i - 1] = 0;
                        }
                        target += alphabet[indexes[i] < alphabet.Length ? indexes[i] : 0];
                    }
                    indexes[0] = ++index;
                    if (index >= alphabet.Length) index = 0;
                    // додається результат до колекції
                    yield return target;
                    iteration++;
                }
            }
        }
Див. також
Джерела
- В.А. Вишенський, М.О. Перестюк. Комбінаторика: перші кроки. — Кам'янець-Подільський : Аксіома, 2010. — 324 с. — ISBN 978-966-496-136-0.(укр.)
 - Шефтель З. Г. Теорія ймовірностей. — 2-е. — Київ : Вища школа, 1994. — 192 с.(укр.)
 - Ядренко М. В. Дискретна математика. — Київ : ТВіМС, 2004. — 245 с.(укр.)
 
| Це незавершена стаття з математики. Ви можете допомогти проєкту, виправивши або дописавши її.  | 
Remove ads
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads
