为您找到搜索结果:1674个
Kruskal 算法——并查集
需要注意的地方:将所有的边权从小到大依次排序,按从小到大依次加入边,每次对加入的边进行如下操作:1.找出边的两点。2.判断两点的父亲节点是在同一个集合里。3.如果不在同一个集合,在将两点所在的集合合并:Union,且计数器+1;5.当计数器=n-1(总点数)时,停止查找。此时只有一个集合,该集合即为最小生成树。 ps.最大生成树的方法与之相同。用并查集可以很方便保存边~ c++代码#include<cstdio>#include<iostream>#include<algorithm>usingnamespacestd;structEdge{ intx; inty; intv;}a[100001];intfather[100001],n,m,num_edge,k,tot;intcmp(constEdge&a,constEdge&b){ if(a.v<b.v)return1; elseret...
Mahout学习系列之推荐算法
转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thinkgamer参考:从源代码剖析Mahout推荐引擎 mahout推荐系统示例 Mahout推荐算法API详解使用Mahout实现协同过滤 Mahout的taste推荐系统里的几种Recommender分析前言:Mahout框架集成了大量的常用的机器学习算法,且都支持在Hadoop分布式环境下运行,很大程度上节约了数据处理的时间成本,其中的推荐算法引擎有cf.taste包实现,它提供了一套完整的推荐算法工具库,同时规范了数据结构,并标准了程序开发过程。 1:Mahout推荐算法介绍2:Taste接口相关介绍3:单机内存算法实现4:基于hadoop分布式算法的实现5:算法评判标准 我们先看看一下org.apache.mahout...
20 万、50 万、100 万年薪的算法工程师在能力素质模型上有哪些差距?
北冥乘海生清华大学信息与通信工程博士、《计算广告》作者收录于知乎圆桌 · 885人赞同了该回答公元七世纪,在车迟国国家气象局组织的一次求雨活动中,虎力、鹿力、羊力三位大仙成功地祈下甘霖,于水火中救了黎民。老国王虽然不明就里,却从此尊他们为国师,奉道教为圭臬。本世纪,算法工程师们的境遇也差不多:早些年,信奉糙快猛主义的大佬们觉得他们饱食终日、无所用心,没工作只好在学校混博士,靠数据上的障眼法装神弄鬼。可是,随着去年AlphaGo大破李世石,大佬们在心底喊出“我操”的同时,慌不择路地把各种搞劫持、送外卖的生意包装成人工智能,并纷纷请来几位懂算法的国师加持。虽然他们对国师们所做的事智商上并不理解,却虔诚地希望他们快点儿求下雨来。于是,算法工程师的身价也水涨船高了。各门派工程师不论过去练的是java、php还是excel,都放弃了最好语言的争论,抄起了深度学习,发誓重新修炼成算法工程师。因此,看到题主这样充满铜臭味儿的问题,我十分欣慰。虽说在北京,20万已经基本不可能招到靠谱儿的算法工程师了,还是姑且用上面的数字做个参照,谈谈算法工程师...
垃圾回收算法
垃圾回收这个概念很早就已经被提出来了,并且已经在其他语言中得到了应用。 关于垃圾回收的机制,这里不再解释,这篇文章我主要介绍常见的垃圾回收算法,当然还有其他的。算法一:引用计数法。 这个方法是最经典点的一种方法。具体是对于对象设置一个引用计数器,每增加一个变量对它的引用,引用计数器就会加1,没减少一个变量的引用, 引用计数器就会减1,只有当对象的引用计数器变成0时,该对象才会被回收。可见这个算法很简单,但是简单往往会存在很多问题,这里我列举最明显的两个问题, 一是采用这种方法后,每次在增加变量引用和减少引用时都要进行加法或减法操作,如果频繁操作对象的话,在一定程度上增加的系统的消耗。 二是这种方法无法处理循环引用的情况。再解释下什么是循环引用,假设有两个对象A和B,A中引用了B...
算法面试题
在上一篇博客中有原有提到分享一下面试题,最近也是才能新公司入职没多久,忙着熟悉环境,加上前不久出去玩了一趟(顺便写了篇游记,感兴趣的可以看一看)。所以一直没时间整理博客,这段时间周末终于闲下来,就趁着周末就记录了几个面试过程中碰到的算法题。本篇博客不打算介绍那些高逼格的算法(如winnow,bagging,adaboost等等),就讲讲最近在面试过程中遇到的算法题以及面试的时候给出的答案(出场率比较高的算法题我都列出来了,其他的就不说了)。算法可以说是解决所有问题的基石。很多东西都可以转换为算法问题,学习算法最大的作用就是更清楚地了解了很多东西。正所谓是,知其然更知其所以然。很多人都觉得程序就是数据结构+算法+适当的注释。不学算法,那就不要学编程了。虽然说可能没这么夸张,因为实际上还是有很多小项目是不需要太多算法的,都是代码一个劲的往上叠加就行了。但是就算没那么夸张,但是作为一个程序员,逻辑思维就是算法的思路还是很重要的。---这段话是某公司一个面试官说的。再次重申一下,这里只是列出一些最近遇到的算法面试题,拿出来给大家分享一下面试经历(仅是常见算法方面的经历,还有一些不常见的就懒得列...
SQL Server 聚合函数算法优化技巧
Sqlserver聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期。Sqlserver聚合函数对一组值执行计算并返回单一的值。聚合函数对一组值执行计算,并返回单个值。除了COUNT以外,聚合函数都会忽略空值。聚合函数经常与SELECT语句的GROUPBY子句一起使用。 如果有对Sqlserver聚合函数不熟或者忘记了的可以看我之前的一片博客。sqlserver基础教程。本文中所有数据演示都是用Microsoft官方示例数据库:Northwind,至于Northwind大家也可以在网上下载。至于下载方法MSDN已经有了详细的说明了,这里就不多说了。2.1.概念: 在只包含聚合函数的SELECT语句列列表中指定的一种聚合函数(如MIN()、MAX()、COUNT()、SUM()或AVG())。当列列表只包含聚合函数时,则结果集只具有一个行给出聚合值,该值由与WHERE子句谓词相匹配的源行计算得到。2.2.探索标量聚合: 我们先用Sqlserver的"包括实际的执行计划...
K近邻算法
K近邻算法简单概述K近邻算法采用测量不同特征值之间的距离方法进行分类该方法的思路是:如果一个样本在特征空间中与k个实例最为相似(即特征空间中最邻近),那么这k个实例中大多数属于哪个类别,则该样本也属于这个类别。其中,计算样本与其他实例的相似性一般采用距离衡量法。离得越近越相似,离得越远越不相似。优点:精度高,异常值不敏感,无数据输入假定缺点:计算复杂度高,空间复杂度高适用数据范围:数值型和标称型 K近邻简述:遍历计算测试集的每个子集与训练集的距离,然后取距离最近的前K个值,再通过这K个值对应的训练集的标签(多数赞同)来决定这个子集的标签 K近邻算法机器学习实战源码(缺点:参数只能测试集的一个数据与欧氏距离的计算)defclassify0(inX,dataSet,labels,k):dataSetSize=dataSet.shape[0]#训练集数据个数4个diffMat=tile(inX,(dataSetSize,1))-dataSet#np.tile函数#瓦铺函数#将inX的shape为(1,1)的拉伸为(4,2)sqDiffMat=diffMat**...
Mini-Batch 、Momentum、Adam算法的实现
Mini-Batch1.把训练集打乱,但是X和Y依旧是一一对应的importnumpyasnpa=np.random.randn(3,3)print(a)b=list(np.random.permutation(3))#生成无序的数字0-2之间print(b)a_shuffled=a[b]#通过索引迭代生成打乱的aprint(a_shuffled)2.创建迷你分支数据集defrandom_mini_batches(X,Y,mini_batch_size=64,seed=0):"""从(X,Y)中创建一个随机的mini-batch列表参数:X-输入数据,维度为(输入节点数量,样本的数量)Y-对应的是X的标签,【1|0】(蓝|红),维度为(1,样本的数量)mini_batch_size-每个mini-batch的样本数量返回:mini-bacthes-一个同步列表,维度为(mini_batch_X,mini_batch_Y)"""np.random.seed(seed)#指定随机种子m=X.shape[1]mini_batches=[]#第一步:打乱顺序permutation=list(n...
java高亮显示关键字不区分大小写(但不改变原文字母的大小写)---关键字分词功能(自写算法:关键字之间有子集的情况和关键字首尾拼接)
用户输入了重复的关键字发现程序处理有问题,存在问题1:改变了原文字母大小写(最初解决方案是正则repalceall)2:关键字重复(包括重复及含有)3:对关键字的有效性处理(如全角","问题,空数据问题)改进1:不改变原文的字母大小写2:关键字重复(包括重复及含有)3:对关键字的有效性处理(如全角","问题,空数据问题)程序实际运行效果:2020-03-17修正关键字之间有子集的情况和关键字首尾拼接情况:修正算法:应用截图:以下为单词方式:packagereyo.sdk.utils.test.algorithms;importjava.util.regex.Matcher;importjava.util.regex.Pattern;/***<B>创建人:</B>AdministratorReyoAut<BR>*<B>创建时间:</B>2020年3月28日上午11:45:01<BR>**@authorReYo*@version1.0*/publicclassreyo{/***@paramargs*/publicsta...
java文章标题及文章相似度计算hash算法实现
参看了https://github.com/awnuxkjy/recommend-system 对方用了余弦函数实现相似度计算,我则用的是hanlp+hash算法(Hash算法总结) 再看服务器的工作情况 ...
java实现八种排序算法并测试速度
速度测试:(1)随机数范围:0-100希尔排序:=>Timeis38600基数排序:=>Timeis53300快速排序:=>Timeis46500堆 排序:=>Timeis131800选择排序:=>Timeis139900归并排序:=>Timeis94700插入排序:=>Timeis69600冒泡排序:=>Timeis189700(2)随机数范围:0-1000希尔排序:=>Timeis515900基数排序:=>Timeis339400快速排序:=>Timeis564100堆 排序:=>Timeis498800选择排序:=>Timeis3258300归并排序:=>Timeis1012300插入排序:=>Timeis2505400冒泡排序:=>Timeis5783700(3)随机数范围:0-10000希尔排序:=>Timeis4099600基数排序:=>Timeis3240700快速排序:=>Timeis2490600堆 排序:=>Timei...
Java实现的二分查找算法
二分查找,也称折半查找,是对有序序列的查找算法,时间复杂度为O(logn).本文的重点是某元素二分查找的比较次数。特别要注意的是查找的上下边界问题(下面有解释)例:22345577899399102120140,查找77需要查找的次数是多少?答:4次。序列:22345577899399102120140下标:0123456789用low表示低位元素下标,用high表示高位下标查找77第一次查找:(low+high)/2=(0+9)/2=4,查找下标为4的元素,即89。由于89>77,在89的左侧继续查找。此时调整low=0,high=3请注意,由于知道下标为4的元素89比要查找的元素77大,为了提高效率,会跳过下标为4的元素,使得high=3第二次查找:(low+high)/2=(0+3)/2=1,查找下标为1的元素,即34。由于34<77,因此,在34的右侧继续查找。此时调整low=2,high=3,由于已知道1号元素34与77不相等,所以low不取1。第三次查找:(low+high)/2=(2+3)/2=2,查找下标为2的元素,即55。由于55<77,在55的右侧...
动态规划算法——最长公共子序列问题(java实现)
已知序列X=(A,B,C,A,B,D,A)和序列Y=(B,A,D,B,A),求它们的最长公共子序列S。 /**LCSLength.java*Version1.0.0*Createdon2017年11月30日*CopyrightReYo.Cn*/packagereyo.sdk.utils.test.dy;/***<B>创建人:</B>AdministratorReyoAut<BR>*<B>创建时间:</B>2017年11月30日下午5:20:29<BR>**@authorReYo*@version1.0*//***最长公共子序列问题。*已知序列X=(A,B,C,A,B,D,A)和序列Y=(B,A,D,B,A)*求它们的最长公共子序列S*@author光*/publicclassLCSLength{/***获得矩阵dp*dp矩阵最右下角的值为两个序列的最长公共子序列的长度*@paramstr1*@paramstr2*@return*/publicint[][]get_dp(char[]str1,char[]s...
算法java实现--动态规划--电路布线问题
/**dianlubuxian.java*Version1.0.0*Createdon2017年11月30日*CopyrightReYo.Cn*/packagereyo.sdk.utils.test.dy;/***<B>创建人:</B>AdministratorReyoAut<BR>*<B>创建时间:</B>2017年11月30日下午4:58:56<BR>**@authorReYo*@version1.0*//***电路布线问题(动态规划)*@authorLican**/publicclassdianlubuxian{publicint[]c;//publicint[][]size;//最大不想交子集publicint[]net;publicdianlubuxian(int[]cc){this.c=cc;this.size=newint[cc.length][cc.length];//下标从1开始this.net=newint[cc.length];}publicvoidmnset(int[]c,int[][]si...
由“栈的逆序”谈谈递归算法
要求将一个栈逆序,使用递归。 我们先看看最常规的解法应该是怎样的,显然对于“逆序”这种问题描述,栈这种数据结构就会蹦入我们的脑海。 实现代码如下:[java]viewplaincopyprint?public static LinkedStack<Integer> reverseStackDirectly(LinkedStack<Integer> stack) { if(null != stack && !stack.isEmpty()) { LinkedStack<Integer> auxiliary = ...