Tôi cần lặp qua tất cả các số nguyên n bit có nhiều bít bit k nhất (bit 1), trong đó 0 < n < = 32 và 0 < = k < = n. Ví dụ, nếu n = 4 và k = 2 thì các số này là (theo số nhị phân): 0000, 0001, 0010, 0100, 1000, 0011, 0101, 0110, 1001, 1010, 1100. Thứ tự các số này looped thông qua là không quan trọng, nhưng mỗi được truy cập chỉ một lần.Cách tốt nhất để lặp qua các số nguyên với tối đa k bit ON là gì?
Hiện nay tôi đang sử dụng thuật toán đơn giản này:
for x = 0 to (2^n - 1)
count number of bits 1 in x
if count <= k
do something with x
end if
end for
Tôi nghĩ rằng thuật toán này là không hiệu quả bởi vì nó có để lặp qua quá nhiều con số. Ví dụ, nếu n = 32 và k = 2 thì nó phải lặp qua 2^32 số để chỉ tìm thấy 529 số (có < = 2 bit 1).
Câu hỏi của tôi là: có bất kỳ thuật toán hiệu quả hơn nào để thực hiện việc này không?
bản sao có thể có của [Bit hack để tạo tất cả các số nguyên với số lượng nhất định là 1s] (http://stackoverflow.com/questions/8281951/bit-hack-to-generate-all-integers-with-a-given -number-of-1s) – dasblinkenlight
@dasblinkenlight Nó không phải là một bản sao, nhưng tương tự. – Muhd