との間に10進数がある0
とし2^L
ます。これらの10進数のそれぞれは、長さの2進数として表すことができますL
。ここで、1つの10進数を受け取り、2進数L
表現が1つの位置でのみ異なるすべての10進数を計算する関数に興味があります。私はこの問題の最も速い解決策に興味があります。例:
L=3--> Numbers between 0 and 7 F(2) = (0,3,6) since 2= 010 -> 0=000, 3=011, 6=110
事前にアイデアと感謝を持っていることを願っています:)
これを行うには、ビットシフトを使用できます。
def neighbors(n, bitLength):
return map(lambda b: n ^ (1 << b), range(bitLength))
>>> print(list(neighbors(2, 3)))
[3, 0, 6]
それらは、古典的なコンピューターで実行できる最速の数学演算であり、2の累乗で完璧です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加