
算法
Shawn Jeon
Contact e-mail: shawnjeon@163.com
展开
-
算法-马踏棋盘算法
马踏棋盘算法概述概述马踏棋盘算法也被称为骑士周游问题, 规则是将马随机放在国际象棋的6x6棋盘(board[05][05])的某个方格中, 马儿走棋规则(马走日字)进行移动, 且每个方格只进入一次, 走遍所有方格代码思路深度优先搜索(Depth First Search): 每当走到尽头未走完所有方格, 便会回退, 也就是会发生大量的回溯使用贪心算法(Greedy algorithm), 优化深度优先搜索时产生的回溯代码实现public class HorseChessbo原创 2020-11-14 19:49:05 · 659 阅读 · 1 评论 -
算法-最短路径算法(弗洛伊德算法 Floyd`s algorithm)
Floyd`s algorithm概述最短路径问题概述弗洛伊德算法(Floyd’s algorithm)也是最短路径算法, 用于计算图中各个顶点之间的最短路径. 与迪杰斯特拉算法(Dijkstra’s algorithm)不同的是, 迪杰斯特拉算法是指定某一个顶点到其它顶点的最短路径, 而弗洛伊德算法是每一个(所有)顶点到其它顶点的最短路径最短路径问题胜利乡有7个村庄(A,B,C,D,E,F,G)各个村庄的距离用边线权值来表示, 比如 A-B距离5公里计算出各个村庄到其它各个村庄的最原创 2020-11-13 19:17:47 · 885 阅读 · 0 评论 -
算法-最短路径算法(迪杰斯特拉算法 Dijkstra`s algorithm)
Dijkstra Algorithm概述最短路径问题概述迪杰斯特拉算法(Dijkstra Algorithm)是最短路径算法, 用于计算一个节点到其它节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想), 直到扩展到终点为止最短路径问题战争时期, 胜利乡有7个村庄(A,B,C,D,E,F,G), 现在有六个邮差, 从 G点出发, 需要分别把邮件分别送到 A,B,C,D,E,F,G六个村庄各个村庄的距离用边线权值来表示, 比如 A-B距离5公里计算出 G村庄到其原创 2020-11-12 20:22:07 · 366 阅读 · 0 评论 -
算法-最小生成树算法(克鲁斯卡尔算法 Kruskal`s algorithm)
Kruskal`s algorithm概述公交站问题概述克鲁斯卡尔算法(Kruskal`s algorithm)也是求最小生成树的算法, 也就是在包含 n个顶点的带权无向连通图中, 找出(n-1)条边的最小耗费生成树(Minimum Cost Spanning Tree), 简称 MST克鲁斯卡尔算法的时间复杂度为 O(eloge) e为网中的边数基本思想: 将所有的边, 按照权值从小到大进行排序, 并保证边的终点不构成回路(指每个边的终点不允许重合)公交站问题某城市有7个居民区(A,B,原创 2020-11-11 20:45:26 · 1533 阅读 · 2 评论 -
算法-最小生成树算法(普里姆算法 Prim`s algorithm)
Prim’s algorithm概述修路问题概述普里姆算法(Prim’s algorithm)是求出最小生成树的算法, 也就是在包含 n个顶点的带权无向连通图中, 找出(n-1)条边的最小耗费生成树(Minimum Cost Spanning Tree), 简称 MST普里姆算法的时间复杂度为: 邻接矩阵 O(v^2), 邻接表 O(elog2v) e为网中的边数修路问题有叫(A,B,C,D,E,F,G)的7个村庄, 现在需要将这7个村庄通过修路连通. 各个村庄的距离用边线权值来表示, 比如原创 2020-11-10 19:54:33 · 3961 阅读 · 1 评论 -
算法-贪心算法(Greedy algorithm)
Greedy Algorithm概述贪心算法最佳应用-集合覆盖两种方式概述贪心算法(Greedy Algorithm), 又称贪婪算法. 此算法对问题进行求解时, 在每一步选择中都采取最好或者最优(即最有利)的选择, 从而希望能够导致结果是最好或者最优的算法贪心算法最佳应用-集合覆盖假设有多个需付费的广播台, 及各个广播台有限制, 只能传递信号到部分区域. 问题: 如何选择最少的广播台, 让所有的地区都可以接收到广播信号广播台可覆盖地区K1北京, 上海, 天津K原创 2020-11-09 20:32:59 · 476 阅读 · 0 评论 -
算法-字符串匹配算法(暴力匹配算法& KMP算法)
Brute Force Match Algorithm& KMP Algorithm暴力匹配算法(Brute Force Match Algorithm)KMP算法(KMP Algorithm)暴力匹配算法(Brute Force Match Algorithm)从原文字符串 str1中匹配, 子字符串 str2如果当前字符匹配成功, 即 str1[i]==str2[j], 则 i++; j++; 继续匹配下一个字符如果当前字符匹配失败, 则 i=i-(j-1); j=0; 也就是每次原创 2020-11-08 17:58:17 · 258 阅读 · 0 评论 -
算法-分治算法& 动态规划算法
Divide and Conquer Algorithm& Dynamic Programming Algorithm分治算法概述分治步骤分治算法最佳实践-汉诺塔动态规划算法概述动态规划算法最佳实践-背包问题分治算法概述分治算法(Divide and Conquer Algorithm)是把一个复杂的问题分成多个小问题, 再继续分成更小的, 直到问题简单到很容易求解为止, 最后将各问题的解合并的算法分治步骤分治法在每一层递归上都有的三个步骤:分解: 将原问题分解为若干个规模较小,原创 2020-11-07 21:30:28 · 239 阅读 · 0 评论 -
算法-赫夫曼编码
Huffman Coding简介3种编码原理代码实现简介赫夫曼编码是可变字长编码(VLC)的一种, 常用于数据文件压缩. 其压缩通常在20%~90%之间3种编码原理在通信领域中信息的处理方式定长编码:变长编码:* 变长编码的缺点是编码格式重叠无法避免, 即不能匹配重复的编码3) 赫夫曼编码:代码实现字符串解压缩public class HuffmanCodeApp { public static void main(String[] args)原创 2020-11-02 19:47:14 · 1357 阅读 · 1 评论 -
算法-查找算法(顺序查找,二分查找,插值查找,斐波那契查找)
Search Algorithm:Sequence Search, Binary Search, Interpolation Search, Fibonacci Search线性查找算法(Sequence Search)二分查找(Binary Search)插值查找(Interpolation Search)斐波那契(黄金分割法)查找(Fibonacci Search)线性查找算法(Sequence Search)又称线性查找时间复杂度为线性阶 O(n)public class Sequenc原创 2020-10-24 20:57:04 · 241 阅读 · 0 评论 -
算法-排序算法(冒泡排序,选择算法,插入排序,希尔排序,快速排序,归并排序,基数排序,堆排序)
Sort Algorithm:Bubble Sort, Selection Sort, Insertion Sort, Shell`s Sort, Quick Sort, Merge Sort, Radix Sort排序算法概述排序的分类冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)希尔排序(Shell`s Sort)快速排序(Quick Sort)归并排序(Merge Sort)基数排序(Radix Sort)排序算法概述排序算法(原创 2020-10-18 16:03:02 · 667 阅读 · 0 评论 -
算法-时间频度& 时间复杂度& 空间复杂度
Temporal Frequency& Time Complexity& Space Complexity计算算法执行时间时间复杂度(Time Complexity)常数阶O(1)对数阶O(log2n)线性阶O(n)线性对数阶O(nlog2n)平方阶O(n2)立方阶O(n^3)k次方阶O(n^k)指数阶O(2^n)空间复杂度(Space Complexity)计算算法执行时间时间频度(Temporal Frequency): 一个算法所花费的时间与算法中语句的执行次数成正比. 算法中的原创 2020-10-15 19:46:48 · 2162 阅读 · 0 评论