Kombinasyon algoritması

Başlatan mr.engineer, 15 Nisan 2020, 21:19:30

mr.engineer

Elimdeki n-bitlik binary sayının k tane biti 1 olacak şekilde tüm kombinasyonları bulabilecek bir algoritma arıyorum. İntertte lexicographical order var harfler için yapmışlar büyüklük kıyaslıyorlar. Binary sayılara bunu uygulamanın bir yolu var mı ya da farklı algoritma önerebilecek var mı?

Örnek:
0011
0101
1001
0110
1010
1100

power20

Sadece 1ve0 kullanılacağı ve sıra önemli olduğu için Kombinasyon değil Permütasyondur. Bu bildiğimiz binary sayıcıdır.

Gerekirse sayma esnasında ayıklama yapılır.

Örneğin  1100 ile 0011 aynı anlama geliyorsa bunlardan biri alınır.

mr.engineer

Alıntı yapılan: Kılıç - 15 Nisan 2020, 21:44:16Sadece 1ve0 kullanılacağı ve sıra önemli olduğu için Kombinasyon değil Permütasyondur. Bu bildiğimiz binary sayıcıdır.

Gerekirse sayma esnasında ayıklama yapılır.

Örneğin  1100 ile 0011 aynı anlama geliyorsa bunlardan biri alınır.

40 bitin herhangi 5 bitini set edeceğim. Sadece C(40,5) tane durumu istiyorum. Eğer sayma sırasında ayıklama yaparsam 2^40 a kadar saymam gerekir ve bu da çok uzun bir süre olacak. Daha verimli bir algoritma kullanmam gerekiyor.

sinus

En sağdaki veya soldaki bit sabit "1" tutulur. Diğer bit sırayla en son bit "1" olana kadar devam edilir. Sabit olan bit bir yana kaydırılır, işleme devam edilir. Sabit olan 1'in bulunduğu bitlere tekrar bakılmaz.

3 bit için >>> 011, 101, 110

4 bit için >> 0011, 0101, 1001, 0110, 1010, 1100

mehmet

"Eratosthenes Kalburu" işe
yarayabilir.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

mr.engineer

Alıntı yapılan: sinus - 15 Nisan 2020, 22:43:06En sağdaki veya soldaki bit sabit "1" tutulur. Diğer bit sırayla en son bit "1" olana kadar devam edilir. Sabit olan bit bir yana kaydırılır, işleme devam edilir. Sabit olan 1'in bulunduğu bitlere tekrar bakılmaz.

3 bit için >>> 011, 101, 110

4 bit için >> 0011, 0101, 1001, 0110, 1010, 1100
Tamamadır, anladım teşekkürler.




Alıntı yapılan: mehmet - 15 Nisan 2020, 23:10:21"Eratosthenes Kalburu" işe
yarayabilir.

Teşekkürler buna da bakayım daha hızlı çalıştıracaksa faydalı olabilir.

yas

Birde bu şekilde yapabilirsin, belki hangi bitlerin 1 yada sıfır olduğunu karşılaştırmakta isteyebilirsin.

Örneğin 8 bit için taranacak değişken a sayım sonucu da b olsun
b = 0
c = 1
while c <= $80
If (a and c) = c then INC b
c = c * 2
wend