图解算法记录

每个递归函数都有两个条件:基线条件和递归条件。

编写涉及数组的递归函数时,基线条件通常是数组为空或只包含一个元素。

def quicksort(arr):
    if len(arr)<2:
        return arr
    else:
        p=arr[0]
        less=[i for i in arr[1:] if i<=p]
        greater=[i for i in arr[1:] if i>p]
        return quicksort(less)+[p]+quicksort(greater)
a=[2,6,1,9,3]
print(quicksort(a))

python中的字典dict

散列表由键和值组成。在散列表 book 中,键为商品名,值为商品价格。散列表将键映射到值。

phone_book = {} ←------与phone_book = dict()等效

book=dict()
book["apple"]=2.0
book["cherry"]=5.0
print(book)
print(book["cherry"])


{'apple': 2.0, 'cherry': 5.0}
5.0

在无向图中,每条边都是一个环。狄克斯特拉算法只适用于有向无环图。

如果有负权边,就不能使用狄克斯特拉算法。

狄克斯特拉算法这样假设:对于处理过的节点,没有前往该节点的更短路径。

 

元素较少时算法的运行速度非常快,但随着元素数量的增加,速度
会变得非常慢。
涉及“所有组合”的问题通常是NP完全问题。
不能将问题分成小问题,必须考虑各种可能的情况。这可能是NP
完全问题。
如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它
可能就是NP完全问题。
如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP
完全问题。
如果问题可转换为集合覆盖问题或旅行商问题,那它肯定是NP完
全问题。

 

面临NP完全问题时,最佳的做法是使用近似算法。

 

仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用。

垃圾邮件过滤器使用一种简单算法——朴素贝叶斯

 

Google使用Simhash来判断网页是否已搜集。
老师可以使用Simhash来判断学生的论文是否是从网上抄的。

 

posted @ 2019-06-12 09:17  夜游星  阅读(206)  评论(0编辑  收藏  举报