十大经典比较算法
罗德里格斯(Rodrigues)旋转向量转旋转矩阵Greary:是不是漏了个cos?
Levenberg–Marquardt算法yiyu521125:你好,问一下你文章中贴的图片来自哪,想学习学习
泊松分布,指数分布介绍以及其联系与区别weixin_57859961:就是ctrlc加ctrlv。十篇里面有九篇都是同样的内容
Lucy-Richardson算法YANGN1:现在感觉入行传统行业跟考古一样。
奇异值分解的物理意义qq_41285308:太牛了博主
数据挖掘十大经典算法
数据挖掘基本任务:分类与预测、聚类分析、关联规则、时序模式、偏差检测、智能推荐等,帮助企业提取数据中蕴含的商业价值,提高企业的竞争力。DM过程:a目标定义(任务理解、指标确定)
b数据采集(建模抽样、质量把控、实时采集)
c数据整理(数据探索、数据清洗、数据变换)
d构建模型(模式发现、构建模型、验证模型)
e模型评价(设定评价标准、多模型对比、模型优化)
f模型发布(模型部署、模型重构)
十大DM算法:十大经典算法
0、算法概述0.1算法分类十种常见排序算法可以分为两大类:
非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。
线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。
0.2算法复杂度0.3相关概念
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面。
时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。
1、冒泡排序(BubbleSort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
1.1算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。1.2动图演示
1.3代码实现12345678910111213functionbubbleSort(arr){ var len=arr.length; for (var i=0;inum;j-=gap) nums[j+gap]=nums[j]; nums[j+gap]=num; } }}4.4算法分析希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版)》的合著者RobertSedgewick提出的。
5、归并排序(MergeSort)归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
5.1算法描述把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序列合并成一个最终的排序序列。5.2动图演示5.3代码实现123456789101112131415161718192021222324252627282930functionmergeSort(arr){ //采用自上而下的递归方法 var len=arr.length; if (len0&&right.length>0){ if (left[0]arr[largest]){ largest=right; } if (largest!=i){ swap(arr,i,largest); heapify(arr,largest); }} functionswap(arr,i,j){ var temp=arr[i]; arr[i]=arr[j]; arr[j]=temp;} functionheapSort(arr){ buildMaxHeap(arr); for (var i=arr.length-1;i>0;i--){ swap(arr,0,i); len--; heapify(arr,0); } return arr;}8、计数排序(CountingSort)计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
8.1算法描述找出待排序的数组中最大和最小的元素;统计数组中每个值为i的元素出现的次数,存入数组C的第i项;对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。8.2动图演示8.3代码实现12345678910111213141516171819202122functioncountingSort(arr,maxValue){ var bucket=new Array(maxValue+1), sortedIndex=0; arrLen=arr.length, bucketLen=maxValue+1; for (var i=0;i