摘要: 一、n的欧拉phi函数值 思路:需要用试除法依次判断√n内的素数,这样需要先生成√n内的素数表,但其实不必这么麻烦:只需要每次找到一个素因数之后把它“除尽”,即可保证找到的因数都是素数(假如当前找到的因素不是素数,则存在更小的因数,与“除尽“矛盾) O(√n) 二、1~n中所有数的欧拉phi函数值 阅读全文
posted @ 2018-09-09 11:36 Rogn 阅读(913) 评论(0) 推荐(0)
摘要: 一、判断单链表是否存在环 这个问题有很多方法,最容易想到的就是记录每个节点记录的次数。这里也介绍的是另一种简单而常见的方法 快慢指针法: 定义两个指针slow, fast。slow指针一次走1个结点,fast指针一次走2个结点。如果链表中有环,那么慢指针一定会再某一个时刻追上快指针(slow == 阅读全文
posted @ 2018-09-08 23:33 Rogn 阅读(1757) 评论(0) 推荐(0)
摘要: 最小生成树算法 Kruskal+并查集 O(ElogE) 阅读全文
posted @ 2018-08-27 21:23 Rogn 阅读(237) 评论(0) 推荐(0)
摘要: 一、最小生成树 在无向图中,连通且不含圈的图称为树(Tree)。给定无向图G=(V,E),连接G中所有点,且边集是E的子集的树称为G的生成树(Spanning Tree),而权值最小的生成树称为最小生成树(Minning Spanning Tree,MST)。 二、Kruskal 步骤: 1、将所有 阅读全文
posted @ 2018-08-27 19:41 Rogn 阅读(435) 评论(0) 推荐(0)
摘要: 介绍: 是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包。 Floyd-Warshall算法的时间复杂度是O(N3),空间复杂度O(N2)。 原理: Floyd-Warshall算法的原理是动态规划。 用fk(i,j 阅读全文
posted @ 2018-08-25 23:41 Rogn 阅读(614) 评论(0) 推荐(0)
摘要: 单源最短路 Dijkstra + 邻接矩阵 O(V2 + E) Dijkstra + STL priority_queue + 链式前向星 O((V + E)lgV) Dijkstra + STL priority_queue + 邻接表 O((V + E)lgV) Bellman-Ford O(V 阅读全文
posted @ 2018-08-25 22:10 Rogn 阅读(514) 评论(0) 推荐(0)
摘要: 一、Bellman-Ford Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(当然也可以是无向图)。与Dijkstra相比的优点是,也适合存在负权的图。 若存在最短路(不含负环时),可用Bellman-Ford求出,若最短路不存在时,Bellman-Ford只能用来判断是否存在 阅读全文
posted @ 2018-08-25 18:11 Rogn 阅读(5893) 评论(1) 推荐(5)
摘要: 一、介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他各个节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 适用于有向图和无向图,但不能有边权为负的情况。 二、基本思想 通过Dijkstra计算图G中的最短路径时,需 阅读全文
posted @ 2018-08-22 11:50 Rogn 阅读(1497) 评论(3) 推荐(0)
摘要: 一、题目, 输入一个树状数组,根据力矩相等原则判断是否平衡。采用递归方式输入(先序):每个天平的格式为Wl, Dl ,Wr ,Dr,当Wl或Wr为0时, 表示该“砝码”实际是一个子天平,接下来会描述这个子天平。 当Wl = Wr = 0时,会先描述左子天平,再描述右子天平。 二、解题思路 题目的输入 阅读全文
posted @ 2018-08-20 12:41 Rogn 阅读(480) 评论(0) 推荐(0)
摘要: 一、二叉树的定义 二叉树(Binary Tree)的递归定义:二叉树要么为空,要么由根节点(root)、左子树(left subtree)和右子树(right subtree)组成,而左子书和右子树分别是一颗二叉树。注意,在计算机中,树一般是"倒置"的,即根在上,叶子在下。 二、二叉树的层次遍历 三 阅读全文
posted @ 2018-08-20 12:05 Rogn 阅读(2244) 评论(0) 推荐(0)