算法与复杂度学习笔记--week2:十进制二进制转换、求最大公约数、数组和链表的查找算法(递归)、排序算法、矩阵乘法、阶乘算法(递归)、斐波那契数列(递归)

○ 进制转换

二级制和十进制转化

在这里插入图片描述
在这里插入图片描述

  • 输出是一个 tuple 元组,元组的第一个部分是每一次迭代完后的值;比如第一次是 2 0 = 1 2^0 = 1 20=1,第二次是 2 0 + 2 1 = 3 2^0 + 2^1=3 20+21=3, 第三次是 2 0 + 2 1 + 2 2 = 7 2^0 + 2^1 + 2^2=7 20+21+22=7,以此类推,元组的第二个部分表示的就是在这一次迭代中新增的一项,第一次迭代的新增项是 2 0 2^0 20,第二次是 2 1 2^1 21,以此类推

十进制数转二进制数

在这里插入图片描述

  • 按照左图的思路,每一步取余得到的结果放入 lst 中,但是这样的话,由于列表的性质,我们需要将列表中的内容倒序输出,才是原来的结果。右边是低位,左边是高位

○ 最大公约数(greatest common divisor)

  • 第一种方法,这是老师给出的答案,我感觉不是那么好理解。看不懂的可以看我下面写的那个
    在这里插入图片描述
  • 这种方法也是正确的,而且我个人感觉比老师给出的上面这种要好理解一些。
    在这里插入图片描述

○ 查找算法

数组 – 有序查找

  • 给定一个从小到大排序好的数组 A,和一个需要查找的数据 x,设计算法找出 A 中的 x,如果没有,则返回 -1
    在这里插入图片描述
  • 其实按照下面这种写法也完全可以:
    在这里插入图片描述

数组 – 二分查找法(binary):递归方式

在这里插入图片描述

数组 – 寻找最大值

在这里插入图片描述

链表

在这里插入图片描述

链表 – 查找算法

在这里插入图片描述

○ 排序算法

冒泡排序法

在这里插入图片描述
当然,按照 python 里面的方便小 tips,交换两个变量的值不必引入第三个变量,因此可以如下写:
在这里插入图片描述

选择排序法

在这里插入图片描述

○ 矩阵乘法

在这里插入图片描述

  • 这个算法可能初学者不太好理解,但是只需要掌握下列几点就可;

    • 确定基本运算的次数
    • 计算得到的新矩阵的行列数。
  • 下面来分析一下,不会的可以多看几遍:

    • 本题使用的是 3 × 3 3×3 3×3 的矩阵,不太利于观察,所以下面我使用 A → 3 × 4 A→3×4 A3×4 B → 4 × 5 B→4×5 B4×5 的矩阵来加深理解,最终生成的新矩阵为 C C C
      在这里插入图片描述
    • 首先我们先观察, A A A 的行数就是 C C C 矩阵的行数, B B B 的列数就是新矩阵的列数;因此,我们在代码中生成新矩阵的时候,就要通过 A A A 的行数 和 B B B 的列数来确定循环的次数。
    • 因为 C C C 是二维矩阵,因此,制造 C C C 矩阵的时候,进行的循环一定是二重循环;而且第一重循环的次数就是 A A A 的行数,第二重循环的次数是 B B B 的列数。
    • 然后我们进行下一步,为 C C C 中的每个位置上的数进行基础的运算。
      • C C C 的每个位置上的数都是由 A A A 的一行 和 B B B 的一列相乘再相加得到的,因此我们在 k k k 这个循环中进行基本的加法和乘法运算的次数应该等于 A A A 的列数(这句话好好理解一下)。比如在上图给的例子中,要计算出 C C C 中的 48 48 48,你需要进行 4 4 4 次运算 1 ∗ 3 + 2 ∗ 1 + 3 ∗ 5 + 4 ∗ 7 = 48 1*3 + 2*1 + 3*5 + 4*7 = 48 13+21+35+47=48,当然你也可以说这是 B B B 的行数,当然都是一样的。因此 k k k 循环的次数应该等于 A 的 列 数 = B 的 行 数 A 的列数 = B 的行数 A=B
  • 还不懂的话,可以敲一遍代码,在纸上画个矩阵,就什么都明白了。

○ 阶乘(factorial)

在这里插入图片描述

○ 斐波那契数列

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值