Algorithm
文章平均质量分 73
fjssharpsword
这个作者很懒,什么都没留下…
展开
-
t-SNE可视化示例
T分布随机近邻嵌入(T-DistributionStochasticNeighbourEmbedding)是一种用于降维的机器学习方法,它能帮我们识别相关联的模式。t-SNE主要的优势就是保持局部结构的能力。这意味着高维数据空间中距离相近的点投影到低维中仍然相近。t-SNE同样能生成漂亮的可视化。理论方面可查看Hinton在2008年发表的论文:《Visualizing Da...原创 2020-03-20 10:25:54 · 2032 阅读 · 0 评论 -
Feature Map of Pytorch示例
场景:假设已训练好model,并选了最佳模型best_net,现在想提取网络层的特征并绘出热力图。1、oriImg = cv2.imread(image_path) #读取一张图片,image_path是图片路径2、data = torch.from_numpy(oriImg).type(torch.FloatTensor).cuda() output = best_net(...原创 2020-03-18 12:36:36 · 388 阅读 · 0 评论 -
算法导论之排序网络
排序网络算法是基于比较网络模型,可以同时执行多个比较操作,和串行计算(随机存取计算机RAM)机制不一样。首先要介绍下比较网络。比较网络由线路和比较器构成。一条线路把一个值从一处传输到另一处,把比较器的输入端和输出端相连。假定比较网络含n条输入线a1,a2,…,an,以及n条输出线b1,b2,…,bn,需要排序的值通过输入线进入网络,由网络计算出的结果通过输出线输出。算法导论中给出的案例很清晰地原创 2016-11-03 08:44:48 · 5576 阅读 · 0 评论 -
哈夫曼编码(Huffman)Java实现代码简化版
这个网上发现的Huffuman编码Java实现在组织上相对简化,便于理解文件压缩过程:提取文件统计字符频度-根据字符频度创建huffman树-根据huffman树生成huffman可变字长无前缀编码-根据huffman编码对文件中的字符转化成二进制串-将huffman编码的二进制串(非固定8位,可变字长)转化成8位固定字节的字符并输出文件。代码中对于Java数据类型的使用也值得参考。pac原创 2016-07-14 17:12:24 · 5768 阅读 · 3 评论 -
算法导论之图的最小生成树
引出最小生成树,是提到电子线路设计时,要把数个元件的引脚连接在一起,使其电位相同。使n个引脚互相连通,可以使用n-1条连接线,每条连接线连接两个引脚。寻求连接线最少的方案,是最小生成树的应用。将电子线路引脚接线连接问题模型化求解一个无向带权连通图的顶点互联最小代价。一个无向带权连通图G=(V,E),其中V是引脚集合(顶点),E是每个引脚之间可能互联的集合(边)。图中每一条边(u,v)∈E,都有原创 2016-10-17 09:54:52 · 2881 阅读 · 0 评论 -
Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图。import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.Map;import原创 2016-10-12 11:34:17 · 2936 阅读 · 0 评论 -
算法导论之图的基本算法
图是一种数据结构,有关图的算法是计算机科学中基础性的算法。这个论述恰如其分。图的基本算法包括图的表示方法和图的搜索方法。图的搜索技术是图算法领域的核心,有序地沿着图的边访问所有顶点,可以发现图的结构信息。1、图的表示方法:给定图G=(V,E),其中V表示图的点、E表示图的边,V[G]表示图G的点集合,E[G]表示图G的边集合。图的表示方法主要有邻接表和邻接矩阵两类,均可用于有向图和无向原创 2016-10-11 12:01:38 · 4069 阅读 · 0 评论 -
算法导论之用于不相交集合的数据结构
不相交集合,即集合内元素无交集。在一些具体应用中,需将n个不同的元素分成一组不相交的集合。不相交集合的两个重要操作,找出给定元素所属的集合和合并两个集合。为支持不相交集合的操作,需要设计和维护数据结构来满足。导论中给出了链表和有根树两类数据结构来支持不相交集合的操作。1、不相交集合的基本定义不相交集合数据结构保持一组不相交的动态集合S={S1, S2,…, Sk}。每个集合通过一个代表来识原创 2016-08-12 10:15:56 · 4137 阅读 · 0 评论 -
算法导论之斐波那契堆
斐波那契堆,和二项堆类似,也是由一组最小堆有序的树构成。注意区别,不是二项树,是有根而无序的树。导论中,斐波那契堆只是具有理论上的意义,是以平摊分析为指导思想来设计的数据结构,主要是渐进时间界比二项堆有改善。斐波那契堆除去删除元素操作外,其他操作只有O(1)的平摊运行时间,而二项堆需要O(lgn)的最坏情况运行时间。但若要斐波那契堆能转化为实际应用,除要保证有相同平摊时间界限外,还需更简单的数据结原创 2016-08-05 11:28:12 · 4174 阅读 · 0 评论 -
算法导论之二项堆
每件事物都有其应需而生的目的,既然存在了,一定有其出现的因和果。二项堆的存在,就是因为二叉堆在Union操作上性能不如意而被发明的。二项堆的Union操作只需O(lgn)时间就可以完成两个二项堆的合并(总共n个元素)。二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等原创 2016-08-01 14:52:23 · 3322 阅读 · 0 评论 -
算法导论之B树
开宗明义,B树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树。一般设计的简单数据结构都是面向主存而设计的,主存读取速度快但容量小;而磁盘读取速度慢而容量大,于是针对磁盘而设计的数据结构就不同于为主存而设计的。就树结构上来说,红黑树的二叉性质和高深度适合主存,而B树正是应磁盘特点而设计的高级树结构,其高度比红黑树小很多,但广度要大很多,其分支不只2个,分支因子越大,高度越小。在考察算法性能原创 2016-07-25 09:58:09 · 2560 阅读 · 0 评论 -
二叉查找树Java实现代码
二叉查找树(Binary Search Tree),或者是一颗空树,或者是具有下列性质的二叉树:1、若它的左子树不空,则其左子树上的所有结点的值均小于它根结点的值;2、若它的右子树不空,则其右子树上的所有结点的值均大于它根结点的值;3、它的左、右子树也分别为二叉查找树。实现代码如下:重点是理解插入和删除后树的重新调整package cn.hm;/** * @autho原创 2016-07-20 16:52:18 · 3595 阅读 · 0 评论 -
最长公共子序列Java代码实现
最长公共子序列定义:两个或多个已知数列的子序列集合中最长的就是最长公共子序列。比如数列A = “abcdef”和B = “adefcb”,那么两个数列的公共子序列集合有{”a","ab","abc","adef",等等},其中最长的就是adef,这就是最长公共子序列。注意:最长公共子序列的公共子序列里的元素可以不相邻,但是公共子字符串必须是连接在一起的,比如A和B的公共子字符串是“de原创 2016-07-19 11:08:43 · 12535 阅读 · 0 评论 -
算法导论之平摊分析(动态表)
平摊分析,amortizedanalysis,对数据结构执行的所有操作的总和时间是油由求平均而得出,用来证明一系列操作中,通过对所有操作求平均代价,即时某一操作具有较大代价,但平均代价还是小的。导论中这个和平均情况分析不同,我自己到没感觉出不同,同样是求平均。Amortized,摊销之意,就是将把总代价平均到一个周期内来承担。平摊分析有什么意义呢?主要为认识数据结构。对数据结构的一系列操作,数原创 2016-07-18 09:52:37 · 4530 阅读 · 0 评论 -
哈夫曼编码(Huffman)Java实现代码
网上找到的一个组Huffman编码Java实现代码,比较经典。1、主类,压缩和解压package cn.hm;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.File; impor原创 2016-07-14 17:00:50 · 9462 阅读 · 0 评论 -
算法导论之贪心算法(Huffman编码和拟阵)
贪心算法,在解决最优化问题上,通过得到子问题的局部最优解来合成问题的一个解,以局部最优选择来输出一个全局最优解。问题要用贪心算法来求解,需满足和动态规划一样的最优子结构特征,同时还需要再每个子问题最优解选择上具有贪心性质。所谓贪心性质,就是本来一个问题分成两个子问题求解,但现在只需要选择一个来求解,而这个子问题的局部最优就是全局最优。贪心了,只要解决一个子问题就解决了整个问题。通过活动选择原创 2016-07-13 16:19:38 · 4064 阅读 · 0 评论 -
算法导论之动态规划(最长公共子序列和最优二叉查找树)
动态规划师通过组合子问题的解而解决整个问题,将问题划分成子问题,递归地求解各子问题,然后合并子问题的解而得到原问题的解。和分治算法思想一致,不同的是分治算法适合独立的子问题,而对于非独立的子问题,即各子问题中包含公共的子子问题,若采用分治法会重复求解,动态规划将子问题结果保存在一张表中,避免重复子问题重复求解。动态规划在多值中选择一个最优解,其算法设计一般分为4个步骤:描述最优解的结构;递归定原创 2016-07-06 09:54:29 · 3631 阅读 · 0 评论 -
算法导论之数据结构
数据结构集合,是数学也是计算机科学的基础,在表示和操纵有穷、动态集合上,动态集合中每个元素由对象来表示,并有指向对象的指针。对动态集合的操作分为两类:查询和修改,操作以指针为导航,涉及元素对象内的关键字和卫星数据。数据结构和动态集合的关系,可以这么理解,把集合中的元素根据相互间关系用某种结构组织起来,方便查询和修改。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储和原创 2016-06-17 09:12:50 · 2684 阅读 · 0 评论 -
算法导论之排序和顺序统计学
排序:对N个数的序列重排过程。待排序的数,一般是选择记录中数据集的关键字key作为排序的值,而数据集中其他数据(称为:卫星数据)以key为中心移动。实际上,对于排序过程中,key的移动和交换,卫星数据并不定跟着,只要记录的指针随key交换即可,将数据移动量减小到最小。关键字和卫星数据所构成的数据集,在实际排序应用中,不单只关注关键字序列,还关心卫星数据的存储结构,在选用具体排序算法中有一定考量原创 2016-06-02 15:23:06 · 2424 阅读 · 0 评论 -
算法导论之概率分析和随机算法
在问题的分析中应用概率技术称为概率分析,前期是对所有可能的输入集合可以做假定。如果无法对输入分布做合理性建模,如果一个算法的行为不只是由输入决定,同时也由随机数生成器所产生的数值决定,则为随机算法。行为随机化和概率平均化,是算法设计和分析的工具。原创 2016-05-16 11:04:46 · 2735 阅读 · 0 评论 -
算法导论之数学归纳法和递归
推理是一种逻辑思维,一种方法论,归纳推理是从个性推导到共性的过程,而演绎推理则从共性递推到个性的过程。事物的一般性和特殊性,是推理方法的基点,通过下面例子来简单理解下归纳推理是如何从特殊上升到一般。数学归纳法首先证明起点值命题成立,然后证明从n值到n+1的过程有效,而后任意值递推可得。证明自然数N的阶乘N!步骤:已知N!=N*(N-1)*(N-2)*(N-3)*…*2*1,当N=1时原创 2016-05-11 10:30:47 · 6150 阅读 · 0 评论 -
算法导论之NP完全性和近似算法
NP完全性和近似算法在理解NP完全性之前,笔者想引入关于科学与伪科学的定义。凡可接受实践检验、可被证实和被否正的为科学,相反之为非科学,而伪科学是非科学之子集,与科学相对立,认定非科学为科学的即是伪科学。三者关系可简化为:科学相反于非科学、对立于非科学子集伪科学。集合的运算关系见公式(1),科学定义为、非科学定义为、伪科学定义为。(1)算法是用来解决问题的,一个问题能否在多项式时间内完原创 2016-05-04 17:14:52 · 7978 阅读 · 0 评论 -
(转载)MyCat:开源分布式数据库中间件
发现MyCat这个东西,觉得还是有很多应用场合,之前为了mysql读写分离、分布等伤透脑筋,没想到有现成的中间件工具,看来很多有经验的公司是受到过折磨,才整出好工具。方法和工具的发明,总是因为问题的存在。暂时还没时间真正部署下mycat来研究,先转载关于mycat的介绍,地址:http://www.csdn.net/article/2015-07-16/2825228摘要:My转载 2016-04-21 14:46:12 · 2549 阅读 · 0 评论 -
(转载)计算机科学中最重要的32个算法
奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径转载 2013-06-19 10:31:34 · 2342 阅读 · 0 评论 -
sql语句相似度统计的说明
1.需求描述:sql相似度统计是针对数据库审计中采集到sql语句及其满足一定相似度的sql语句统计其执行次数,用于判断是否高危,对于次数执行相对低的给予告警。在统计sql语句执行次数上,要判断同类sql语句的相似度,达到一定相似度的可以定位为同一类sql语句。 2.实现描述:——输入:相似度值,比如90%;操作对象,比如表名Table_name;操作类型,比如insert in原创 2013-05-27 12:25:38 · 6543 阅读 · 0 评论 -
通用算法-sql相似度模糊匹配
1、需求描述:数据库采集sql语句的记录表,包含记录编号-ID、日期时间-data、sql语句-statement,对表内每一条记录的sql语句和表内其他记录的sql语句进行模糊匹配,以顺序字符匹配方式进行,达到定义的相似度,就为该相似度统计值加1,目的是统计和该sql语句类似语句的执行频率;表内每新增一条记录就要和表内原保存所有记录进行sql模糊匹配,并为表内原保存记录的相应相似度等级增加统计值原创 2013-04-22 15:35:56 · 22775 阅读 · 1 评论 -
算法导论之单源最短路径
单源最短路径,在现实中是很多应用的,是图的经典应用,比如在地图中找出两个点之间的最短距离、最小运费等。单源最短路径的问题:已知图G=(V,E),找出给定源顶点s∈V到每个顶点v∈V的最短路径。单源最短路径衍生出的变体问题如下:1)单终点最短路径问题:找出从每个顶点v到指定终点t的最短路径。这个是单源最短路径的反向,把图的每条边反向,问题就变成单源最短路径的问题;2)单对顶点最短路径问题:对原创 2016-10-26 09:43:27 · 5714 阅读 · 0 评论 -
算法导论之矩阵运算
矩阵运算的重要性应该不亚于图算法。先重温下矩阵的相关概念和性质,为后续矩阵运算奠定数据理论基础。矩阵A:数字的一个矩形阵列,形式化为A=(aij),第i行j列元素为aij,如元素为实数的所有元素mXn矩阵组合的元素用RmXn表示。矩阵转置AT:是矩阵A的行和列互相交换而产生的举证。向量(Vector):是数字的一维向量,列向量看成是nX1的矩阵,转置成行向量就是1Xn的矩阵。单位向原创 2016-11-09 09:18:49 · 6085 阅读 · 0 评论 -
算法导论之每对顶点间的最短路径
从单源顶点最短路径到每对顶点间最短路径,求解的问题从一个点扩展到所有点,描述如下:给定一个加权有向图G=(V,E),其加权函数w:E->R为边到实数权值的映射,对于每对顶点u,v∈V,找出从u到v的一条最短路径,其中路径的权值是指其组成边的权值之和。可以把单源最短路径算法运行|V|次来解决每对顶点间最短路径问题,每一次运行时,每个顶点轮流作为源顶点。用邻接表表示的话,输出第u行第v列的元素就是从u原创 2016-10-28 10:01:36 · 3058 阅读 · 0 评论 -
Java实现算法导论中反复平方法模取幂
在众多的加密算法中都需要进行幂的取模运算,比如在RSA算法中需要计算d=ne mod N,我们称之为幂模算法,其中:N=p*q(p,q为大素数)n为加密数据,ne为公钥,d为私钥,满足关系ed≡1 (mod (p-1)*(q-1))其中n,e都是非常大的数,ne mod N用算法导论中的反复平方法,具体代码如下:package cn.ansj;public class原创 2016-11-29 10:31:19 · 2305 阅读 · 0 评论 -
算法导论之最大流
最大流是图应用,将有向图理解为一个流网络,可模型化流经管道的液体、通过装配线的部件、电网中的电流、通讯网络传送的信息等,源点以固定能量产生,而汇点则消耗同等能量,保持守恒。最大流问题追求的就是在流网络中,物质从源点传到汇点的最大能量是多少?对于流网络,算法导论中给出了形式化定义。流网络G=(V,E)是一个有向图,其中每条边(u,v)∈E均有一个非负能量c(u,v)≥0。如果(u,v)∉E,则假原创 2016-11-01 15:08:20 · 4153 阅读 · 0 评论 -
算法导论之线性规划
线性规划,充斥着运筹学,在图的单源最短路径求解差分约束系统就是用到线性规划。怎么样问题可以建模为线性规划来解决呢?在给定的有限的资源和竞争约束情况下,取得最大化或最小化目标的问题。导论中给出政治竞选问题、航空航线调度问题、钻井采油问题。最大化或最小化目标是函数的因变量,自变量就是资源的约束因素,其函数就是由这些制约因素构成的等式或不等式。下面数学定义下线性规划。在一般线性规划问题中,最优化一个原创 2016-11-17 09:21:32 · 23549 阅读 · 0 评论 -
前沿技术资料百度云链接(资料共享)
1024G——前沿技术资料百度云链接: 人工智能:链接:http://pan.baidu.com/s/1nvk5AaP 密码:dpg5深度学习:链接:http://pan.baidu.com/s/1slvSHpN 密码:v3ro数据分析:链接:http://pan.baidu.com/s/1slALMPJ 密码:drgs算法:链接:http://pan.baidu.原创 2016-11-14 08:52:39 · 20306 阅读 · 6 评论 -
Java实现算法导论中线性规划单纯形算法
需在理解算法导论中线性规划单纯性算法基础上理解Java实现的代码,结合http://blog.csdn.net/fjssharpsword/article/details/53195556理解。具体代码如下:package sk.mlib;import java.util.Random;/***********************************************原创 2016-11-17 11:51:56 · 8987 阅读 · 3 评论 -
Java实现算法导论中Miller-Rabin随机性素数测试
Miller-Rabin测试: 费马小定理:对于素数p和任意整数a,有ap ≡ a(mod p)(同余)。反过来,满足ap ≡ a(mod p),p也几乎一定是素数。 伪素数:如果n是一个正整数,如果存在和n互素的正整数a满足 an-1 ≡ 1(mod n),我们说n是基于a的伪素数。如果一个数是伪素数,那么它几乎肯定是素数。 Miller-Rabin测试:不断选取不原创 2016-12-01 09:26:40 · 4712 阅读 · 2 评论 -
算法导论之有关数论的算法
关于数论,想到的就是密码系统和大素数。大素数的易求和因子分解的高难度是密码系统安全性的数学基础。输入一个大的整数,用位操作次数来衡量数论算法的时间性能。1)初等数论概念关于整数集合Z={…,-2,-1,0,1,2,…}和自然数集合N={0,1,2,…}的初等数论概念。第一:整数性和约数一个整数能被另一个整数整除,记号为d|a(d整除a),意味着对某个整数k,有a=kd。如果d|a且原创 2016-12-01 18:08:05 · 2529 阅读 · 0 评论 -
Java实现算法导论中Pollard的rho启发式方法
Pollard的rho启发式方法用于启发式求解大整数n分解因子,具体要结合导论中来理解,参考代码如下:package cn.ansj;import java.math.BigInteger;import java.security.SecureRandom; class PollardRho{ private final static BigInteger ZERO =原创 2016-12-01 18:20:00 · 2356 阅读 · 0 评论 -
Java实现算法导论中朴素字符串匹配算法
朴素字符串匹配算法沿着主串滑动子串来循环匹配,算法时间性能是O((n-m+1)m),n是主串长度,m是字串长度,结合算法导论中来理解,具体代码参考:package cn.ansj;public class NavieStringMatcher { public static void main(String[] args) { String T = "欢迎访问fjss原创 2016-12-02 09:36:22 · 2536 阅读 · 0 评论 -
算法导论之多项式与快速傅里叶变换
在学习本篇之前,有必要理解傅里叶分析相关概念,网上说的比较通俗的参考如下:https://zhuanlan.zhihu.com/p/19763358要理解正弦和余弦、离散和连续、时域和频域的关系。两个n次多项式相加所需时间为⊙(n),而相乘则是⊙(n2),采用快速傅里叶变换FFT方法,可将多项式相乘运行时间降低到⊙(nlgn)。傅里叶变换最常见用途是信号处理,在时间域内给定的信号把时间原创 2016-11-22 09:12:36 · 4161 阅读 · 2 评论 -
Java实现算法导论中快速傅里叶变换FFT递归算法
要结合算法导论理解,参考:http://blog.csdn.net/fjssharpsword/article/details/53281889代码中算法思路:输入n位(2的幂)向量,分别求值FFT和插值逆FFT,并计算卷积。package sk.mlib;/*****************************************************************原创 2016-11-22 10:26:55 · 8248 阅读 · 5 评论