随笔分类 - 数据结构与算法
摘要:问题背景 关于图和深度优先的相关资料网上已经有很多了.本文侧重于如何代码实现. 深度优先涉及到递归算法.需要事先理解递归的运行逻辑(以下代码使用递归实现深度优先). "js实现深度优先遍历和广度优先遍历" 图释 代码 下面的Vertex 与 Graph 是图的结构逻辑实现.但是很多属性和方法是没有用
阅读全文
摘要:问题描述 待完善. 词梯文件下载:待完善. 代码 参考 待完善 "example" "example"
阅读全文
摘要:问题描述 最大公共子串问题:要求在两个字符串之间找出最大的公共字符串.并且输出其所在位置.通过递推可以分析得出递推公式(博主是跟着学的,没分析) : c[i,j] = c[i 1,j 1] + 1 以下图示列出了过程.文中的代码使用的是动态规划求解. 其中可能有点难以理解的是下标问题: arr[i]
阅读全文
摘要:图的数据结构Python代码实现 使用邻接列表实现. 邻接表理论介绍 : "数据结构(八):邻接表与邻接矩阵" 代码数据结构图示 数据结构文字描述 代码实现 参考 "数据结构(八):邻接表与邻接矩阵"
阅读全文
摘要:问题描述 问题描述 题目描述:求得两个数组的最长公共子序列.子序列不要求是连续的.但是要求是有的(增序). 比如字符串1:['B','D','C','A','B','A'];字符串2:['A','B','C','B','D''A','B']. 则这两个字符串的最长公共子序列长度为4,最长公共子序列是
阅读全文
摘要:问题描述 假设你为一家自动售货机厂家编程序,自动售货机要每次找给顾客最少数量硬币;假设某次顾客投进$1纸币,买了ȼ37的东西,要找ȼ63,那么最少数量就是:2个quarter(ȼ25)、1个dime(ȼ10)和3个penny(ȼ1),一共6个. 分别使用贪心算法,递归,以及递归的优化版本:递归 +
阅读全文
摘要:基数排序 此算法特性 此算法适用场景 代码实现 参考 "【图解数据结构】 一组动画彻底理解基数排序" "常见排序算法集合以及分析(使用Python描述)"
阅读全文
摘要:桶排序 此算法特性 此算法适用场景 代码实现 参考 "常见排序算法集合以及分析(使用Python实现)" "【图解数据结构】 一组动画彻底理解桶排序"
阅读全文
摘要:堆排序 此算法特性 此算法适用场景 代码实现 参考 "图解排序算法(三)之堆排序 Java版本" "example" "常见排序算法集合以及分析(使用Python实现)"
阅读全文
摘要:title 代码复制自 "随机快速排序的实现 夜雨最萌" .和快速排序一样呀😂 随机快速排序与快速排序的思路一样,差异就是取主元之前,随机快速排序多了一个步骤:而随机快速排序是随机取得一个元素,但是又会与最后一个元素交换位置.取得主元的下标位置实际上还是最后一个下标.快速排序是习惯取得最后一个元素
阅读全文
摘要:此算法描述 此算法特性 此算法适用场景 代码 参考 "什么是计数排序?" "常见排序算法集合以及分析(使用Python描述)"
阅读全文
摘要:问题描述 个人理解希尔排序就是插入排序的改进版,理解希尔排序之前需要先理解插入排序的逻辑. 此算法特性 暂为空,待补充 此算法适用场景 暂为空,待补充 代码实现 参考 "希尔排序 简单易懂图解" "五分钟学会一个高难度算法:希尔排序" "常见排序算法集合以及分析(使用Python描述)"
阅读全文
摘要:问题描述 记得刚刚接触算法的时候觉得特别难以理解.最初接触的是冒泡排序 🤣 但是现在看一遍马上知道怎么回事,以及想到如何代码实现. 就像是咕噜咕噜冒泡泡一样.每次都是最大的泡泡冒到最上面.查看动画是最好理解的算法的方式之一.请参看: "冒泡排序动画演示" 关于冒泡排序的特性:冒泡排序的对比时间复杂
阅读全文
摘要:问题描述 问题引入: 如何在数组中寻找最小的一个数字.有一种思路是:遍历一遍数组,数组元素进行对比大小.代码如下: arr = [1,0,22,2,3,99] def order_select(arr,left,right,key): 这个是需要return ''' key = k left = p
阅读全文
摘要:描述 归并排序和快速排序都是使用分而治之的思维.归并排序侧重点是最终结果的合并.快速排序的重点则是放在了子问题的分解上面. 代码一 def quick_sort(arr): len_arr = len(arr) if len_arr 参考 "分而治之" "算法设计与分析理论" "Python排序算法
阅读全文
摘要:问题描述 如果觉得不容易理解请查看底部的算法可视化 代码描述 参考 "插入排序 百度百科" "插入排序算法可视化 visualgo" "常见排序算法集合以及分析(使用Python描述)"
阅读全文
摘要:问题描述 比较直观的排序算法.具体算法介绍参照选择排序-百科 代码描述 def selection_sort(input_arr): for i in range(len(input_arr)-1):# 假如说是四个元素的话,那么需要比较三次 min_index = i # 最小值的下标.默认当前值
阅读全文
摘要:问题 1945年,现代计算机之父冯·诺伊曼提出归并排序. 归并排序算法:无论最好还是最坏时间复杂度均为:O(nlgn); 空间复杂度为 O(n); 是一种稳定的排序算法. 方法一:使用递归(分而治之) def merge_sort(arr): if len(arr) == 1: 首先是递归.需要找出
阅读全文
摘要:问题描述 二分查找时间复杂度为O(log2n). 二分查找效率相对来说比较高.但是传入的数组必须是已经排好序的数组. 有两种思路: 第一种是 动态改变下标 .进行与所要查找数组进行对比.得出结果 第二种是使用递归. 动态改变数组 分解为子数组求解.进而得出结果 这个对于递归这个方法来说是比较简单的.
阅读全文
摘要:问题描述 找出数组中存在的最大子数组(必须相连).(数组有正数与负数). 示例: arr = [ 1, 3,3,5, 4,3,2, 2,3,6]. 还原为实际场景可能是在一些具有相同属性的存在中,找出一段连续且最佳的存在. 方法一:暴力破解法 思路解释:使用暴力破解法. 时间复杂度为O(n^2).
阅读全文