每个递归函数都有两个条件:基线条件和递归条件。
编写涉及数组的递归函数时,基线条件通常是数组为空或只包含一个元素。
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来判断学生的论文是否是从网上抄的。