2016-02-10 3 views
1

Программа предназначена для анализа различных алгоритмов сортировки в разных случаях. Я хочу сохранить имя алгоритма, и с ним мне нужно сохранить 10 значений времени выполнения для случая (a), а затем сохранить отдельно 10 текущих значений для case (b) Ниже приведен код тестирования различных алгоритмов сортировки алгоритмов. Мой код теряет результат после начала каждого алгоритма, как я не знаю, как хранить их правильноЧто было бы лучшим способом хранения времени алгоритмов

def call(m): 
    for i in range(m): 
     makelist() 

def makelist(): 
    lst=[10] 
    for l in lst: 
     testall(l) 

def testall(n): 
    flist = [insertionsort,selectionsort] 
    if n < 1: 
     n = 1 
    testlist = [i for i in range(n)] 
    lsr=[testlist.sort(), testlist.sort(reverse=True),random.shuffle(testlist)] 
    for f in flist: 
     result=[] 
     for g in lsr: 
      copylist = copy.deepcopy(testlist) 
      testfunction(copylist,f, result) 

def testfunction(testlist, function,r): 
    start_time = time.perf_counter() 
    function(testlist) 
    end_time = time.perf_counter() 
    print('time =', (end_time - start_time), '; alg =', function.__name__, '(', len(testlist), ')') 
    r.append(end_time - start_time) 
+0

Это еще не полный код. Пожалуйста, дайте полный код. –

+0

остальная часть кода всего 2 сортировки Алгоритмы – AssassinsMayCry

ответ

0

Основываясь на вашу схему, я бы предложил defaultdict из списка, где имя функции является ключевым и различными таймингами добавляются к значению:

from collections import defaultdict 

def testfunction(testlist, function, results): 
    start_time = time.perf_counter() 
    function(testlist) 
    end_time = time.perf_counter() 
    print('time =', (end_time - start_time), '; alg =', function.__name__, '(', len(testlist), ')') 
    results[function.__name__].append(end_time - start_time) 


results = defaultdict(list) 

for f in flist: 
    for g in lsr: 
     copylist = copy.deepcopy(testlist) 
     testfunction(copylist, f, results) 

Когда вы закончите, результаты будут содержать что-то вроде:

>>> results 
defaultdict(<class 'list'>, {'haresort': [6.194799953483277, 1.947999534832776, 9.47999534832776, 4.799953483277619, 7.999534832776194, 6.194799953483277, 1.947999534832776, 9.47999534832776, 4.799953483277619, 7.999534832776194], 'snailsort': [8.327761947999534, 3.277619479995348, 2.776194799953483, 7.761947999534832, 7.619479995348327, 8.327761947999534, 3.277619479995348, 2.776194799953483, 7.761947999534832, 7.619479995348327]}) 

Просто относиться к defaultdict как обычный словарь Fo в основном. Например, в последнем случае вы можете распечатать содержимое результатов:

for function, timings in results.items(): 
    print(function, ":\n") 
    print(*timings, sep="\n") 
    print() 
+0

Большое спасибо, где лучшее место для размещения кода для печати словаря, не хотите, чтобы он распечатывался до тех пор, пока он не выполнил все вызовы. Также этот хороший код для печати(): print (keys) print (values) – AssassinsMayCry

+0

@AssassinsMayCry Я добавил пример кода печати в свой ответ. Я предполагаю, что это должно быть последнее, что делает testall(). – cdlane

Смежные вопросы