二分查找算法
二分查找算法
代码解释
1 | def binary_search(arr, target, left, right): |
我的解释
其实这里的算法解释和上次学习的递归关系很大
而且我感觉,大部分的数学问题都可以使用递归解决,这本来就是一种数学思想
分而治之 !!!这就是数学思想
这里的markdown的语法来自菜鸟教学
还有就是分享周杰伦的歌真的很好听
快速排序
D&C
这里是对D&C的解释:
归并排序(Merge Sort)
将数组分成两半,递归排序,再将两个有序数组合并。
快速排序(Quick Sort)
选择一个基准元素,将数组分为小于基准和大于基准的两部分,递归排序。
二分查找(Binary Search)
将有序数组分为两半,递归查找目标值。
大整数乘法
将大整数分解为更小的部分,递归计算后再合并结果。
矩阵乘法(Strassen算法)
将矩阵分解为子矩阵,递归计算后再合并。
最近点对问题
将平面上的点集分为两半,递归求解最近点对,再合并结果。
1 | def merge_sort(arr): |
1 | def quicksort(array): |
先设置一个基准值[pivot]然后以此为基准分为大于和小于的两个子集合,对子集合再进行递归运算。
刚才你大致见识了归纳证明!归纳证明是一种证明算法行之有效的方式,它分两步:基线
条件和归纳条件。是不是有点似曾相识的感觉?例如,假设我要证明我能爬到梯子的最上面。
递归条件是这样的:如果我站在一个横档上,就能将脚放到下一个横档上。换言之,如果我站
在第二个横档上,就能爬到第三个横档。这就是归纳条件。而基线条件是这样的,即我已经站
在第一个横档上。因此,通过每次爬一个横档,我就能爬到梯子最顶端。
对于快速排序,可使用类似的推理。在基线条件中,我证明这种算法对空数组或包含一个
元素的数组管用。在归纳条件中,我证明如果快速排序对包含一个元素的数组管用,对包含两
个元素的数组也将管用;如果它对包含两个元素的数组管用,对包含三个元素的数组也将管用,
以此类推。因此,我可以说,快速排序对任何长度的数组都管用。这里不再深入讨论归纳证明,
但它很有趣,并与D&C协同发挥作用
| 序号 | 问题 | 简要说明 |
|---|---|---|
| 1 | 二分查找算法的基线条件和递归条件是什么? | 解释了二分查找的基线条件(终止递归)和递归条件(继续递归)。 |
| 2 | D&C(分治法)是什么? | 介绍了分治法的定义、步骤、特点、经典应用以及与动态规划的区别。 |
| 3 | 用 Markdown 文法输出分治法的说明。 | 使用 Markdown 语法整理了分治法的详细说明。 |
| 4 | Markdown 如何表示 Python 代码? | 解释了如何在 Markdown 中使用代码块和行内代码表示 Python 代码。 |
| 5 | 快速排序代码的修正与优化。 | 修正了快速排序代码的缩进和 print 语法问题,并提供了优化建议。 |
| 6 | 将以上问题制作成表格,内容尽量精简。 | 将你问过的问题整理成表格,内容精简明了。 |
| 7 | 要用 Markdown 语法给我输出。 | 使用 Markdown 语法生成表格,内容为你问过的问题。 |
以上是我在学习过程中向ai提问的问题!!!
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
