数据结构与算法小记

163 阅读1分钟

递归

def look_for_key(box): 
    for item in box: 
        if item.is_a_box(): 
            look_for_key(item) # 递归!
        elif item.is_a_key(): 
            print("found the key!")

基线条件和递归条件

每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。

def countdown(i):
    print(i)
    if i <= 0: # 基线条件
        return
    else: # 递归条件
        countdown(i-1)

栈只能操作最上面的那个元素

快速排序

分而治之(divide and conquer,D&C)——一种著名的递归式问题解决方法。

def quicksort(array):
    if len(array) < 2: # 基线条件:为空或只包含一个元素的数组是“有序”的
        return array
    else:
        pivot = array[0] # 基准值 递归条件
        less = [i for i in array[1:] if i <= pivot]
        greater = [i for i in array[1:] if i > pivot]
    return quicksort(less) + [pivot] + quicksort(greater)

if __name__ == '__main__':
    print(quicksort([10, 5, 2, 3]))

散列表

散列表可能是最有用的,也被称为散列映射、映射、字典和关联数组。 Python 提供的散列表实现为字典,你可以使用 dict() 来创建散列表。

favourite_food = dict()
# 或者 favourite_food = {}
favourite_food["chocolate"] = 0.67
favourite_food["milk"] = 1.49
favourite_food["cookie"] = 1.88

print(favourite_food)

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

防止重复

voted.get("tom")

未完待续...