算法

图的深度、广度优先、最小生成树、最短路径算法(Java版本)

早过忘川 提交于 2020-01-12 01:15:28
介绍 本文提供了图的邻接表、邻接矩阵的Java实现,包括深度优先算法、广度优先算法、prim算法和地杰斯特拉算法。 原理分析 输入图: 深度优先遍历: 广度优先遍历: 注意 :邻接矩阵和邻接表同样的输入遍历的结果可能会不完全一样,原因邻接表的构造并非将小编号的结点连接在靠前的位置,因此导致遍历结果和邻接矩阵不相同,但其在逻辑上仍然满足图的深度优先遍历。另外,最小生成树和最短路径当图中存在两条相同长度的路径时,其结果也不一定唯一。 算法描述 包结构: import java . util . List ; public interface Graph { public void dfsTraverse ( ) ; //深度优先遍历 public void bfsTraverse ( ) ; //广度优先遍历 public List < String > prim ( ) ; //prim算法 public List < String > dijistra ( int v1 , int v2 ) ; //地杰斯特拉算法 } import java . util . ArrayList ; import java . util . List ; import java . util . Scanner ; /** * 使用邻接表 */ public class AGraph

梯度下降法的优化算法

泄露秘密 提交于 2020-01-11 22:03:06
如前文 梯度下降法 中所介绍的,梯度下降法存在如下问题导致其迭代的可行性和效率大打折扣: (1)梯度不存在; (2)非凸函数的鞍点和局部最优解; (3)函数的信息利用率不高; (4)学习率需预设且取值固定。 本文提到的梯度下降法的优化算法指:针对问题(2)、(3)和(4)提出的基于梯度下降法的Moment、AdaGrad和Adam等一系列算法。而这系列算法的核心改良思路包括两点: (1)通过引入历史迭代点的信息,对当前点的梯度值进行修正。 (2)通过引入历史迭代点的信息,对当前点的学习率进行修正。 1. 常见的梯度下降法的优化算法 1.1. SGD+Momentum Momentum(动量)的灵感和效果非常类似于物理学里的动量项:如果迭代点在梯度为0处保持一定的速度(动量),则很有可能会冲破局部最优点或鞍点的束缚进行继续的搜索,从而发现更优的取值。 那么如何设置动量项呢? 通过过往迭代点的历史梯度信息值进行构造! 从数学公式上看,其迭代过程为: v 0 = 0 v t = ρ v t − 1 − α g t − 1 x t = x t − 1 + v t \begin{aligned}&v_0=0\\&v_t=\rho v_{t-1}-\alpha g_{t-1}\\&x_t=x_{t-1}+v_t\end{aligned} ​ v 0 ​ = 0 v t ​ = ρ v t −

简单排序算法(1)

懵懂的女人 提交于 2020-01-11 17:21:47
认识时间复杂度 常数时间的操作 一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。 时间复杂度为一个算法流程中,常数操作数量的一个指标。常用0(读作big 0)来表示。具体 来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作, 进而总结出常数操作数量的表达式。 在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果为千(N),那 么时间复杂度为。(f(N))。 评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行 时间,也就是“常数项时间”。 选择排序、冒泡排序细节的讲解与复杂度分析 时间复杂度0(N^2),额外空间复杂度0(1) 插入排序细节的讲解与复杂度分析 时间复杂度0(N^2),额外空间复杂度0(1) 算法流程按照最差情况来估计时间复杂度 二分法的详解与扩展 1) 在一个有序数组中,找某个数是否存在 2) 在一个有序数组中,找>=某个数最左侧的位置 3) 局部最小值问题 异或运算的性质与扩展 1) 0^N == N N^N == 0 2) 异或运算满足交换律和结合率 3) 不用额外变量交换两个数 4) 一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到这一个数 5) 一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到这两个数 对数器的概念和使用 1

haproxy调度算法详解二

巧了我就是萌 提交于 2020-01-11 16:31:10
uri 基于对用户请求的uri做hash并将请求转发到后端指定服务器,也可以通过map-based和consistent定义使用取模法还是一致性hash。 http://example.org/absolute/URI/with/absolute/path/to/resource.txt #URI/URL;对于网络来讲既是URL也是URI ftp://example.org/resource.txt #URI/URL /relative/URI/with/absolute/path/to/resource.txt #URI;对于服务器来讲,只是URI uri 一致性hash配置 根据uri做hash运算,用于缓存服务器 listen yewu-service-80 bind 192.168.38.37:80 mode http balance uri #根据用户请求的uri进行调度;uri是属于应用层,所以mode后面的协议类型必须为http协议 hash-type consistent option forwardfor server web1 192.168.38.27:80 weight 1 check inter 3000 fall 3 rise 5 server web2 192.168.38.47:80 weight 1 check inter 3000 fall 3

吴军博士的《数学之美》(摘录)

戏子无情 提交于 2020-01-11 13:08:16
说明:以下内容是我从这本书中挑选出来,对我的思维和思想有所启发的。在 这里分享给大家。 从希腊哲学家到现代物理学的整个科学史中,不断有人力图把表面上极为复杂的自然现象归结为几个简单的基本概念和关系。——爱因斯坦 设计原理:简单性和模块化是软件工程的基石;分布式和容错性是互联网的生命。 不同文字系统在记录信息上的能力是等价的。进一步讲,文字只是信息的载体,而非信息本身。不用文字,用其他的载体(数字)也可以存储同样意义的信息。——现代通信的基础。 罗塞塔石碑的意义: 信息的冗余是信息安全的保障。 语言的数据(语料),尤其是双语或者多语的对照语料对翻译至关重要,是从事机器翻译的基础。 阿拉伯数字的发明者是印度人。有阿拉伯人将其发扬光大。 罗马体系的拼音文字中,总体来讲,常用字短,生僻字长。而在汉字中,大多常用字笔画少,生僻字笔画多。这完全符合信息论中最短编码原理,同时给书写带来了省时间和省材料。 任何一种语言都是一种编码方式,而语言的语法规则是编解码的算法。我们把一个要表达的意思,通过某种语言的一句话表达出来,就是用这种语言的编码方式对头脑中的信息做了一次编码,编码的结果就是一串文字。而如果对方懂得这门语言,就可以用这门语言的解码方式获得说话人的要表达的意思。——语言的数学本质。 让人和机器进行交流,如果人无法判断交流的对象是人或者机器,就说明这个机器智能化了。——图灵测试

数据结构面试题

与世无争的帅哥 提交于 2020-01-11 12:43:46
1. 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 2. 金字塔最小路径之和: 给定一个金字塔形状的二维数组,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 1. 冒泡排序算法(排序算法)、手写快排,讲原理,最好、最坏时间复杂度、空间复杂度 2 写一个快排,说一下快排主要快哉哪里:快在它的思想是分而治之的思想,其实东西都是这个思想,例如分布式、hadoop等。 3. 手写二分查找算法(查找算法) 来源: CSDN 作者: NanciZhao 链接: https://blog.csdn.net/yeziyezi1986/article/details/103934208

java垃圾收集算法介绍

喜欢而已 提交于 2020-01-11 11:54:07
垃圾收集是java中相当重要的一部分,大部分人都把这项技术当作java语言的半生产物。事实上,GC的历史比java久远。本篇文章主要介绍java中的垃圾回收算法,并且由于垃圾收集算法设计大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,所以只是简单介绍。 标记-清除算法 他是java中最基础的收集算法,如同它的名字一样,孙阿法分为“标记”和“清除”两个阶段,首先标记处所有需要回收的对象,在标记完成后统一回收所有被标记的对象。之所以说他是最基础的收集算法是因为后续的收集算法都是基于何种思路并对其不足进行改进而以。 标记-清除算法它的不足有两个:1、效率问题,标记和清除两个过程的效率都不高;2、空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配大对象时,无法找到足够的连续内存而不得不提前出发另一次垃圾收集动作。 标记-清除算法执行过程如下图: 复制算法 复制算法主要为了解决效率问题,他将可用内存按照容量划分为大小相等的两块,每次只使用其中的一块。当这一块内存用完了,就将还存活着的对象复制到另外一块上,然后再把已使用过的内存哦那个贱一次清理掉。这样使得每次都是堆整个半区进行内存回收,内存分配时也就不考虑内存碎片等复杂情况,只要移动堆顶指针,按顺序分配内存即可,实现简单,运行高校。但是这种算法的代价是将内存缩小为原来的一半

机器视觉算法原理与编程实战

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-11 08:49:51
@[机器视觉算法原理与编程实战]机器视觉算法原理与编程实战,halcon 这是一本新书,我买来看看,书本260页,简单翻阅了一下,太low了,说的太浅,我还不如去看看哈利从示例来得有收获。总结,不值 来源: CSDN 作者: shabaobao816 链接: https://blog.csdn.net/shabaobao816/article/details/103915545

图神经网络论文阅读(二) Learning Convolutional Neural Networks for Graphs:ICML2016

▼魔方 西西 提交于 2020-01-11 06:14:04
# Learning Convolutional Neural Networks for Graphs 本文的三位作者都来自德国Heidelberg的NEC Labs Europe,文章提出了一种从图数据中提取局部连接区域的通用方法(PATCHY-SAN),用来解决图神经网络中的经典问题:如何在 大规模 的图上应用卷积?如何将卷积操作泛化到 任意结构 的图?通过实验证明了算法的有效性,并且模型的计算是高效的。 同样,该模型也考虑了两类任务: **图分类。**给定一组图,学习一个函数,该函数可用于未知图的分类和回归问题。任何两个图的节点不一定是对应的。例如,收集的每个图可以模拟一个化合物,而输出可以是一个函数,将看不见的化合物映射到它们对癌细胞的活性水平。 **结点或者边的分类。**给定一个大型图,学习可以用来推断不可见的图属性(如节点类型和丢失的边)的图表示形式。 与之前的模型相比,PATCHY-SAN有如下几个优点: (1).高效。(2).可以可视化观察图的结构。(3).自动生成卷积核,无需特征工程。 接下来就说一说PATCHY-SAN是如何构建的。对于空域卷积操作,本质上就是将非欧式空间的数据经过采样变成欧式数据,本文通过输入的graph的邻域构造适用于固定模式的卷积的receptive fields。但是,**对于许多不同的图来说,结点的结构信息不一致且分布并不规律

knn算法的优缺点

别来无恙 提交于 2020-01-11 05:42:03
简述K近邻算法的优缺点 优点 1、简单,易于理解,易于实现。 2、只需保存训练样本和标记,无需估计参数,无需训练。 3、不易受小错误概率的影响。经理论证明,最近邻的渐进错误率最坏时不超过两倍的贝叶斯错误率,最好时接近或达到贝叶斯错误率。 缺点 1、K的选择不固定。 2、预测结果容易受含噪声数据的影响。 3、当样本不平衡时,新样本的类别偏向训练样本中数量占优的类别,容易导致预测错误。 4、具有较高的计算复杂度和内存消耗,因为对每一个待分类的文本,都要计算它到全体已知样本的距离,才能求得它的K个最近邻。 来源: CSDN 作者: 恰巧偶遇 链接: https://blog.csdn.net/weixin_44420421/article/details/103876730