数据结构与算法
三月江东
这个作者很懒,什么都没留下…
展开
-
贪心算法——集合覆盖问题
假设在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区都可以接收到信号。原创 2022-07-18 12:12:22 · 709 阅读 · 3 评论 -
KMP算法——字符串匹配问题
KMP 算法是一个解决模式串在文本串是否出现过,如果出现过,输出最早出现位置的经典算法。Knuth-Morris-Pratt 字符串查找算法,简称为“ KMP算法 ”,常用于在一个文本串 S 内查找一个模式串 P 出现的位置。KMP 算法就利用之前判断过信息,通过一个 next 数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过 next 数组找到,前面匹配过的位置,省去了大量的时间......原创 2022-07-18 12:11:31 · 344 阅读 · 0 评论 -
动态规划——背包问题(Knapsack Problem)入门
背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。其中又分01背包和完全背包(完全背包指的是:每种物品都有无限件可用)原创 2022-07-16 11:16:26 · 815 阅读 · 0 评论 -
分治算法——汉诺塔(HanoiTower)
分治算法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题···直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅里叶变换(快速傅里叶变换)···...原创 2022-07-15 12:01:08 · 969 阅读 · 0 评论 -
数据结构——图的创建以及遍历
图是一种数据结构,其中节点可以具有零个或多个相邻元素。两个节点之间的连接称为边。节点也可以称为顶点为什么要有图图的常用概念图的表示方式 图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)邻接矩阵 邻接矩阵是表示图形中顶点之间相邻关系的矩阵邻接表代码演示12.3 图的遍历图遍历的介绍 所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:图的深度优先遍历(Depth First Search)深度优先遍历算法步骤核心代码12.3原创 2022-07-14 10:48:39 · 4631 阅读 · 0 评论 -
哈希表(Hash table)
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表 有一个公司,当有新员工来报道时,要求该员工的信息加入(id,性别,年龄···),当输入该员工的 id 时,要求查找到该员工的所有信息要求 不使用数据库,速度越快越好 => 哈希表(散列)...原创 2022-07-11 17:22:09 · 209 阅读 · 0 评论 -
JAVA常用查找算法
在 JAVA 中,常用的查找有四种9.3 二分查找(Binary Search)注意! 二分查找仅适用于有序数组!思路分析代码演示9.4 插值查找(Interpolation Search)插值查找原理介绍代码演示插值查找注意事项斐波那契法(黄金分割法)基本介绍斐波那契原理 斐波那契查找原理与前两种相似,仅仅改变了中间节点(mid)的位置,mid不再是中间或者插值得到,而是位于黄金分割点附近,即 对 F(k-1)-1的理解由斐波那契数列 的性质,可以得到 。该式说明:只要顺序表的长度为原创 2022-07-10 11:32:36 · 942 阅读 · 0 评论 -
排序算法——基数排序(Radix Sorting)
基数排序属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort),顾名思义,他是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的目的原创 2022-07-09 16:37:26 · 214 阅读 · 0 评论 -
排序算法——归并排序(Merge Sorting)
介绍 归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治(divide and conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案“修补”在一起,即分而治之)!!!【后期补图】!!!说明 可以看到这种结构很像一棵完全二叉树,本文的归并排序可以采用递归去实现(也可采用迭代的方法去实现)。分阶段可以理解为就是递归拆分子序列的过程代码示例...原创 2022-07-09 16:35:56 · 256 阅读 · 0 评论 -
排序算法——快速排序(Quick Sorting)
介绍 快速排序是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列代码演示...原创 2022-07-09 16:34:26 · 245 阅读 · 0 评论 -
排序算法——希尔排序(Shell Sorting)
简单插入排序存在的问题 当需要插入的数是较小的数时,后移次数明显增多,对效率有影响希尔排序法介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,他是简单插入排序经过改良后的一个更高效的版本,也称为缩小增量排序基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传原创 2022-07-09 16:33:24 · 282 阅读 · 0 评论 -
排序算法——插入排序(Insert Sorting)
基本介绍 插入排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的插入排序法思想 插入排序的基本思想是:把 n 个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把他的排序码依次与有序元素的排序码进行比较,将他插入到有序表中适当的位置,使之称为新的有序表代码示例...原创 2022-07-09 16:32:34 · 692 阅读 · 0 评论 -
排序算法——选择排序法(Select Sorting)
基本介绍 选择排序也属于内部排序法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的选择排序思想 选择排序(Select Sorting)也是一种简单的排序方法。它的基本思想是:第一次从中选出最小值,与arr[0]交换,第二次从中选取最小值,与arr[1]交换,···,第i次从中选取最小值与arr[i-1]交换,总共哦通过 n-1 次,得到一个从小到大排列的有序序列规则代码示例...原创 2022-07-09 16:31:44 · 2755 阅读 · 1 评论 -
排序算法——冒泡排序法(Bubble Sorting)
基本介绍 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),一次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的旗袍一样逐渐向上冒 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明有序,因此要在排序的过程中设置一个标志 FLAG判断元素是否进行过交换。从而减少不必要的比较冒泡排序规则代码示例...原创 2022-07-09 16:30:34 · 443 阅读 · 0 评论 -
迷宫问题(MAZE)
说明:JAVA代码示例:C++代码示例:原创 2022-07-07 23:36:36 · 408 阅读 · 0 评论 -
八皇后问题
八皇后问题介绍 八皇后问题是一个古老而著名的问题,是回溯算法的典型案例。该问题由国际西洋棋棋手马克斯·贝瑟尔于1848年提出。在8*8格的国际象棋上摆放八个皇后,使其不能相互攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法算法思路分析说明: 理论上应该创建一个二维数组来表示棋盘,但是实际上可以通过算法,用一个一维数组即可解决问题。arr[8]={0,4,7,5,2,6,1,3},对应arr下标表示第几行,即第几个皇后,arr[i]=var,var表示第i+1个皇后,放在第i+1原创 2022-07-07 23:33:37 · 210 阅读 · 0 评论 -
数据结构与算法——栈( Stack )
思路分析:4 链表模拟栈思路分析:5 使用栈完成表达式 思路:6 前缀、中缀、后缀表达式(逆波兰表达式)6.1 前缀表达式(波兰表达式)前缀表达式又称波兰表达式,前缀表达式的运算符位于操作数之前举例:对应的前缀表达式就是前缀表达式的计算机求值后缀表达式的计算机求值 我们完成一个逆波兰计算器,要求完成如下任务:6.6.5 中缀表达式转换位后缀表达式 在前面代码实现的过程中,我们发现后缀表达式适合计算机进行运算,但是人却不太容易写出来,尤其是表达式很长的情况下,因此在开发中,我们原创 2022-06-15 10:25:08 · 1936 阅读 · 0 评论 -
数据结构与算法——中缀转后缀表达式以及计算
思路分析:判断运算符优先级逆波兰计算器(后缀表达式的计算)后缀表达式的计算机求值思路:原创 2022-06-15 10:17:34 · 444 阅读 · 0 评论 -
数据结构与算法——约瑟夫环问题(JosephuRing)
设编号为1,2,...,n的n个人围坐一圈,约定编号为k(1原创 2022-06-13 09:43:59 · 899 阅读 · 0 评论 -
数据结构与算法——链表(LinkedList)
1.5 单链表面试题单链表常见的面试题有如下:(2)查找单链表中的倒数第k 个节点(新浪) 思路:(3)单链表的反转(腾讯) 思路:(4)从尾到头打印单链表(百度,要求方式1:反向遍历。方式2:Stack 栈) 思路:2 双链表管理单向列表的缺点分析:分析双向链表的增删改查:...原创 2022-06-13 09:38:24 · 199 阅读 · 0 评论 -
数据结构与算法——队列( Quene )
队列是一个有序列表,可以用**数组**或是**链表**来实现- 遵循**先入先出**的原则。即:先存入队列的数据,要先取出。后存入的要后取出原创 2022-06-11 22:26:13 · 2770 阅读 · 0 评论 -
数据结构与算法——稀疏数组(Sparsearray)
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组原创 2022-06-11 22:18:19 · 89 阅读 · 0 评论