Permutasyon ve Kombinasyon
Husamettin Elalmis
Last updated
Husamettin Elalmis
Last updated
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
husamettin.elalmis@arksoft.com.tr