算法
皮皮攻城狮
写博客的目的是记录生活的点点滴滴,与大家共享知识,记录解决每一个小小的问题。
方便我自己,也方便大家!这是初心!
展开
-
KMP算法, 什么是KMP算法 ,暴力匹配 ,KMP算法实现
KMP是Knuth、Morris和Pratt首字母的缩写,KMP也是由这三位学者发明(1977年联合发表论文)。KMP主要应用在字符串的匹配,是一个解决模式串在文本串是否出现过,如果出现过,得出最早出现的位置的经典算法。其主要思想是:当出现字符串不匹配时,可以知道之前已经匹配的文本内容,可以利用这些信息避免从头再去匹配,从而提高匹配效率。因此如何记录已经匹配的文本内容,才是KMP的重点~这也使得next数组派上了用场。KMP算法。原创 2023-12-16 10:11:26 · 1004 阅读 · 0 评论 -
动态规划算法
即对于给定的 n 个物品,设 v[i]、w[i]分别为第 i 个物品的价值和重量,C 为背包的容量。1、背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。3、与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )2、动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。原创 2023-12-16 10:09:59 · 532 阅读 · 0 评论 -
使用Java实现汉诺塔问题
移完这些金片需要 5845.54 亿年以上,太阳系的预期寿命据说也就是数百亿年。真的过了 5845.54 亿年,地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着。2、如果盘子的数量 n >= 2,我就可以看做是两个盘子。1、如果只有一个盘,直接可以A->C。把B塔的所有盘从B->C。原创 2023-12-10 11:19:08 · 363 阅读 · 2 评论 -
了解一下分治算法
(Divide-and-Conquer)是一种很重要的算法。字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。原创 2023-12-10 11:17:18 · 355 阅读 · 1 评论 -
使用Java实现基数排序算法
(2)排序过程:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。(1)基本思想:将整数按位数切割成不同的数字,然后按每个位数分别比较。原创 2023-12-10 11:16:22 · 537 阅读 · 1 评论 -
使用Java实现桶排序算法
把数组 arr 划分为 n 个大小相同子区间(桶),每个子区间各自排序,最后合并。计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况。原创 2023-12-10 11:15:09 · 640 阅读 · 1 评论 -
Java实现归并排序算法
(1)基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。(2)归并排序:是建立在归并操作上的一种有效,稳定的排序算法。原创 2023-12-09 10:28:50 · 446 阅读 · 2 评论 -
Java实现希尔排序算法
(1)基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。原创 2023-12-09 10:27:56 · 367 阅读 · 0 评论 -
Java实现快速排序算法
(1)概念:快速排序是指通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。整个排序过程可以递归进行,以此达到整个数据变成有序序列。选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。原创 2023-12-09 10:27:19 · 541 阅读 · 1 评论 -
Java实现插入排序算法
插入排序就类似于斗地主时,整理扑克牌的情况。第一次摸牌时,左收是空的,之后每次摸牌插入到左手的牌时,都会将这张牌和左手中已经排好序的牌,从右到左比较,确认这张牌该放的位置。:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。原创 2023-12-09 10:26:41 · 359 阅读 · 0 评论 -
Java实现插入排序算法
插入排序就类似于斗地主时,整理扑克牌的情况。第一次摸牌时,左收是空的,之后每次摸牌插入到左手的牌时,都会将这张牌和左手中已经排好序的牌,从右到左比较,确认这张牌该放的位置。:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。原创 2023-12-09 10:24:21 · 385 阅读 · 0 评论 -
java实现冒泡排序算法
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。如果第一个比第二个大,就交换他们两个。针对所有的元素重复以上的步骤,除了最后一个。原创 2023-12-09 10:23:43 · 530 阅读 · 0 评论 -
Java实现二分法的案例,什么是二分法
二分法(Bisection method) 即一分为二的方法,又叫折半查找方法。把一组有序数列分为左右两部分,从这组数字的中间位置开始找:如果中间位置的数等于目标数,则直接返回;如果中间位置的数大于目标数,则从左边部分查找;如果小于目标数,则从右边部分查找;重复以上过程,直到找到满足条件的记录,使查找成功。时间复杂度:都是O(log2 N)空间复杂度:非递归方式: 空间复杂度是O(1);O(log2N )原创 2023-12-08 22:15:54 · 432 阅读 · 0 评论 -
Java来实现二叉树算法,将一个二叉树左右倒置(左右孩子节点互换)
今天来和大家谈谈常用的二叉树算法。原创 2023-12-08 22:14:42 · 654 阅读 · 0 评论 -
Java当中常用的算法
KMP是Knuth、Morris和Pratt首字母的缩写,KMP也是由这三位学者发明(1977年联合发表论文)。KMP主要应用在字符串的匹配,是一个解决模式串在文本串是否出现过,如果出现过,得出最早出现的位置的经典算法。其主要思想是:当出现字符串不匹配时,可以知道之前已经匹配的文本内容,可以利用这些信息避免从头再去匹配,从而提高匹配效率。因此如何记录已经匹配的文本内容,才是KMP的重点~这也使得next数组派上了用场。KMP算法。原创 2023-12-08 22:11:52 · 1311 阅读 · 1 评论