因为很多算法思想都基于递归,无论是DFS、树的遍历、分治算法、动态规划等都是递归思想的应用。学会了用递归来解决问题的这种思维方式,再去学习其他的算法思想,无疑是事半功倍的。 递归的本质 无可奈何花落去,似曾相识燕归来。 递归,去的过程叫“递” ,回来的过程叫“归”。 探究递归的本质要从计算机语言的本 ...
分类:
其他好文 时间:
2020-09-18 17:18:38
阅读次数:
36
本文是对leetcode回溯题的一些模板进行整理总结,很多关于回溯的blog都会引用对回溯算法的official definition和通用的解题步骤,如果是真的想研究这一算法思想,按照这样的方式来完全没有问题。不过个人觉得如果仅仅只是为了应试,那么掌握一些解题的模板会更直接的帮助理解回溯的算法思想 ...
分类:
编程语言 时间:
2020-09-17 22:58:48
阅读次数:
37
一、 迪杰斯特拉算法思想Dijkstra算法主要针对的是有向图的单元最短路径问题,且不能出现权值为负的情况!Dijkstra算法类似于贪心算法,其应用根本在于最短路径的最优子结构性质。 最短路径的最优子结构性质:如果P(i,j)={Vi…Vk…Vs…Vj}是从顶点i到j的最短路径,k和s是这条路径上 ...
分类:
编程语言 时间:
2020-09-17 16:40:00
阅读次数:
38
关于垃圾回收算法的这道面试题,几乎是所有3年以上的Java面试中必问的题目,甚至有些好一点的公司会在校招时问到面试者。那么本文就系统的讲一下垃圾回收的算法,和Hotspot虚拟机执行垃圾回收的一些实现细节,比如安全点和安全区域等。因为各个平台的虚拟机操作内存的方法各不相同,且牵扯大量的程序实现细节,所以本文不会过多的讨论算法的具体实现,只会介绍几种算法思想及发展过程。垃圾回收算法1、标记-清除算法
分类:
编程语言 时间:
2020-08-02 10:16:16
阅读次数:
74
前言 上一节通过两个经理案例初步认识动态规划,今天这一节主要讲动态规划的理论知识。 “一个模型三个特征”理论讲解 实际上,动态规划作为一个非常成熟的算法思想,这部分理论总结为“一个模型三个特征”。 一个模型 一个模型指动态规划适合解决的问题模型。这个模型定义为“多阶段决策最优解模型”。 一般是用动态 ...
分类:
编程语言 时间:
2020-07-27 15:39:05
阅读次数:
71
归并排序是一种效率较高的排序方法。本文将先介绍归并排序,然后再简单盘点一下其与快排的一些区别。 ...
分类:
编程语言 时间:
2020-07-27 09:30:05
阅读次数:
74
对于图建立dfs树,这样只存在树边和B边,不会存在横叉边,这也是tarjan算法的思想 建立dfs树后,我们发现任意一条B边都会生成一个环,且所有b边就是所有环 我们进行dfs栈的建立,找到如果存在满足条件的环,那就直接输出 如果不存在,我们证明肯定存在满足条件的独立集。因为根据鸽巢定理,每个点一定 ...
分类:
其他好文 时间:
2020-07-19 23:50:26
阅读次数:
70
Solution: Dijkstra (大概读作:迪杰斯特拉?) 算法思想: 给定一张n个点,m条边的图,起点为s。求起点s到图中所有点的最短路径(单源最短路。dis[i]表示从起点到i的最短距离。vis[i]表示此点是否已被标记确定为最短。 1、初始化dis[s]=0,其余结点dis为正无穷大。 ...
分类:
编程语言 时间:
2020-07-19 00:39:57
阅读次数:
85
简述 Manacher算法,又称马拉车算法,它是用于求一个字符串的最长回文子串长度的算法,时间和空间复杂度为O(n)。 算法思想 求一个字符串的最长回文子串长度,我们如果用暴力来做,我们就要取出这个串的所有子串,然后判断这个子串是不是回文串,复杂度是n方的。 那么马拉车为何如此神奇能做到O(n)呢? ...
分类:
编程语言 时间:
2020-07-17 22:10:08
阅读次数:
116
顺序查找 算法思想 算法实现 算法优化 顺序查找的算法思想 顺序查找,又叫“线性查找”,通常用于线性表 从头到尾查 顺序查找的实现 typedef struct{ //查找表的数据结构(顺序表) ElemType *elem; //动态数组的基址 int TableLen; //表的长度 }SSTa ...
分类:
其他好文 时间:
2020-07-15 23:37:04
阅读次数:
97