Permutasyon ve Kombinasyon

Husamettin Elalmis

Permutasyon ve Kombinasyon

Merhaba arkadaşlar, bu yazıda sizlere Permutasyon ve Kombinasyon kavramından bahsecedeğim.

Permutasyon Nedir?

  • Bir dizideki elemanların, tüm varyasyonları ile birlikte sıralanmış haline permutasyon denir.

  • N elemanlı bir dizinin R elemanlı alt kümelerinin sıralanmış hali permutasyondur.

  • Permutasyonda Sıralama Önemlidir, elemanların hepsi birbirinden farklı şekilde sıralanmaktadır.

  • Permutasyon, P harfi ile gösterilir. Bir dizinin permutasyon olasılıkları aşağıdaki formül ile hesaplanır.

Kombinasyon Nedir?

  • Bir dizideki elemanların, birer kere seçilerek oluşturulan listeye kombinasyon denir.

  • N elemanlı bir dizinin R elemanlı alt kümelerinin oluşturulmuş hali kombinasyondur

  • Kombinasyonda Sıralama Önemsizdir, ilgili elemanların sadece seçilmiş olması yeterlidir.

  • Kombinasyon, C harfi ile gösterilir. Bir dizinin kombinasyon olasılıkları aşağıdaki formül ile hesaplanır.

Permutasyon ile Kombinasyon Arasındaki Farklar

  • Permütasyonda sıralama veya diziliş söz konusudur.

  • Seçilmiş olunan nesnelerin sıralanışı veya dizilişi önemlidir.

  • Kombinasyonda ise, seçim veya seçme söz konusudur. Sıralama ve diziliş yoktur, nesneleri seçmiş olmak yeterlidir.

Örnek Çıktılar

Şifre Güvenliği İle İlgili Bulgular

CombinationHelper.cs

using System;

using System.Collections.Generic;

using System.Linq;

namespace PermutationsArge

{

public class CombinationHelper

{

public static IEnumerable<IEnumerable<T>> GetCombinations<T>(IEnumerable<T> list, int length) where T : IComparable

{

if (length == 1) return list.Select(t => new T[] { t }); return GetCombinations(list, length - 1)

.SelectMany(t => list.Where(o => o.CompareTo(t.Last()) > 0),

(t1, t2) => t1.Concat(new T[] { t2 }));

}

public static IEnumerable<IEnumerable<T>> GetPermutations<T>(IEnumerable<T> list, int length)

{

if (length == 1) return list.Select(t => new T[] { t }); return GetPermutations(list, length - 1)

.SelectMany(t => list.Where(o => !t.Contains(o)),

(t1, t2) => t1.Concat(new T[] { t2 }));

}

}

}

Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

namespace PermutationsArge

{

class Program

{

static void Main(string[] args)

{

Console.BackgroundColor = ConsoleColor.White;

Console.ForegroundColor = ConsoleColor.Black;

Console.Clear();

Test01();

Test02();

Console.WriteLine("ok");

Console.ReadLine();

}

private static void Test01()

{

string str = "ABCDE"; int counter = 0; int r = 4; var n = str.ToCharArray().Select(x => x.ToString()).ToArray();

Console.WriteLine($"== {str} ==");

Console.WriteLine("r: {0}", r);

Console.WriteLine();

Console.WriteLine("===============================");

Console.WriteLine("Permutasyon Listesi");

Console.WriteLine("===============================");

foreach (IEnumerable<string> i in CombinationHelper.GetPermutations(n, r))

{

Console.Write(string.Join("", i) + " ");

counter++;

}

Console.WriteLine($"\nToplam: {counter}");

Console.WriteLine();

}

private static void Test02()

{

string str = "ABCDE"; int counter = 0; int r = 4; var n = str.ToCharArray().Select(x => x.ToString()).ToArray();

Console.WriteLine($"== {str} ==");

Console.WriteLine("r: {0}", r);

Console.WriteLine();

Console.WriteLine("===============================");

Console.WriteLine("Kombinasyon Listesi");

Console.WriteLine("===============================");

foreach (IEnumerable<string> i in CombinationHelper.GetCombinations(n, r))

{

Console.Write(string.Join("", i) + " ");

counter++;

}

Console.WriteLine($"\nToplam: {counter}");

}

}

}

Sonuç

  • Bu dokumanda Permutasyon ve Kombinasyon kavramını uygulamalı görmüş olduk

  • BruteForce ataklarında permutasyon ve kombinasyonlar sıklıkla kullanılmaktadır

Saygılarımla,

Hüsamettin ELALMIŞ – 11.06.2022

[email protected]

Last updated