0

について質問がLinear SearchingありPythonます。のベースコードを持っているとしましょう

for l in lines:
  for f in search_data:
     if my_search_function(l[1],[f[0],f[2]]):
        print "Found it!"
        break

search_dataに格納されている値がどこに存在するかを特定しl[1]ます。次my_search_function()のようになります。

def my_search_function(search_key, search_values):
   for s in search_values:
      if search_key in s:
         return True
    return False

処理速度を上げる方法はありますか?行 とは多次元リストであり、インデックスを保持する必要があるためBinary、この場合は検索が機能しません。search_data私は外側からのアプローチを試みました。

for line in lines:
    negative_index = -1
    positive_index = 0
    middle_element = len(search_data) /2 if len(search_data) %2 == 0 else (len(search_data)-1) /2
    found = False

    while positive_index < middle_element:
        # print str(positive_index)+","+str(negative_index)
        if my_search_function(line[1], [search_data[positive_index][0],search_data[negative_index][0]]):
            print "Found it!"
            break
        positive_index = positive_index +1
        negative_index = negative_index -1

ただし、これによる速度の向上は見られません。誰もがより良いアプローチを持っていますか? 大量のCSVファイルを処理していて、1 つのファイルの処理時間が 00:15を超えているため、処理速度を半分に下げたいと考えています。これは、30 個以上のファイルのバッチを処理しているため許容できません。基本的に、私が検索しているデータは基本的に SKU です。からの値はlines[0]次のようAS123JKになる可能性があり、その値の有効な一致はAS123. ['AS123', 'AS123J', 'AS123JK']したがって、このシナリオでは理想的ではないのような値を分解する必要がない HashMap ルックアップで部分一致を行う方法が存在しない限り、HashMap はここでは機能しません。ありがとう!

4

3 に答える 3

0

問題の詳細によって異なります。

たとえば、完全な単語を検索する場合、検索可能な要素でハッシュテーブルを作成でき、最終的な検索は単純なルックアップになります。

ハッシュテーブルへの入力は疑似線形です。

于 2015-10-20T13:19:58.850 に答える