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
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.
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.
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
"Eratosthenes Kalburu" işe
yarayabilir.
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.
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