0

xor検索に問題があります。バイナリ値で構成される配列があります。私のリストには10​​00個の異なるバイナリ値が含まれていますが、ダブルループがリスト内の要素を見つけるのにかかる時間を計りたいと思います。したがって、二重ループ検索の場合、ループ[(1)+(2)+(3)+ ... +(1000)]=500500回通過すると予想されます。[n(n + 1)/ 2]

次のコードでbitwise_xorを使用します

from numpy import bitwise_xor

count = 0
for word1 in listOutTextnoB:
    for word2 in listOutTextnoB:
        count+=1
        if bitwise_xor(word1,word2)==0:
            break
print "count"

残念ながら、カウントを印刷すると、カウント=1,000,000になります

ifステートメントをに変更した場合

if bitwise_xor(word1,word2):
      break

カウントは1000です

私もやろうとしました:

if word1^word2==0:
       break

しかし、「TypeError:^:'str'および'str'のサポートされていないオペランドタイプ」が表示されます。

実用的な例は次のとおりです。1101110111010111011101101110110010111100101111001XOR1101110111010111011101101110110010111100101111001これで0が返され、内部ループが終了します。

コードの何が問題になっていますか?

4

2 に答える 2

1

エラーは問題を示しています。リストの値は文字列であり、数値ではありません。bitwise_xorがそれらに何をするかはわかりませんが、最初にそれらを数値に変換しないことは確かです。これを手動で行う場合(bitwise_xor(int(word1)、int(word2)))、動作するはずです。

于 2012-11-23T23:52:35.757 に答える
1

^配列ではなく整数で動作するので、それは驚くべきことではありません。

文字列を使用した理由はわかりませんが、次のようになります。

from numpy import bitwise_xor

listOutTextnoB = range(1000)
count = 0
for word1 in listOutTextnoB:
    for word2 in listOutTextnoB:
        count+=1
        if bitwise_xor(word1,word2)==0:
            break
print "count", count

プリント

count 500500

あなたが予測するように。

編集:はい、あなたはやるべきです

if int(word1) ^ int(word2) == 0:
    break

bitwise_xorは、実際にはすべての文字列、文字列入力に対して「NotImplemented」を返します。

于 2012-11-23T23:54:19.480 に答える