算法
冰凌其
这个作者很懒,什么都没留下…
展开
-
解释循环中的递归调用
#include <iostream>void fun(int a){ int i; printf("%d ",a); for(i=0;i<a;i++) fun(a - 1);}int main(){ fun(3); return 0;}这个程序的运行结果是:3 2 1 0 1 0 2 1 0 1 0 2 1 0 1 0不是太好理解,想理解的话,...原创 2017-11-06 11:39:56 · 2827 阅读 · 0 评论 -
算法:hamming 海明距离(汉明距离):Java实现
在信息论中,两个等长二进制字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。例如,1011101 与 1001001 之间的汉明距离是 2。汉明距离是以理查德·卫斯里·汉明的名字命名的,汉明在误差检测与校正码的基础性论文中首次引入这个概念。在通信中累计定长二进制字中发生翻转的错误数据位,所以它也被称为信号距离。汉明重量分析在包括信息论、编码理论、密码学等...原创 2019-02-28 16:32:41 · 3438 阅读 · 0 评论 -
算法:汉明距离 vs 编辑距离 区别
1 汉明距离在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。例如,1011101 与 1001001 之间的汉明距离是 2。汉明距离是以理查德·卫斯里·汉明的名字命名的,汉明在误差检测与校正码的基础性论文中首次引入这个概念。在通信中累计定长二进制字中发生翻转的错误数据位,所以它也被称为信号距离。汉明重量分析在包括信息论、编码理论、...转载 2019-02-28 16:19:56 · 2936 阅读 · 0 评论 -
算法:LevenshteinDistance编辑距离:两个字符串的相似度,Java实现
编辑距离(Levenshtein):两个字符之间有一个转成另一个所用的最少的编辑操作次数,操作包括:替换、插入、删除一个字符。定义: 原理:首先考虑极端情况,当或长度为0时,那么需要编辑的次数就是里一个字符串的长度。然后再考虑一般情况,此时分为三种情况:在k个操作中,将a[1...i]转换为b[1...j-1]:例如:a(abc) b(abcd)在k...原创 2019-01-12 20:26:52 · 1165 阅读 · 0 评论 -
算法:LCS(最长公共子序列)Java实现
运用动态规划思想:https://blog.csdn.net/u013921430/article/details/792996781)最长公共子序列的长度的动态规划方程 设有字符串a[0...n],b[0...m],下面就是递推公式。字符串a对应的是二维数组num的行,字符串b对应的是二维数组num的列。 2)String left="helloword";S...原创 2019-01-12 16:19:14 · 3569 阅读 · 0 评论 -
距离(distance)算法小结
18种和“距离(distance)”、“相似度(similarity)”相关的量的小结在计算机人工智能领域,距离(distance)、相似度(similarity)是经常出现的基本概念,它们在自然语言处理、计算机视觉等子领域有重要的应用,而这些概念又大多源于数学领域的度量(metric)、测度(measure)等概念。 这里拮取其中18种做下小结备忘,也借机熟悉markdown的数学公式语法...转载 2018-12-04 14:50:51 · 23933 阅读 · 0 评论 -
文本相似性算法:Simhash算法原理及实践
simhash(局部敏感哈希)的原理simhash的背景 simhash广泛的用于搜索领域中,也许在面试时你会经常遇到这样的问题,如果对抓取的网页进行排重,如何对搜索结果进行排重等等。随着信息膨胀时代的来临,算法也在不断的精进,相似算法同样在不断的发展,接触过lucene的同学想必都会了解相似夹角的概念,那就是一种相似算法,通过计算两个向量的余弦值来判断两个向量的相似性,但这种方式需...转载 2018-12-04 13:44:34 · 1426 阅读 · 0 评论 -
java 实现两个大位数相乘
(1)用Java内部实现的BigInteger里面的函数multiply(); Scanner sc=new Scanner(System.in); String s1=sc.nextLine(); String s2=sc.nextLine(); BigInteger a =new BigInteger(s1); ...原创 2018-09-15 13:55:29 · 1782 阅读 · 0 评论 -
C++排序算法总结(冒泡、插入、选择、希尔、归并、快速、堆)
[转载] (http://blog.csdn.net/yuebai008/article/details/70853756)目录C排序算法总结冒泡插入选择希尔归并快速堆目录冒泡排序插入排序选择排序希尔排序归并排序快速排序堆排序参考冒泡排序时间复杂度 O(n^2)空间复杂度 O(1)稳定排序冒泡排序的原理就是将相邻两项进行比较,如果第一个比第二个大就进行交换,一轮交换之后最大的一项就交换到最后一项,...转载 2018-03-05 21:53:51 · 233 阅读 · 0 评论 -
C/C++ 数组排序(平均时间复杂度 O(nlogn))归并、快速、堆、希尔之希尔排序
希尔排序:给定一个int数组A以及大小n,请返回排序后的数组;核心思想:1、先选择步长i,这里的步长是动态的,每次为之前步长的一半,还有一种方法是设置步长数组,但数组中步长为小于20的素数;2、每次更新步长后,都要从步长大小的索引j=i开始,从索引j开始直到结束,进行遍历,并记录当前值为temp。2.1每次temp都要与k=j-i的索引对应的值(也就是索引j的前面长度为步长的位置的值)进行比较;2...原创 2018-03-05 19:42:17 · 975 阅读 · 0 评论 -
C/C++ 数组排序(平均时间复杂度 O(nlogn))归并、快速、堆、希尔之堆排序
堆排序:给定一个int数组A以及大小n,请返回排序后的数组;核心思想:1、将数组调整为大堆项。1.1、构造大堆项,需要从第i=n/2(也就是数组的一半)元素到第一个元素依次调整,倒着;(为啥要从n/2开始呢?因为对于二叉树,当前索引的2倍是该索引的左子树索引,2倍+1是右子树索引)1.2、然后分别与A[i]的左右子树比大小,谁大,就把它的值放到A[i]上进行对调;1.3、依次向上走,直到i=0;这...原创 2018-03-05 16:06:37 · 899 阅读 · 0 评论 -
C/C++ 数组排序(平均时间复杂度 O(nlogn))归并、快速、堆、希尔之快速排序
快速排序:给定一个int数组A以及大小n,请返回排序后的数组;核心思想:1、选取一个轴值(一般是第一个数),将整个数组小于等于轴值的元素放到轴值左边,大于的放到右边。1.1、设置一左(i)一右(j)两个指针。1.2、先从右指针j往左边走,遇到小于轴值(第一个数),将它赋值给左边指针i,并且左边指针i向右移动一个,右指针j停止移动。1.3、该左边指针i往右边走,遇到大于轴值的,将它赋值给停止移动的右...原创 2018-03-05 11:45:28 · 935 阅读 · 0 评论 -
C/C++ 数组,链表排序(平均时间复杂度 O(nlogn))归并、快速、堆、希尔之归并排序
归并排序:给定一个int数组A以及大小n,请返回排序后的数组;时间复杂度分析: T(n) 拆分 n/2, 归并 n/2 ,一共是n/2 + n/2 = n / \ 以下依此类推: T(n/2) T(n/2) 一共是 n/2*2 = n / \ / \ ...原创 2018-03-04 15:53:42 · 955 阅读 · 0 评论 -
机器学习算法:18大数据挖掘的经典算法以及代码Java实现
https://python.ctolib.com/article/wiki/95851数据挖掘十大类经典算法基于Java8实现。算法目录常用的标准数据挖掘算法包名 目录名 算法名 AssociationAnalysis DataMining_Apriori Apriori-关联规则挖掘算法 AssociationAnalysis Da...转载 2019-03-01 16:33:16 · 4038 阅读 · 0 评论