随笔分类 -  CS专业课 / 数据结构与算法

Java实现
摘要:应用场景: 1. 算法概述 Dijkstra算法 是典型单源最短路径算法,用于计算一个顶点到其他顶点的最短路径 单源:从一个顶点出发,Dijkstra算法 只能求一个顶点到其他点的最短距离而不能任意两顶点 用于无权图,或者所有边的权都相等的图,Dijkstra 算法等同于BFS搜索 特点:以起始点为 阅读全文
posted @ 2020-04-01 13:04 tree6x7 阅读(175) 评论(0) 推荐(0) 编辑
摘要:1. 简单介绍 将整数按位数切割成不同的数字,然后按每个位数分别比较;本质上是一种多关键字排序; 基数排序(Radix Sort) 属于“分配式排序”,又称“桶子法”。顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用; 基数排序法是属于稳定的排序,基数排序法的是效 阅读全文
posted @ 2020-03-31 15:21 tree6x7 阅读(169) 评论(0) 推荐(0) 编辑
摘要:1. 桶排序 简单介绍 桶排序是将待排序集合中处于同一个值域的元素存入同一个桶中,也就是根据元素值特性将集合拆分为多个区域; 拆分后形成的多个桶,从值域上看是处于有序状态的; 对每个桶中元素进行排序,则所有桶中元素构成的集合是已排序的; 桶排序过程中存在 2 个关键环节 元素值域的划分,也就是元素到 阅读全文
posted @ 2020-03-31 15:13 tree6x7 阅读(223) 评论(0) 推荐(0) 编辑
摘要:应用场景:字符串匹配问题 1. 暴力匹配 《算法(第4版)》 1.1 思路分析 假设现在 str1 匹配到 i 位置,子串 str2 匹配到 j 位置,则有: 如果当前字符匹配成功 (即 str1[i] == str2[j]),则 i++,j++,然后继续匹配下一个字符 如果匹配失败 (即 str1 阅读全文
posted @ 2020-03-14 23:26 tree6x7 阅读(313) 评论(0) 推荐(0) 编辑
摘要:将马随机放在国际象棋的8×8棋盘的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。 1. 思路 1.1 步骤 (遍历 + 回溯) 创建棋盘 chessBoard,一个二维数组 将当前位置设置已访问标记(当前 step),然后根据当前位置,计算出马下一步可走哪些位置 阅读全文
posted @ 2020-03-13 23:47 tree6x7 阅读(278) 评论(0) 推荐(0) 编辑
摘要:1. 概述 Floyd算法是一个经典的动态规划算法,是解决任意两点间的最短路径(称为多源最短路径问题)的一种算法; 也可以正确处理有向图或负权的最短路径问题; Dijkstra ~ Floyd Dijkstra算法 单源最短路径,计算图中某一个顶点到其他顶点的最短路径 选定一个顶点作为出发访问顶点, 阅读全文
posted @ 2020-03-13 23:46 tree6x7 阅读(104) 评论(0) 推荐(0) 编辑
摘要:1. 最小生成树 【加权图】一种为每条边关联一个权值的图模型; 【图的生成树】是该连通图的一个极小连通子图,含有图的全部顶点,但只有构成一棵树的(n-1)条边; 【加权图的最小生成树(MST)】在生成树的基础上,要求树的(n-1)条边的权值之和是最小的; 约定: 只考虑连通图 根据树的基本性质,我们 阅读全文
posted @ 2020-03-13 23:31 tree6x7 阅读(196) 评论(0) 推荐(0) 编辑
摘要:1. 基本概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择,从而希望能够导致结果是最好或者最优的算法。 也就是说,它不从整体最优上加以考虑,只顾眼前不顾大局,所以它所做出的也仅仅是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最好的解决办法,关键是贪心策略的选择 阅读全文
posted @ 2020-03-13 23:26 tree6x7 阅读(498) 评论(0) 推荐(0) 编辑
摘要:1. 算法介绍 动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法; 动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解; 与分治法不同的是,适合于用 阅读全文
posted @ 2020-03-13 22:11 tree6x7 阅读(181) 评论(0) 推荐(0) 编辑
摘要:1. 设计思想 分而治之 就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题 (这些子问题互相独立且与原问题形式相同)…… 直到最后子问题可以简单的直接求解,原问题的解 即 子问题的解的合并 分治 & 递归 如果原问题可分割成k个子问题,1<k≤n,且这些子问题都可解 阅读全文
posted @ 2020-03-13 22:07 tree6x7 阅读(178) 评论(0) 推荐(0) 编辑
摘要:建议去看原文,下文只摘出了KMP过程且做了少许修改;https://www.cnblogs.com/SYCstudio/p/7194315.html 1. 引入 首先我们来看一个例子,现在有两个字符串 A 和 B,问你在 A 中是否有 B,有几个?为了方便叙述,我们先给定两个字符串的值 A = "a 阅读全文
posted @ 2020-03-01 08:09 tree6x7 阅读(195) 评论(0) 推荐(0) 编辑
摘要:图的遍历 遍历,即是对图中订点的访问。一个图有那么多个结点,如何遍历这些结点,则可根据搜索路径的不同,将遍历图的方法分为 2 种: 深度优先遍历 (Depth First Search) 广度优先遍历 (Broad First Search) 深度优先遍历 基本思想 DFS 类似于树的先序遍历 首先 阅读全文
posted @ 2020-02-24 21:32 tree6x7 阅读(166) 评论(0) 推荐(0) 编辑
摘要:1. 为什么要有图? 前面学了线性表和树,线性表局限于一个直接前驱和一个直接后继的关系,树也只能有一个直接前驱也就是父结点。当需要表示多对多的关系时, 这里就用到了图。 2. 图的举例说明 3. 图的常用概念 顶点(vertex) 图是一种数据结构,其中结点可以具有零个或多个相邻元素 结点也可以称为 阅读全文
posted @ 2020-02-24 21:06 tree6x7 阅读(256) 评论(0) 推荐(0) 编辑
摘要:版权声明:本文为CSDN博主「Chida15」的原创文章,遵循 CC 4.0 BY SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_40953222/article/details/80544928 阅读全文
posted @ 2020-02-24 07:37 tree6x7 阅读(215) 评论(0) 推荐(0) 编辑
摘要:1. 二叉树的问题分析 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树: 二叉树需要加载到内存的,如果二叉树的结点少,没有什么问题,但是如果二叉树的结点很多(比如 1 亿), 就存在如下问题: 问题1:在构建二叉树时,需要多次进行I/O操作(海量数据存在数据库或文件中),结点海量,构建二叉 阅读全文
posted @ 2020-02-18 21:07 tree6x7 阅读(352) 评论(0) 推荐(0) 编辑
摘要:1. 引入 给你一个数列 {1,2,3,4,5,6},要求创建一颗二叉排序树(BST) 上述 BST 存在的问题分析 左子树全部为空,从形式上看,更像一个单链表 插入速度没有影响 查询速度明显降低,不能发挥 BST 的优势 // 因为每次还需要比较左子树,其查询速度比单链表还慢 [解决方案] 平衡二 阅读全文
posted @ 2020-02-18 21:04 tree6x7 阅读(112) 评论(0) 推荐(0) 编辑
摘要:1. 引入 给你一个数列 {7, 3, 10, 12, 5, 1, 9},要求能够高效的完成对数据的查询和添加。 1. 使用数组 数组未排序 优点:直接在数组尾部添加,速度快 缺点:查找速度慢 数组排序 优点:可以使用二分查找,查找速度快 缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面 阅读全文
posted @ 2020-02-18 21:02 tree6x7 阅读(138) 评论(0) 推荐(0) 编辑
摘要:1. 基本介绍 赫夫曼编码(Huffman Coding) 是 Huffman 于 1952 年提出一种编码方法,称之为最佳编码,属于一种程序算法。 赫夫曼编码是 {赫夫曼树} 在电讯通信中的经典的应用之一,赫夫曼编码广泛地用于数据文件压缩,其压缩率通常在 20%~90% 之间。赫夫曼码是可变字长编 阅读全文
posted @ 2020-02-18 20:57 tree6x7 阅读(289) 评论(0) 推荐(0) 编辑
摘要:1. 几个重要概念 1.1 路径和路径长度 路径:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路; 路径长度:通路中分支的数目;若规定根结点的层数为 1,则从根结点到第 L 层结点的路径长度为 L-1。 1.2 结点的权及带权路径长度 结点的权:将树中结点赋给一个有着某种含义的数值; 阅读全文
posted @ 2020-02-18 20:54 tree6x7 阅读(130) 评论(0) 推荐(0) 编辑
摘要:1. 引入 2. 基本介绍 n 个结点的二叉链表中含有 n+1 个空指针域 利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索") 一个结点的前一个结点,称为“前驱结点” 一个结点的后一个结点,称为“后继结点” 这种加上了线索的二叉链表称为线索链 阅读全文
posted @ 2020-02-18 20:53 tree6x7 阅读(143) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩