算法与数据结构
lilong117194
“The world is not made of strings , but is made of things.”
展开
-
狄克斯特拉算法(入门)
狄克斯特拉算法可以找出加权图中前往X的最短路径。注意: - 其只适用于有向无环图 - 适用于正权边,负权边的将出错(贝尔曼—福德算法适用于负权边)步骤:找出当前最“便宜”的节点,即可在最短时间内前往的节点对于该节点的邻居,检查是否有经当前节点前往他们的更短的路径,如果有,经更新其开销重复这个过程,直到对图中的每个节点都这样做了计算最终得路径实例:# coding=utf-8# 图表原创 2017-08-26 23:49:00 · 856 阅读 · 0 评论 -
广度优先搜索(入门)
这里给出一个广度优先算法的简单实例,得到的是有没有所要求的目标。。# coding=utf-8from collections import dequedef person_is_seller(name): return name[-1] == 'm' # 判断是否是以'm'结尾graph = {} # 此处的排序是按照图的关系排序的graph["you"] = ["alice",原创 2017-08-26 15:16:06 · 565 阅读 · 0 评论 -
递归调用栈
递归函数也使用调用栈,下面是计算阶乘的递归函数。def fact(x): if x==1: return 1 else: return x*fact(x-1)print fact(3)下面详细分析调用fact(3)时调用栈是如何变化的流程图。注意:每个fact调用都有自己的x变量,在一个函数调用中不能访问另一个x变量。原创 2017-08-27 13:59:11 · 3222 阅读 · 0 评论 -
贪婪算法近似集合覆盖问题的解
实例: 假设你办了个广播节目,要让全美50个州的听众都听到。为次,你需要决定哪些广播台播出。在每个广播台播出都需要支付费用,因此你要尽可能少的在广播台播出。。其中每个广播台覆盖特定的区域,不同广播台的覆盖区域可能重叠这样的话要遍历所有的可能的子集合组合,就有2n2^n,其中n为广播台数目,用大O表示法运行时间为O(2n)O(2^n)。如果广播台很多,就成了一个NP难问题,而贪婪算法可以得到非常接近原创 2017-08-28 21:43:59 · 10813 阅读 · 1 评论 -
二叉树的构建和遍历
通过数组来构造二叉树思路:1)将数组元素转换成Node节点。2)用LinkedList数据结构存储Node节点。3)分别处理前n-1个父节点和最后1个父节点,因为最后一个父节点可能没有右孩子。4)父节点索引与左右孩子索引的关系:左孩子索引=父节点索引2+1;右孩子索引=父节点索引2+2;...原创 2018-11-07 19:50:01 · 1199 阅读 · 1 评论