之前我们介绍过,在一个工程中我们关心两个问题: (1)工程是否顺利进行 (2)整个工程最短时间. 之前我们优先关心的是顶点(AOV),同样我们也可以优先关心边(同理有AOE).(Activity On Edge Network) 看看百度百科上解释: AOE网:Activity on edge network 若在带权的有向图中,以顶点表示事件,以有向边表示活动,边上的权值表示活动的开销(如该活动持续的时间),则此带权的有向图称为AOE网. 如果用AOE网来表示一项工程,那么,仅仅考虑各个子工程…
在网图中,最短路径的概论: 两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,最后一个顶点是终点. 维基百科上面的解释: 这个算法是通过为每个顶点 v 保留目前为止所找到的从s到v的最短路径来工作的. 初始时,原点 s 的路径长度值被赋为 0 (d[s] = 0),若存在能直接到达的边(s,m),则把d[m]设为w(s,m),同时把所有其他(s不能直接到达的)顶点的路径长度设为无穷大,即表示我们不知道任何通向这些顶点的路径(对于 V 中所有顶点 v除 s 和上述 m 外…
之前的Prim算法是基于顶点查找的算法,而Kruskal则是从边入手. 通俗的讲:就是希望通过 边的权值大小 来寻找最小生成树.(所有的边称为边集合,最小生成树形成的过程中的顶点集合称为W) 选取边集合中权值最小的边,查看边的两个顶点是否能和集合W构成环路,若能构成环路,则舍去:否则选取下一条最小权值边重复上一步. 这里需要注意一个问题,我们从最小权值的边开始寻找最小生成树, 判断当即将选入的边的两个顶点是否会和已经在集合中的顶点构成环路,这个是我们需要解决的问题. 先说下Kruskal算法的数…
图: 目录: 1.概念 2.邻接矩阵(结构,深度/广度优先遍历) 3.邻接表(结构,深度/广度优先遍历) 图的基本概念: 数据元素:顶点 1.有穷非空(必须有顶点) 2.顶点之间为边(可空) 无向图:边没有方向,用(vi,vj)表示,(vj,vi)也可. 有向图:边有方向,称为弧,用<vi,vj>表示.vi尾,vj头 简单图:不存在顶点到其自身的边,且同一条边不重复出现. 无向完全图:无向图中,所有的顶点都有边连接. 边的条数:n*(n-1)/2 有向完全图:在有向图中,如果任意两个顶点之间都…
这一篇写有向无环图及其它的应用: 清楚概念: 有向无环图(DAG):一个无环的有向图.通俗的讲就是从一个点沿着有向边出发,无论怎么遍历都不会回到出发点上. 有向无环图是描述一项工程或者系统的进行过程的有效工具,比如办公室,到工商局里面注册的时候,他会提示你一个流程,这个流程就是一个有向无环图. 第一步不做,第二步就做不了. 在其期间关心两个问题: 1.工程是否顺利?(拓扑排序) 2.估算整个工程所必须的最短时间.(关键路径) 拓扑排序: 数学语言:某个集合上的一个偏序得到该集合上的一个全序的操作…
floyd算法: 解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包. 设为从到的只以集合中的节点为中间节点的最短路径的长度. 若最短路径经过点k,则: 若最短路径不经过点k,则. 因此,. 在实际算法中,为了节约空间,可以直接在原来空间上进行迭代,这样空间可降至二维. 我的理解为: folyd算法是每次选定一个点,查看任意两个顶点的距离是否都小于经过这个点之和的距离. 即:假如ABC三个顶点相连,选定C的时候,查AB的距离是否大于 AC…
一个连通图的生成树是一个极小的连通子图,它包含图中全部的顶点(n个顶点),但只有n-1条边. 最小生成树:构造连通网的最小代价(最小权值)生成树. prim算法在严蔚敏树上有解释,但是都是数学语言,很深奥. 最小生成树MST性质:假设N=(V,{E})是一个连通网,U是顶点集V的一个非空子集.若(u,v)是一条具有最小权值(代价)的边, 其中u∈U,v∈V-U,则必存在一颗包含边(u,v)的最小生成树. prim算法过程为: 假设N=(V,{E})是连通图,TE是N上最小生成树中边的集合.算法从…
c/c++求解图的关键路径 critical path 上图表示一个工程,工程以V1为起始子工程,V9为终止子工程. 由图可以看出,要开工V5工程,必须在完成工程V2和V3后才可以. 完成V2需要a1(6)个小时,完成V3需要a2(4)个小时.假设V2和V3同时开工,V3就会提前2个小时完工,但是这时V2还没有完工,所以V5还不能开始.所以为了要开工V5必须V2要完成,V3即使晚开工2个小时,也不会耽误V5的开工,所以V2就是V5的 关键路径(Critical Path). 有2个问题:(1)完…
周末抽时间整理下算法,完整导图可点击下面链接获取. 点我看完整算法导图 八种排序算法的php实现 代码如下 拷贝后可直接运行 先上个运行后的图 代码:(有的自己些的 有的根据网友整理) <?php /** * Created by PhpStorm. * User: 百年黄沙 * Date: 2019/7/28/0020 * Time: 16:21:33 */ /** * Class Sort */ class Sort { /** * 直接选择排序 * * 选出剩余最小值放在左边 * 递归 *…
FROM:  http://hi.baidu.com/chenwenwen0210/item/482c84396476f0e02f8ec230 #include<stdio.h> #include<math.h> #include<string.h> #include<map> #include<algorithm> #include<queue> using namespace std; typedef __int64 lld;  …
插入排序: 在<算法导论>中是这样描述的 这是一个对少量元素进行排序的有效算法.插入排序的工作机理与打牌时候,整理手中的牌做法差不多. 在开始摸牌时,我们的左手是空的,牌面朝下放在桌子上.接着,一次从桌子上摸起一张牌,并将它插入到左手一把牌中的正确位子上. 为了找到这个正确的位置,要将它与手中已有的每一张牌从右到左进行比较,无论什么时候,左手的牌都是排好序的. 算法思想: 将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数加1的有序表. 图解: 每一张图都是一个for循环.红色和绿…
冒泡排序应该是最常用的排序方法,我接触的第一个排序算法就是冒泡,老师也经常那这个做例子. 冒泡排序是一种交换排序, 基本思想: 通过两两比较相邻的记录,若反序则交换,知道没有反序的记录为止. 例子: 依次类推.这里可以看出,每次比较从最后一个开始,向前比较,若反序则交换: 每次都保证了是两两相邻的记录比较. 冒泡排序的代码: void bubble_sort (myDataType *ary,int len) { int i,j; ;i<len;i++) { ;j>=i;j--) { ]) {…
最近做项目需要用到PID算法,这个本来是我的专业(控制理论与控制工程),可是我好像是把这个东西全部还给老师了. 没办法,只好抽时间来学习了. 先占个座,后续将持续更新!…
排序二叉树对于我们寻找无序序列中的元素的效率有了大大的提高.查找的最差情况是树的高度.这里就有问题了,将无序数列转化为 二叉排序树的时候,树的结构是非常依赖无序序列的顺序,这样会出现极端的情况. [如图1]: 这样的一颗二叉排序树就是一颗比较极端的情况.我们在查找时候,效率依赖树的高度,所以不希望这样极端情况出现,而是希望元素比较均匀 的分布在根节点两端. 技术参考:fun4257.com/ 问题提出: 能不能有一种方法,使得我们的二叉排序树不依赖无序序列的顺序,也能使得我们得到的二叉排序树是比…
以前有个游戏,一方写一个数字,另一方猜这个数字.比如0-100内一个数字,看谁猜中用的次数少. 这个里面用折半思想猜会大大减少次数. 步骤:(加入数字为9) 1.因为数字的范围是0-100,所以第一次猜50(100的一半) 2.缩小范围到0-50,根据对方回应数大了,再猜25(50的一半) 3.缩小范围到0-25,对方回应数大了,再猜13 4.缩小范围到0-13,对方回应数大了,再猜7 5.缩小范围到7-13,对方回应数小了,再猜10 6.缩小范围到7-10,对方回应数大了,再猜9,中 真是比较…
二叉排序树 也称为 二叉查找数. 它具有以下性质: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值. 它的左.右子树也分别为二叉排序树. 之前的查找折半查找.斐波那契查找.插值查找的前提条件就是序列为有序,为顺序存储结构.我们在查找一章提过,查找还有动态查找,比如插入和删除操作, 进行这些操作对顺序存储结构效率不那么高.能不能有一种既静态查找效率高,动态查找效率也高呢? 联想之前的堆排序,人们创造出一个堆这样的结构来提…
之前在冒泡排序的附录中提到可以在每次循环时候,不用交换操作,而只需要记录最小值下标,每次循环后交换哨兵与最小值下标的书, 这样可以减少交换操作的时间. 这种方法针对冒泡排序中需要频繁交换数组数字而改进. 以此类推... 代码: void selectionSort(myDataType *ary,int len) { int i,j; int mymin; //记录最小值下标 ;i<len;i++) // 哨兵下标 { mymin = i; ;j<len;j++) //欲比较的下标 { if…
icp 算法原理是: 选取目标点云P和源点云Q,按照一定的约束条件,找到最邻近点(pi,qi),然后计算出最优R和t(旋转和平移), 使得误差函数最小,误差函数E(R,t): 基本算法流程: 1.在目标点云P中选取点集pi. 2.在源点云Q中选取对应的点集qi,使得||qi-pi||==min,也就是距离最小,这里的距离为欧氏距离. 3.计算旋转R和t,使得误差函数最小. 4.此时经过步骤3的R旋转和t平移后得到新的点集pi`,pi`=Rpi+t 5.计算pi`到点集qi的平均距离d. 6.如果…
A long-distance telephone company charges its customers by the following rules: Making a long-distance call costs a certain amount per minute, depending on the time of day when the call is made. When a customer starts connecting a long-distance call,…
To evaluate the performance of our first year CS majored students, we consider their grades of three courses only: C - C Programming Language, M - Mathematics (Calculus or Linear Algrbra), and E - English. At the mean time, we encourage students by e…
Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test. Now it i…
About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about people's talent and virtue. According to his theory, a man being outstanding in both talent and virtue must be a "sage(圣人)"; being less excellent…
Java 8 学习记录 官方文档 https://docs.oracle.com/javase/8/ https://docs.oracle.com/javase/8/docs/index.html https://docs.oracle.com/javase/tutorial/index.html…
Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题.不同的算法可能用不同的时间.空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 一…
# -*- coding: utf-8 -*- ''' Created on 2018年3月11日 @author: Jason niu ''' import hashlib #该模块实现了诸多安全哈希和消息摘要算法的通用接口,包括 FIPS 安全哈希算法: SHA1.SHA224. SHA256.SHA384.RSA的 MD5 等等算法 import uuid #通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯…
学习计划 2019年计划 1.学习计算机基础,并加以实践.包括LeetCode刷题.数据库原理(索引和锁.Sql优化等).网络协议(Http.Tcp).操作系统(加深Linux).<Http权威指南>.<操作系统设计与实现 >(重点!) 2.巩固java基础.重点加深多线程.并发.Jvm.NIO.多温习<深入理解Java虚拟机>(重点!) 3.阅读Spring源码,Mybatis源码,体会设计模式.可以配合博客.书籍去理解源码. 4.提高技术深度.包括微服务Spring…
前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体理解为,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法结构即可冲定义该算法的某些特定步骤.模板方法模式是最为常见的设计模式之一,是基于继承的代码复用技术.架构师定义一套骨架,开发工程师按照骨架去实现具体的逻辑. 举例 在具体的项目中其实使用模板方法的场景有很多…
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 插入排序 Insertion sort O(N*N) 逐一取出元素,在已经排序的元素序列中从后向前扫描,放到适当的位置 起初,已经排序的元素序列为空 选择排序 O(N*N) 首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾.以…
dijkstra算法学习 一.最短路径 单源最短路径:计算源点到其他各顶点的最短路径的长度 全局最短路径:图中任意两点的最短路径 Dijkstra.Bellman-Ford.SPFA求单源最短路径 Floyed可以求全局最短路径,但是效率比较低 SPFA算法是Bellman-Ford算法的队列优化 Dijkstra算法不能求带负权边的最短路径,而SPFA算法.Bellman-Ford算法.Floyd-Warshall可以求带负权边的最短路径. Bellman-Ford算法的核心代码只有4行,Fl…
转自 此文虽为转载,但博主的网络流就是从这开始的,认为写的不错 网络流基本概念 什么是网络流 在一个有向图上选择一个源点,一个汇点,每一条边上都有一个流量上限(以下称为容量),即经过这条边的流量不能超过这个上界,同时,除源点和汇点外,所有点的入流和出流都相等,而源点只有流出的流,汇点只有汇入的流.这样的图叫做网络流. 所谓网络或容量网络指的是一个连通的赋权有向图 D= (V.E.C) , 其中V 是该图的顶点集,E是有向边(即弧)集,C是弧上的容量.此外顶点集中包括一个起点和一个终点.网络上的流…