摘要: 堆,我们可以把它看做是一个完全二叉树(本质不是完全二叉树),一般分为大顶堆和小顶堆。在堆排序中大顶堆用于从小到大的排列,小顶堆用于从大到小的排列。堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。 大致的步骤: 堆排序每次从最后一个非叶子节点开始,比较根与两 阅读全文
posted @ 2018-03-07 18:01 javier_macro 阅读(148) 评论(0) 推荐(0)
摘要: 二叉树遍历有先序、中序和后序三种遍历方式。 先序:根左右 中序:左根右 后序:左右根 给出树的根节点后可根据递归求得不同的序列,这方面不是这的重点先按下不表。 这里的重点在于如何在知道了二叉树的2种遍历序列的基础上求得第3种遍历序列。这里有两种方法,一种是采用线段数的做法,第二种是采用建树的做法。 阅读全文
posted @ 2018-03-07 17:12 javier_macro 阅读(589) 评论(0) 推荐(0)
摘要: 这个问题我是在PAT大区赛题里遇见的。题目如下: 多项式A除以B(25 分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式。你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数。 输入格式: 输入分两行,每行给出一个非零多项式,先给出A,再给出B。每行的格式如下: N e[1 阅读全文
posted @ 2018-03-05 22:31 javier_macro 阅读(2145) 评论(0) 推荐(0)
摘要: 第一次接触到并查集是我学习Kruskal算法的时候。因为要求解最小生成树,所以开始的需要把每个点都看成单独的个体,之后把有联系且距离最小的点不断并入集合,过程中不可出现回路。这个过程我们就是通过并查集来解决的。Kruskal算法我先按下不表,先来仔细回顾一下并查集。 并查集一般用于求解几个个体之间的 阅读全文
posted @ 2018-03-03 21:27 javier_macro 阅读(146) 评论(0) 推荐(0)
摘要: BFS的最好理解就是“层次遍历”,他是一层层往下走的。时间复杂度同DFS。 重点在于使用队列来缓存要遍历的结点。 给出核心代码(c++):使用STL中的queue,vex[v][vi] is adjacent matrix BFS可以推广到三维数组,用于计算由像素块组成的三维不规则物体体积、三维物体 阅读全文
posted @ 2018-03-03 19:50 javier_macro 阅读(207) 评论(0) 推荐(0)
摘要: 所谓DFS就是“不撞南墙不回头”的一种搜索。其时间复杂度为O(V+E)。 能算出从起点到终点的全部路径,在算法执行的过程中需要一个visit[vi]数组来维护每个结点的访问情况,这样就能避免重复访问。但需要注意的是对于同一起点到同一终点有多条路径的时候,每次递归回溯时要重置visit[vi]的状态。 阅读全文
posted @ 2018-03-03 17:48 javier_macro 阅读(227) 评论(0) 推荐(0)