Dev Arksoft
  • Arksoft Developer Network
  • Ağustos 2023
    • Angularda DOM (Document Object Model) Manipülasyonu
    • Angular’da Routing
    • Representational State Transfer (REST)
    • .Net Framework için Local NugetPackage
    • Agile Nedir?
  • Temmuz 2023
    • Angular HTTP Interceptors
    • Angularda Promise ve Observable
    • Mongo DB Kullanımı
  • Haziran 2023
    • Angular Validators
  • Mayıs 2023
    • Docker Uzerine Redis Kurulumu ve .Net Core ile Redise Erişim
  • Nisan 2023
    • Angular 14 Componentler Arası İletişim
  • Şubat 2023
    • JMeter ile Performans Testi
  • Ocak 2023
    • Windows Giriş Ekranında C# Form Açmak
  • Temmuz 2022
    • Regular Expressions
  • Haziran 2022
    • RSA Şifreleme
    • AutoMapper Kullanımı
    • Permutasyon ve Kombinasyon
    • Generic Repository Pattern
    • Levenshtein Algoritması
    • HTML 5’e Giriş
    • Graph Yapılar
  • Mayıs 2022
    • IQueryable IEnumerable Farklar
    • Sıralama Algoritmaları
  • Şubat 2022
    • ADFS Custom 2FA Integration
    • Reacta Giriş ve Reactın Temel Prensipleri
    • TypeScript Kullanımı
    • Serialization Kullanımı
    • Log4Net Kullanımı
    • Collections Yapıları
    • Windows Service Projesini Debug Etme ve Harici Exe Çalıştırma
    • Culture ve DateTime Kullanımı
    • Reflection Kullanımı
    • Steganografi Teknikleri
    • ElasticSearch Kullanımı
    • SWAGGER ve JWT TOKEN BASED WEBAPI Kullanımı
    • LINQ Komutları Kullanımı
    • Image Processing İşlemleri Kullanımı
Powered by GitBook
On this page
  1. Haziran 2022

Permutasyon ve Kombinasyon

Husamettin Elalmis

PreviousAutoMapper KullanımıNextGeneric Repository Pattern

Last updated 2 years ago

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