随笔分类 -  数据结构与算法

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

点击右上角即可分享
微信分享提示