Mar 05

Uzun bir aradan sonra Hüseyin hocamın sayfasına yeni bir yazı yazmanın zamanı gelmişti. Bu yazımda zamanında benim çok işime yarayan ve yazıp optimize etmesi benim hayli zamanımı alan bir fonksiyonun kodunu paylaşacağım. Kod C++ kullanılarak yazılmış ama algoritmasına bakılarak kolayca diğer dillerede çevrilebilir. Fonksiyonun görevi verilen bir indekse göre N tane sayının K uzunluğundaki kombinasyonları sıralı bir şekilde yazıldığında o indekse karşılık gelen sayı kombinasyonunu bulmak. Bir örnek verecek olursak;

Sayılarımız 0 dan 4 e kadar olan sayılar olsun. Üretmek istediğimiz kombinasyonların uzunluğu ise 3 olsun. O halde toplamda 10 tane (C(5,3)=10) kombinasyonumuz oluyor. Bu kombinasyonlar sıralı bir şekilde üretilmek istenirse;

0 1 2
0 1 3
0 1 4
0 2 3
0 2 4
0 3 4
1 2 3
1 2 4
1 3 4
2 3 4

şeklinde bir sıra oluşuyor. Bu fonksiyonun görevi ise verilen indekse göre bu sıradaki sadece o indekse denk gelen kombinasyonu üretmek oluyor.

Bu kombinasyonların hepsini sıralı bir şekilde üretmenize yardımcı olacak kütüphaneler çoğu dillerde mevcut fakat belirli bir indekse göre kombinasyon üreten bir fonksiyon bulmak o kadar kolay olmuyor. Benim aşağıda linkte paylaştığım kod üzerinde bir çok kez iyileştirme yapılarak bu en son halini almıştır. Kullanmak veya kodu daha da geliştirmek isteyen herkese açıktır.

Kodun bulunduğu link:
İndeks bazlı kombinasyon üretmek

Teşekkürler,
Hanefi Mercan

Yorum Yaz