算法

BP 算法之一种直观的解释

喜夏-厌秋 提交于 2020-01-10 07:15:11
本文转载自: https://www.cnblogs.com/daniel-d/archive/2013/06/03/3116278.html 作者:daniel-D 转载请注明该声明。 0. 前言 之前上模式识别课程的时候,老师也讲过 MLP 的 BP 算法, 但是 ppt 过得太快,只有一个大概印象。后来课下自己也尝试看了一下 stanford deep learning 的 wiki, 还是感觉似懂非懂,不能形成一个直观的思路。趁着这个机会,我再次 revisit 一下。本文旨在说明对 BP 算法的直观印象,以便迅速写出代码,具体偏理论的链式法则可以参考 我的下一篇博客 (都是图片,没有公式)。 1. LMS 算法 故事可以从线性 model 说起(顺带复习一下)~在线性 model 里面,常见的有感知机学习算法、 LMS 算法等。感知机算法的损失函数是误分类点到 Target 平面的总距离,直观解释如下:当一个实例点被误分,则调整 w, b 的值,使得分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,在 Bishop 的 PRML一书中,有一个非常优雅的图展现了这个过程。但是了解了 MLP 的 BP 算法之后,感觉这个算法与 LMS 有点相通之处。虽然从名字上 MLP 叫做多层感知机,感知机算法是单层感知机。 LMS (Least mean squares)

算法思维----滑动窗口

拜拜、爱过 提交于 2020-01-10 06:44:34
滑动窗口作为一种高级 双指针 技巧的框架,在日常算法中尤其是字符串匹配查询中经常用到。所以总结一下滑动窗口的框架思维。 首先需要熟悉一下滑动窗口常用的数据结构: 哈希表 ,也称为 字典 、 散列表 ,是一种 k => v 结构,这里就不细讲什么是哈希和哈希表了,因为作为基础的数据结构,应该大家都理解。 滑动窗口的思想一般是这样的: 在字符串S中使用双指针的左右指针技巧,初始化 left=right=0 ,我们把索引的闭合区间[left, right]称为一个「窗口」 不断增加right指针的值扩大窗口[left, right],直到窗口中的字符串符合要求(具体根据题意,稍后我们在题中理解) 符合要求后,我们停止增加right,转而增加left指针来缩小窗口[left, right],直到窗口中的字符串不再符合要求(也是根据题意哦)。注意,每次增加left,我们都要更新一轮结果。 重复第2步和第3步,直到right到达字符串S的尽头。 其实这个思路,在第2步相当在寻找一个「可行解」,在第3步 优化 这个「可行解」,最终执行完第4步,在这些可行解中寻找到一个「最优解」。左右指针轮流前进,窗口大小递增递减,窗口不断向右滑动直到尽头。 最小覆盖子串 题目的意思就是要在S中找到包含T中全部字母的一个子串,顺序无所谓,但是这个字串一定是所有可行解中最短的。 设,needs和window为计数器

Java基础之JVM

别等时光非礼了梦想. 提交于 2020-01-10 06:00:26
一、内存模型 1、程序计数器(线程私有) 一块较小的内存空间,是当前线程所指向的字节码的行号指示器。 2、虚拟机栈(线程私有) 是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直至完成的过程,对应着一个栈帧在虚拟机中入栈到出栈的过程。 栈帧 是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接、方法返回值和异常分派。随方法的创建而创建,随着方法结束而销毁 3、本地方法栈(线程私有) 与虚拟机栈作用类似,区别是虚拟机栈为执行java方法服务,而本地方法栈则为Native方法服务。 4、堆(线程共享) 创建的对象和数组都保存在Java堆内存中,也是垃圾收集器进行垃圾手机的最重要的内存区域。现代VM采用分代手机算法,从GC角度还可分为新生代和老年代 5、方法区(线程共享) 即我们说的永久代,用于存储被JVM今安在的类信息、常量、静态变量、即时编译器编译后的代码等数据HotSpot VM把GC分代收集扩展至方法区,即使用Java堆的永久代来实现方法区,这样HotSpot的垃圾收集器就可以像管理java堆一样管理这部分内存,而 不必为方法区开发专门的内存管理器。 运行时常量池 :是方法区的一部分。用于存放编译期生成的各种字面量和符号引用

[数据结构-算法]-笔记目录

限于喜欢 提交于 2020-01-10 04:16:58
数据结构-算法专栏系列笔记目录 数据结构-基础篇 数据结构绪论 数据结构 时间空间复杂度计算 数据结构 线性表 数据结构 顺序表和链表 数据结构 栈 数据结构 队列 数据结构 字符串 数据结构 矩阵 数据结构 数组 数据结构 树 数据结构 二叉树 数据结构 森林 数据结构 图 数据结构-提升篇 数据结构 堆 数据结构 散列表(Hash表) 数据结构 B树、B+树 数据结构 红黑树 算法-基础篇 算法 查找 算法 排序 来源: CSDN 作者: V_vista 链接: https://blog.csdn.net/qq_39953750/article/details/103897228

推荐系统算法

荒凉一梦 提交于 2020-01-10 03:20:20
常用的推荐任务分为两种,一种是评分预测,而另一种是 Top-N 推 荐。 评分预测就是给那些没有评分的项目进行评分,主要依据目标用户的历史评 分行为以及相似度计算来预测目标项目的分数 。 Top-N 推 荐就是根据用户的偏好给 目标用户推荐其可能喜欢的 N 件物品。 1.协同过滤算法 协同过滤算法可分为基于用户的协同过滤(User-based CF)、基于物品的系统 过滤(Item-based CF) User-based CF 在推荐时首先会根据用户的行为记录找到相似的用户。例如,在电影推荐方面,如果 A 和 B 在对电影类型的喜好相同或 是相近,那么把 A 喜欢的电影推荐给 B 是有意义的。 首先需要计算两个用户的相似度 ,对于评分预测往往采用皮尔逊积矩相关系数来计算。 用户之间的相似度计算还可以采用 Jaccard 公式 给定两个集合A,B jaccard 系数定义为A与B交集的大小与并集大小的比值 ,jaccard值越大说明相似度越高 计算相似度在工程应用中这个公式还比较粗糙,例如,小时候我 们每个人基本都会购买《新华字典》,但并不能说明他们的购买兴趣相似,但是如 果两个人都购买了《推荐系统》,那么可以确定他们的购买兴趣是比较相似的,应 为只有研究推荐系统的人才会购买这本书,换句话说,两个用户对冷门物品采取 过相同的行为更能说明他们购买兴趣的相似度。

数据结构:最短路径的算法实现

孤人 提交于 2020-01-10 03:08:47
题目: 利用狄克斯特拉(Dijkstra)算法求上图中0结点到其它结点的最短路径,算法实现代码必须有注释。 思路: 采用迪杰斯特拉算法 (1)初始时,S只包含起点vs;U包含除vs外的其他顶点,且U中顶点的距离为"起点vs到该顶点的距离"[例如,U中顶点v的距离为(vs,v)的长度,然后vs和v不相邻,则v的距离为∞]。 (2)从U中选出"距离最短的顶点k",并将顶点k加入到S中;同时,从U中移除顶点k。 (3)更新U中各个顶点到起点vs的距离。之所以更新U中顶点的距离,是由于上一步中确定了k是求出最短路径的顶点,从而可以利用k来更新其它顶点的距离;例如,(vs,v)的距离可能大于(vs,k)+(k,v)的距离。 (4)重复步骤(2)和(3),直到遍历完所有顶点。 代码块: # include "pch.h" # include <iostream> # include <vector> # include <cmath> # include <algorithm> # include <string> using namespace std ; # define MVNum 100 # define INFINITY 65535 typedef char VerTexType ; //顶点数据类型设置为字符 typedef int ArcType ; //边的权值为整型

DPDK与QoS(服务质量)

旧城冷巷雨未停 提交于 2020-01-09 23:48:34
前言:QoS是网络中提供差异化服务的重要方法,它通过区分不同的流量和优先级,为不同的应用和使用者提供不同质量的网络服务,比如,金融网络,可能购买了专线,要求延迟小,更不能忍受丢包,自然优先级就高些;又比如网络直播和游戏,对于网络的延迟要求非常高,而普通的上网用户则没有这么高的要求(土豪除外)。DPDK中提供了QoS的参考框架,包含了多个流程组件,十分有趣。 一.DPDK QoS 概述 在DPDK提供的QoS框架中,一个复杂的处理流程被分成了几个不同的处理阶段,如下图所示: 对于这些流程中模块,其具体解释是这样的: 从这个图中可以看出,整个包的处理过程被分成了4个阶段完成。 1.第一阶段是在线程0中的,主要的工作就是接收包然后进行检查校验。 2.第二阶段是一个重点,主要工作是进行流分类,测速和负载均衡。把不同的流量导到不同的工作负载核上。 3.第三阶段是在不同的负载核上处理业务报文。 4.第四阶段也是一个非常重要的阶段,主要工作是根据算法调度,丢弃,最后发送出去。 这次重点介绍QoS的部分,也就是第四阶段,第二阶段的流分类和负载均衡在后面再进行单独说明。 二.DPDK QoS模块分析 因为重点分析的是第四阶段的处理过程,所以,这个阶段中主要包含3个模块:测速标记模块(流量监督,police),弃包策略模块(拥塞避免,dropper),调度模块(拥塞管理,sched)

递归算法

守給你的承諾、 提交于 2020-01-09 19:06:00
1、使用函数内部属性 arguments对象的属性:callee,指针,指向arguments对象所在的函数。 function funi ( n ) { if ( n <= 1 ) return 1 ; return n * arguments . callee ( n - 1 ) } funi ( 8 ) ; 待续 来源: CSDN 作者: qq_36392571 链接: https://blog.csdn.net/qq_36392571/article/details/103910679

20182326 2019-2020-1 《数据结构与面向对象程序设计》实验七报告

余生长醉 提交于 2020-01-09 16:49:05
20182326 2019-2020-1 《数据结构与面向对象程序设计》实验七报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 刘颖洁 学号:20182326 实验教师:王志强 实验日期:2019年11月4日 必修/选修: 必修 1.实验内容 1.定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。 要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位 提交运行结果图。 2.重构你的代码 把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301) 把测试代码放test包中 重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种) 3.参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试 提交运行结果截图 4.补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个) 测试实现的算法(正常,异常,边界) 提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵