-
面试算法:斐波那契数列时间复杂度为 O(1) 的解法,你会吗?
题目
今天,我们就重新学习一下,这个每一位学习过递归的同学都见过的题目—斐波那契数列。
但是,你真的理解这个数列了吗?
509. 斐波那契数
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。
该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。
也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2)...
2020-01-23 02:09:32 |
Data-Struct
-
五大基本算法之分治算法 Divided
分治算法
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。
求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。
基本思想
当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。
对于这类问题,我们往往先把它分解成几个子...
2020-01-23 02:09:32 |
Data-Struct
-
五大基本算法之回溯算法 backtracking
面试算法:回溯算法与分割回文串实战
回溯算法
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。
回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。
但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯...
2020-01-23 02:09:32 |
Data-Struct
-
viterbi 算法:利用动态规划寻找最短路径
动态规划原理
基本思想:问题的最优解如果可以由子问题的最优解推导得到,则可以先求解子问题的最优解,在构造原问题的最优解;若子问题有较多的重复出现,则可以自底向上从最终子问题向原问题逐步求解。
使用条件
可分为多个相关子问题,子问题的解被重复使用
Optimal substructure(优化子结构):
一个问题的优化解包含了子问题的优化解
缩小子问题集合,只需那些优化问题中包含的...
2020-01-23 02:09:32 |
Data-Struct
-
遗传算法详解
前言
说一说跨学库的东西。
生物学中的进化论可谓无人不知,无人不晓。
数学中的梯度下降和牛顿迭代,收敛的效果能否进一步优化呢?
这也使我想起来以前阅读的两本书《失控》和《超级智能》
什么是遗传算法?
遗传算法的科学定义
遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解...
2020-01-23 02:09:32 |
Data-Struct
-
图最短路径算法之弗洛伊德算法(Floyd)
Floyd算法
定义概览
Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。
Floyd-Warshall算法的时间复杂度为O(N^3),空间复杂度为O(N^2)。
算法描述
1) 算法思想原理:
Floyd算法是一个经典的动态规划算法...
2020-01-23 02:09:32 |
Data-Struct
-
图最短路径算法之迪杰斯特拉算法(Dijkstra)
问题定义
求解单元点的最短路径问题:给定带权有向图G和源点v,求v到G中其他顶点的最短路径
限制条件:图G中不存在负权值的边(这个可以通过弗洛伊德算法,后期将进行讲解)
核心思想
设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法...
2020-01-23 02:09:32 |
Data-Struct
-
java 实现有向图(Direct Graph)
基本概念
图
图是数据结构中最为复杂的一种,我在上大学的时候,图的这一章会被老师划到考试范围之外,作为我们的课后兴趣部分。
但实际上,图在信息化社会中的应用非常广泛。图主要包括:
无向图,结点的简单连接
有向图,连接有方向性
加权图,连接带有权值
加权有向图,连接既有方向性,又带有权值
图是由一组顶...
2020-01-23 02:09:32 |
Data-Struct