文章目录
○ 进制转换
二级制和十进制转化
- 输出是一个 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
A→3×4,
B
→
4
×
5
B→4×5
B→4×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 1∗3+2∗1+3∗5+4∗7=48,当然你也可以说这是 B B B 的行数,当然都是一样的。因此 k k k 循环的次数应该等于 A 的 列 数 = B 的 行 数 A 的列数 = B 的行数 A的列数=B的行数
- 本题使用的是
3
×
3
3×3
3×3 的矩阵,不太利于观察,所以下面我使用
A
→
3
×
4
A→3×4
A→3×4,
B
→
4
×
5
B→4×5
B→4×5 的矩阵来加深理解,最终生成的新矩阵为
C
C
C :
-
还不懂的话,可以敲一遍代码,在纸上画个矩阵,就什么都明白了。