2017-02-08 4 views
-1

Also versuche ich die Timeit/Timer-Funktion in Python zu verwenden, um den Unterschied zwischen der Brute-Force-Agorithmus und einer effizienteren nlogn-Version zu messen. Mein Problem ist in den Funktionen von timeit enthalten.Python timeit Importieren von Variablen in Funktionen

from timeit import Timer 
import timeit 
def BruteForce(A, u): 
     for z in A: 
      if u-z in A: 
       return u, z 
     return False 

def BinarySearchAlgo(A, u): 
    A.sort() 
    for z in A: 
     if BinarySearch(A, u-z) is True: 
      return u, z 
    return False 

def BinarySearch(list, item): 
    if len(list)==0: 
     return False 
    else: 
     midpoint = len(list)//2 
     if list[midpoint] == item: 
      return True 
     elif item < list[midpoint]: 
      return BinarySearch(list[:midpoint], item) 
     else: 
      return BinarySearch(list[midpoint+1:], item) 

def tests(): 
    TestFiles = ['listNumbers-10.txt', 'listNumbers2-10.txt','listNumbers- 100.txt','listNumbers2-100.txt','listNumbers-1000.txt','listNumbers2- 1000.txt','listNumbers-10000.txt','listNumbers2-10000.txt','listNumbers- 100000.txt','listNumbers2-100000.txt','listNumbers-1000000.txt','listNumbers2- 1000000.txt'] 
    for File in TestFiles: 
     results = [] 
     print("The following are timing tests for the file: ", File) 
     with open(File) as inputfile: 
      for line in inputfile: 
       results.append(int(line.strip())) 
     TestNumbers = [len(results)%2,len(results)%5,len(results)%13,len(results)%99, len(results)%209, len(results)%317, len(results)%464, len(results)%892, len(results)%777] 
     for n in TestNumbers: 
      BruteForceTime = Timer("BruteForce(results, n)", "from __main__ import BruteForce").timeit() 
      BinarySearchTime = Timer("BinarySearchAlgo(results, n)", "from __main__ import BinarySearchAlgo").timeit() 

      print("Test Number = ", n, "Brute Force Algo time = ", BruteForceTime, "Binary Search Algo time = ", BinarySearchTime) 

In den folgenden zwei Zeilen, wenn ich die Tests() Funktion aufrufen, habe ich den Fehler, der sich ergibt und n sind nicht definiert. Meine Frage ist dann, wie kann ich sie in die Timer-Argumente importieren, so dass sie definiert sind.

BruteForceTime = Timer("BruteForce(results, n)", "from __main__ import BruteForce").timeit() 
BinarySearchTime = Timer("BinarySearchAlgo(results, n)", "from __main__ import BinarySearchAlgo").timeit() 

Vielen Dank im Voraus für die Hilfe

Antwort

0

anstelle der Variablen im Ausdruck den Wert verwenden:

Timer("BruteForce({}, {})".format(results, n), 
     "from __main__ import BruteForce").timeit() 
Verwandte Themen