摘要:
1.应用场景-最短路径问题 看一个应用场景和问题: 1)战争时期,胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从G点出发,需要分别把邮件分别送到 A, B, C , D, E, F 六个村庄 2)各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里 3) 阅读全文
摘要:
1.应用场景-公交站问题 1)某城市新增7个站点(A, B, C, D, E, F, G) ,现在需要修路把7个站点连通 2)各个站点的距离用边线表示(权) ,比如 A – B 距离 12公里 3)问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短? 2.克鲁斯卡尔算法介绍 1)克鲁斯卡尔 阅读全文
摘要:
1.应用场景-修路问题 看一个应用场景和问题: 1)有胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通 2)各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里 3)问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 思路: 将10条边 阅读全文
摘要:
1.应用场景-集合覆盖问题 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号 2.贪心算法介绍 1)贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法 阅读全文
摘要:
1.应用场景-字符串匹配问题 字符串匹配问题:: 1)有一个字符串 str1= ""算算法 算法你算 算法你算法你算你好"",和一个子串 str2="算法你算" 2)现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1 2.暴力匹配算法 如果用暴力匹配 阅读全文
摘要:
1.应用场景-背包问题 背包问题:有一个背包,容量为4磅 ,现有如下物品 1)要求达到的目标为装入的背包的总价值最大,并且重量不超出 2)要求装入的物品不能重复 2.动态规划算法介绍 1)动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取 阅读全文
摘要:
1.分治算法介绍 1)分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序,傅立叶变换( 阅读全文
摘要:
1.二分查找算法(非递归)介绍 我们讲过了二分查找算法,是使用递归的方式; 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 二分查找法的运行时间为对数时间O(㏒₂n),即查找到需要的目标位置最多只需要㏒₂n步,假设从[0,99]的队列(100个数,即n=100) 阅读全文
摘要:
1.广度优先遍历基本思想 图的广度优先搜索(Broad First Search) 。 类似于一个分层搜索的过程,广度优先遍历需要使用一个队列以保持访问过的结点的顺序,以便按这个顺序来访问这些结点的邻接结点。 2.广度优先遍历算法步骤 1)访问初始结点v并标记结点v为已访问。 2)结点v入队列 3) 阅读全文
摘要:
1.图遍历介绍 所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历 2.深度优先遍历基本思想 图的深度优先搜索(Depth First Search) 。 1)深度优先遍历,从初始访问结点出发,初始访问结 阅读全文