小编Jon*_*Red的帖子

为什么尽管 Big-O 相同,这两个函数的性能却相差如此之大?

我正在学习 Big-O 符号,不是为了上课,只是通过自己阅读来学习。我正在阅读 Pythonds 并进行了练习,您的任务是编写一个“非最佳”Python 函数来查找列表中的最小值。该函数应该将每个数字与列表中的每个其他数字进行比较:O(n**2)。

这是我想出的:

def myFindmin(alist):
    return[x for x in alist if all(x<=y for y in alist)][0]
Run Code Online (Sandbox Code Playgroud)

这是我正在阅读的书给出的内容:

def findmin(alist):
    overallmin=alist[0]
    for i in alist:
        issmallest=True
        for j in alist:
            if i>j:
                issmallest=False
        if issmallest:
            overallmin=i
    return overallmin
Run Code Online (Sandbox Code Playgroud)

显然,本书版本削减了更多变量等,但是,根据我所了解的,这两个函数的 Big-O 表示法应该是 O(n**2),不是吗?他们都将每个数字与每个其他数字进行比较,这使得 n**2 成为函数的主要部分,是吗?

但是,当我将 myFindmin() 函数与书中的 findmin() 函数与最佳 min() 函数进行比较时,我得到了三个截然不同的结果:

if __name__=='__main__':
    for l in range(1000,10001,1000):
        thelist=[randrange(100000)for x in range(l)]
        print('size: %d'%l)
        for f in[findmin,myFindmin,min]:
            start=time()
            r=f(thelist)
            end=time()
            print('    function: %s \ttime: %f'%(f.__name__,end-start))
Run Code Online (Sandbox Code Playgroud)

他们甚至不接近:

...
size: …
Run Code Online (Sandbox Code Playgroud)

python algorithm big-o time-complexity

3
推荐指数
1
解决办法
109
查看次数

在 Python 2.x 与 Python 3.x 中将字符串编码为 Base64

在 Python 2 中,我曾经可以这样做:

>>> var='this is a simple string'
>>> var.encode('base64')
'dGhpcyBpcyBhIHNpbXBsZSBzdHJpbmc=\n'
Run Code Online (Sandbox Code Playgroud)

简单的!不幸的是,这在 Python 3 中不起作用。幸运的是,我能够找到另一种方法在 Python 3 中完成同样的事情:

>>> var='this is a simple string'
>>> import base64
>>> base64.b64encode(var.encode()).decode()
'dGhpcyBpcyBhIHNpbXBsZSBzdHJpbmc='
Run Code Online (Sandbox Code Playgroud)

但这太可怕了!一定有更好的方法!因此,我做了一些挖掘,发现了第二种替代方法来完成曾经是一个超级简单的任务:

>>> var='this is a simple string'
>>> import codecs
>>> codecs.encode(var.encode(),"base64_codec").decode()
'dGhpcyBpcyBhIHNpbXBsZSBzdHJpbmc=\n'
Run Code Online (Sandbox Code Playgroud)

那就更糟了!我不关心后面的换行符!我关心的是,天哪,在 Python 3 中一定有更好的方法来做到这一点,对吧?

我不是在问“为什么”。我想问是否有更好的方法来处理这个简单的情况。

python base64 encoding python-2.x python-3.x

2
推荐指数
1
解决办法
6683
查看次数