2016-02-25 52 views
1

我正在嘗試使用search_slow和search_fast算法來查看兩者之間是否存在顯着差異,並在不同計算機上運行此代碼以查看時間差也。我已經讓他們工作,但是,針似乎沒有工作。無法在search_slow中定義某些「針」和python中的search_fast算法

如果某個單詞在文本文件中並不重要,如果在test.txt文件中找不到指針,它應該返回false。有點困難來解釋,所以我希望下面的代碼將介紹一些關於我嘗試做了一下:

import timeit 

haystack = open('test.txt', 'r+') 
haystack = list(haystack.read().split()) 
needle = "Hello" 

def search_fast(haystack, needle): 
    for item in haystack: 
     if item == needle: 
      return_value = True   
     return True 
    return False 


def search_slow(haystack, needle): 
    return_value = False 
    for item in haystack: 
     if item == needle: 
      return_value = True 
    return return_value 



search_slow(haystack, needle) 
print(timeit.timeit("search_slow(haystack, needle)", setup="from __main__ import search_slow, haystack, needle")) 

search_fast(haystack, needle) 
print(timeit.timeit("search_fast(haystack, needle)", setup="from __main__ import search_fast, haystack, needle")) 

test.txt的內容是:

This is a random text file to test ! 

值當我運行程序我得到有:

0.77570605278

0.187502861023

+0

請描述當前正在發生的事情,然後解釋這是如何偏離你的期望。 –

+0

我認爲目前發生的事情是它通過test.txt文件,然後花費多長時間才能通過文本文件。 我想要實現的是添加一個更大的文本文件,並查看需要多長時間才能在文本文件中找到某個元素或符號。 目前針沒有任何作用,即使文本文件中沒有元素或符號AKA「needle」,程序也會返回一定的時間。 – user3062391

回答

0

首先在search_fast你有一個bug。這是一個固定版本。

def search_fast(haystack, needle): 
    for item in haystack: 
     if item == needle: 
      return True 
    return False 

這就是說,你有兩個可能的原因造成混淆。第一次嘗試打印乾草堆。你是否期望它有一個單詞列表,或一個完整的列表?

第二個是你沒有代碼,如果你發現針沒有做任何有趣的事情。你只需返回它。那麼你如何期望知道它被發現?

+0

嘿,謝謝你的回覆,我修正了這個小錯誤。要回答你的問題: 1)我打印乾草堆,它作爲打開的文件'test.txt' - 我實際上並沒有試圖打印內容,只是想看看程序運行需要多長時間2搜索算法 - 我添加了列表,因爲我認爲它會有所作爲,但似乎它毫無意義:/ 2)我的主要目標是查看needle在test.txt文件中的位置和顯示速度找到它的時間 – user3062391

+0

只是想到另一個想法:也許我應該拋棄.txt文件,並將乾草堆放入範圍在1 - 1000範圍內的列表中,並查看找到某個數字所需的速度,如57例如?因爲我的主要目標是測試它在不同計算機上的運行速度以及處理能力是否存在顯着差異等。 – user3062391

+0

@ user3062391基準測試的要點是什麼?如果你仔細地執行它,你會發現在一個長列表中的一個針頭部分'x'可以在時間的'x'部分找到。平均來說,這意味着快速版本的執行速度與慢速版本一樣快。現在你不需要基準測試! – btilly