2014-12-07 37 views
-2

我很难理解在python中花费什么时间。 特别在一个例子中,quicksort程序。这里是由几个网站被认为是快速排序的蟒蛇最好的实现:我想解释一下python列表管理优化,总体来说,优化

def theirquicksort(list): 
    """Quicksort using list comprehensions""" 
    if list == []: 
     return [] 
    else: 
     pivot = list[0] 
     lesser = theirquicksort([x for x in list[1:] if x < pivot]) 
     greater = theirquicksort([x for x in list[1:] if x >= pivot]) 
     return lesser + [pivot] + greater 

这里是我所期望的是快速排序的最好的实现(是什么教训给我们的在学校很好地执行):

def myquicksort(list): 
    """Quicksort not using list comprehensions""" 
    if list == []: 
     return [] 
    else: 
     pivot = list[0] 
     lesser,greater=[],[] 
     for i in list[1:]: 
      if i < pivot: 
       lesser.append(i) 
      else: 
       greater.append(i) 
     return myquicksort(lesser) + [pivot] + myquicksort(greater) 

在theirquicksort,调用迭代列表时,蟒蛇(我猜)运行两次槽的列表,服用或不,元素在较小/较大。 在myquicksort中,python只通过列表运行一次,因此没有任何用处。我的意思是,它不会与我比较两次。因此,它应该以纯粹的数学方式加快速度。 而现在还没有。为什么?

有关优化的另一个问题,即使它的问题少: 当我想添加/乘/任何东西通过视条件的其他东西时,“别的东西”,通常的方式是做:

if condition: 
    a+=3 
else: 
    a+=1 

例如。 但是如果我使用:

a+={True:3,False:1}[condition] 

我会失去很多时间吗?我是否会失去时间?乍一看,使用第一种可能性没有问题,但是在计算中,除了这个之外可以放在一行中,其中加1/3(当然只是一个例子)不是第一种,也不是第一种最后的操作,第二种可能性会很有吸引力。但它意味着称这个词典。那么,它有多聪明?

+3

一种在Python中剖析代码性能的方法:https://docs.python.org/2/library/timeit.html请注意,Python中的内置排序方法可能是在Quicksort中实现的优化变体本地代码,并可能会超越任何Python源代码解决方案。 – 2014-12-07 21:00:48

+0

@Matt Coubrough Quicksort是一个例子,在这里。我不怀疑这样一个事实,即综合清单更快,内置实施总是更好,但我想明白为什么会这样。 (我的意思是,综合名单之一) – 2014-12-07 21:03:44

+0

确实是重复的,对此表示歉意。我在相关的问题列表中看到它,但没有看到它,因为我不明白'分区例程'的含义。 – 2014-12-07 22:24:46

回答