美文网首页
算法小结(一):递归与列表查找

算法小结(一):递归与列表查找

作者: ShowMeCoding | 来源:发表于2021-04-12 22:18 被阅读0次

一、算法的复杂度

1、如何简单快速地判断算法的时间复杂度

(1)确定问题规模n
(2)循环减半过程-->logn
(3)k层关于n的循环-->n^k

2、空间复杂度的判断

(1)算法使用了几个变量:O(1)
(2)算法使用了长度为n的一维列表:O(n)
(3)算法使用了m行n列的二维列表:O(mn)

二、递归

1、递归的两个特点

(1)调用自身
(2)结束条件

2、代码示例

def func(x):
    if x > 0:
        func(x-1)
        print(x)
func(3)
>> 1 2 3

3、汉诺塔问题

问题描述:把圆盘从下面开始按大小顺序重新摆放在另一根柱子上,要求小圆盘上面不可以放置大圆盘,在三根柱子之间一次只能移动一个圆盘。

示意图

归纳问题:
当n=2时,移动步骤为
(1)把小圆盘(1)从A移动到B
(2)把大圆盘(2-1)从A移动到C
(3)把小圆盘(2-1)从B移动到C

n=2

当有n个盘子时,移动步骤为:
(1)把n-1个圆盘从A经过C移动到B
(2)把第n个圆盘从A移动到C
(3)把n-1个小圆盘从B经过A移动到C

def hanoi(n, a, b, c):
    if n>0:
        hanoi(n-1, a, c, b)
        print("moving from %s to %s" % (a, c))
        hanoi(n-1, b, a, c)
hanoi(3, 'A', 'B', 'C')

>>moving from A to C
>>moving from A to B
>>moving from C to B
>>moving from A to C
>>moving from B to A
>>moving from B to C
>>moving from A to C

汉诺塔移动次数的递推式:h(x) = 2h(x-1)+1

三、列表查找

1、顺序查找(Python内置函数:index(x))

循环遍历列表,从第一个元素开始,直到查找到该元素

def linear_search(data_set, value):
    for i in range(len(data_set)):
        if data_set[i] == value:
            return i
    return

print(linear_search([1,2,3,4], 2))
>> 1

2、二分查找(时间复杂度 O(logn))

从有序列表的初始候选区开始查找,通过比较候选区中间值,可以使候选区减少一半。

def binary_search(data_set, value):
    low = 0
    high = len(data_set) - 1
    while low <= high :
        mid = (low + high)//2
        if data_set[mid] == value:
            return mid
        elif data_set[mid] > value:
            high = mid - 1
        else:
            low = mid + 1

print(binary_search([1,2,3,4], 2))
>> 1

相关文章

  • 算法小结(一):递归与列表查找

    一、算法的复杂度 1、如何简单快速地判断算法的时间复杂度 (1)确定问题规模n(2)循环减半过程-->logn(3...

  • 一、算法

    目标 递归算法查找算法算法分析十大排序算法 递归算法 什么是递归递归,在数学与计算机科学中,是指在函数的定义中使用...

  • 13.1、python递归与二分查找算法

    递归与二分查找算法 楔子 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,...

  • 二分查找

    1.非顺序表查找最大值递归算法 2.顺序表的二分查找算法查找下标最小的特定元素x 递归实现 非递归实现

  • thinking in haskell-递归

    -- 递归查找数组的最大值(1) -- 递归查找数组的最大值(2) -- 将a重复i次返回列表

  • 算法2:递归算法与二分查找

    3.递归算法3.1斐波那契数列(递归)3.2汉诺塔3.3八皇后问题4.⼆分查找递归实现 4.1二分递归查找: 3....

  • 算法学习 - Python(持续更新)

    二分查找法 - 递归实现 约瑟夫环问题 汉诺塔问题(递归) 旋转列表(Python):列表原地修改,参考Leetc...

  • 数据结构与算法--散列表

    数据结构与算法--散列表 之前学习了基于链表的顺序查找、基于有序数组的二分查找、二叉查找树、红黑树,这些算法在查找...

  • 2.3 二分查找的递归与非递归实现

    Chapter2: 时间复杂度分析、递归、查找与排序 3. 二分查找的递归与非递归实现 二分查找即折半查找,为查找...

  • 2.3 二分查找的递归与非递归实现

    Chapter2: 时间复杂度分析、递归、查找与排序 3. 二分查找的递归与非递归实现 二分查找即折半查找,为查找...

网友评论

      本文标题:算法小结(一):递归与列表查找

      本文链接:https://www.haomeiwen.com/subject/qahflltx.html