为您找到搜索结果:2024个
算法笔记2-排序-希尔排序(最小增量排序)
基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。publicclassshellSort{publicshellSort(){inta[]={1,54,6,3,78,34,12,45,56,100};doubled1=a.length;inttemp=0;while(true){d1=Math.ceil(d1/2);intd=(int)d1;for(intx=0;x<d;x++){for(inti=x+d;i<a.length;i+=d){intj=i-d;temp=a[i];for(;j>=0&&temp<a[j];j-=d){a[j+d]=a[j];}a[j+d]=temp;}}if(d==1)break;}for(inti=0;i<a.length;i++)System.out.println(a[i]);}} ...
算法笔记1-排序-插入排序
插入排序的工作方式就像排序一手扑克牌。开始时,我们的左手为空,然后,我们每次从桌上拿走一张牌并将它插入到左手中正确的位置。为了找到正确的位置,我们总是从右到左将它与左手中的每张牌进行比较。这样,左手中的牌始终是排好序的,直到最后一张。 插入排序的时间复杂度是O(n^2),因此,对于小规模问题,能有效解决,但是对于大规模排序,可能就要选择其他排序方法。voidinsertion_sort(int*a,intn)//a为数组,n为数组个数{inti,j,key;for(j=1;j<n;j++){key=a[j];i=j-1;while(i>=0&&a[i]>key){a[i+1]=a[i];i--;}a[i+1]=key;}} ...
Hash算法初见
hash算法(hashmap实现原理) Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做HASH值.也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系例如字符串hello的哈希算法char*value="hello";intkey=(((((((27*(int)'h'+27)*(int)'e')+27) *(int)'l')+27)*(int)'l'+27)*27)+(int)'o';。 数组的特点是:寻址容易,...
【转】编写高质量代码改善C#程序的157个建议——建议119:不要使用自己的加密算法
建议119:不要使用自己的加密算法很多人认为自己写的加密算法才是安全的,因为该算法只有“自己知道”。很遗憾,这是大错特错。首先,我们不是秘密学专家,如果我们随随便便写个算法就称得上是加密算法的话,那么世界上就不会存在“密码学”这个专门的学科了。其次,应当记住的是:让数据安全的不是加密算法本身,而是密钥。当今世界上有许多流行的加密算法都是公开源码和逻辑的,如DES、AES、RC4、RSA、TEA、MD5等。试图让算法保密是不可能的。各类源码分析工具和内存分析工具都可以通过程序的执行过程反编译出程序的算法与逻辑。所以,理论上说,只要肯花时间,没有不可破解的算法。其实,密钥才是关键。我们要始终确保密钥的安全,而不是徒劳地去创建算法。商业团队应该建立专门的机构和人员管理密钥。应用程序则应该负责保护并隐藏密钥,而不是将进入系统的密钥存储在随处可见的位置。 转自:《编写高质量代码改善C#程序的157个建议》陆敏技...
【转】编写高质量代码改善C#程序的157个建议——建议116:避免用非对称算法加密文件
建议116:避免用非对称算法加密文件MD5值或者说HASH值是一种不可逆的算法。如果需要从密文还原成明文,那么就需要对称和非对称这两类可逆算法了。对称算法示意图:在对称算法中,首先需要发送方和接收方协定一个密钥K。K可以是一个密钥对,但必须是加密密钥和解密密钥之间能相互推算出来的。在最简单也是最常用的对称算法中,加密和解密共享一个密钥。在上图,为了简单起见,使用的就是一个密钥。密钥K为了防止被第三方获取,可以通过一个秘密通道由发送方传送给接收方。当然,这个秘密通道可以有任何形式,如果觉得有必要,你甚至可以通过邮政寄送一封信函告诉对方密钥是什么。在对称密钥中,明文通过对称加密变成密文,然后在公共通道中传输。这个时候,即便第三方获取了数据,由于他们没有密钥,也是解密不了密文的。非对称加密示意图: 在非对称算法中,首先应该有一个密钥对,这个密钥对含有两部分内容,分别称作公钥(PK)和私钥(SK),公钥通常用来加密,私钥则用来解密。在对称算法中,也可以有两个密钥(即加密密钥和解密密钥)。但是,对称算法中的加密密钥和解密密钥可以相互转换,而在非对称算法中,则不能通过公钥推算...
菲波那切数列算法
问题:有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知,一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起,每月生一对小兔子,加入一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖多少对?(兔子的规律为数列1,1,2,3,5,8,13,21)----菲波那切数列 解法一://解法一:varnum1=1;//第一个月varnum2=1;//第二个月varsum=0;for(leti=3;i<=12;i++){sum=num1+num2;num1=num2;num2=sum;}console.log("s 解法二://解法二:functionF(n){if(1===n){return1;}elseif(2===n){return1;}else{returnF(n-1)+F(n-2);}}varresult=F(12);console.log("result:",result); 解法三://解法三functionF(n){switch(n){case0:return1;break;c...
JAVA关于字符串&&字符数组处理的小题目
JAVA关于字符串&&字符数组的小题目第二题:分析以下需求,并用代码实现1.键盘录入一个大字符串,再录入一个小字符串2.统计小字符串在大字符串中出现的次数3.代码运行打印格式:请输入大字符串:woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma请输入小字符串:heima控制台输出:共出现3次该题目我尝试用面向过程和面向对象两种基本思路进行解答。先来面向过程。1importjava.util.Scanner;23/*第二题:分析以下需求,并用代码实现41.键盘录入一个大字符串,再录入一个小字符串52.统计小字符串在大字符串中出现的次数63.代码运行打印格式:7请输入大字符串:woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma8请输入小字符串:heima910控制台输出:共出现3次11创建时间:2018年7月24日15:31:1912创建者:ccsoftlucifer13*/...
聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut
原文请戳:http://blog.csdn.net/abcjennifer/article/details/8170687聚类算法是ML中一个重要分支,一般采用unsupervisedlearning进行学习,本文根据常见聚类算法分类讲解K-Means,K-Medoids,GMM,Spectralclustering,Ncut五个算法在聚类中的应用。ClusteringAlgorithms分类1.Partitioningapproach: 建立数据的不同分割,然后用相同标准评价聚类结果。(比如最小化平方误差和) 典型算法:K-Means,K-Medoids2. Model-based: 对于每个类假定一个分布模型,试图找到每个类最好的模型 典型算法:GMM(混合高斯) 3.DimensionalityReductionApproach: 先...
js题目小记
NaN的判断在js里面NaN==NaN是返回false的怎么判断NaN呢用isNaN(NaN)true!!ps:Number.isNaN和isNaN有什么区别呢? isNaN是带隐式类型转换的,Number.isNaN是不做转换的字符与ascll码//获取ascill码'a'.CharCodeAt();//从ascill获取字符String.fromCharCode(97);//"a"ps:'a'只是个原始数据类型不是个对象,怎么可以有自己的属性(例如CharCodeAt),其实JS引擎会先对原始数据类型数据进行包装 newString("a") 使它暂时成为一个对象 判断对象是否有某属性 //in注意:in是会查原型链的"a"in{a:123}//true//hasOwnProperty只会查自身的属性vara={a:123,[Symbol(666)]:777};a.hasOwnProperty('a');//true;Object.getOwnPropertyNames(a);//['a']Object.getOwnPropertySymb...
算法的基本概念
1.什么是算法 解决特定问题的步骤就是算法2.算法的5个特性 有穷性、确定性、可行性、输入、输出3.算法的评价 分为时间复杂度(消耗的时间)、空间复杂度(消耗的空间)4.时间复杂度 用T(n)来表示时间复杂度。 一般有3种情况:Tmax、Tmin、Tavg ,如果没有特别提及,一般看作Tmax 一般T(n)算出来是比较复杂的,所以引入O(n)大O表达式5.大O表达式 如果存在一个n0 和C,使得当n> n0 时,f(n)<=cg(n),那么就称g(n)是f(n)的上界,记作f(n)=O(g(n)) 按定义我们不难得到2n3+n2+1024 = O(n3) = O(n4) = O(n5)=...6.Ω表达式(欧米茄)和θ表达式(西塔) Ω表达式就是跟大O表达式相反,表示f(n)的下界,记作f(n)= Ω(g(n)) θ表达式表示确界,当g(n)即是f(n)的上界,又是 ...
数据结构的基本概念
1.什么是数据结构 数据元素之间的关系就是数据结构2.数据结构的三要素 逻辑结构、存储结构、运算3.逻辑结构 分为线性结构(栈、队列、数组、线性表)和非线性结构(集合、数、图)4.存储结构 分为顺序、链接、索引、散列5.运算 分为定义和实现...
算法入门--快速排序
快速排序可谓是排序算法中最有名的算法了,虽然说名字叫快速但是平均时间复杂度达到了O(n*logn)只能说是较快吧,如果最坏情况下时间复杂度可以达到O(n^2)快速排序也是递归的最经典的一个用例下面直接上代码吧:functionqsort(arr){//基线条件,就是最后跳出递归的条件//通常都会返回0或1个值if(arr.length<2){returnarr}//递归条件else{letmid=arr[0]letlow=[]lethigh=[]for(leti=1;i<arr.length;i++){if(arr[i]<=mid){low.push(arr[i])}else{high.push(arr[i])}}returnqsort(low).concat(mid).concat(qsort(high))}} ...
算法入门---选择排序
相信大家对冒泡排序都不陌生吧,下面介绍下和冒泡排序有着相同时间复杂度的另一个算法“选择排序”(O(n^2))//先定义一个找最小数字的函数//函数用一个smallest的中间变量储存最小值,然后逐项比较//得出的最小值最后和arr[0]互换数值functionfindSmallest(arr){letsmallest=arr[0]letsmallestIndex=0arr.forEach((item,index)=>{if(item<smallest){smallest=itemsmallIndex=index}})lettemp=arr[0]arr[0]=smallestarr[smallIndex]=tempreturnsmallest}//循环n次,每次往新数组存入最小值,同时把原数组放在头部的最小值去除以减少findSmallest的对比次数functionsort(arr){letnewArr=[]letlen=arr.lengthfor(leti=0;i<len;i++){newArr.push(findSmallest(arr))...
算法入门
很多学过算法的童鞋,都觉得老师讲的算法里面排序占有很大的比例,可以说排序是算法的重点,这是为什么呢?原因是,很大部分的算法仅在数据经过排序后才管用,例如我们最经典的二分查找。首先先介绍下最基本的两种数据类型:数组和链表数组:是内存相邻的一个队列链表:内存不相邻的队列,每个元素都会存下下一个元素的地址很明显,两种数据类型的操作的时间复杂度: 数组链表读取O(1)O(n)插入O(n)O(1)删除O(n)O(1)下面来介绍下上面说到的时间复杂度(大O表示法)大O表示法:O(操作次数)常见的几种大O运行时间:由快到慢:O(logn)、O(n)、O(n*logn)、O(n^2)、O(!n)我们的二分查找就是O(logn)了 最后我们介绍下最经典的二分查找吧:letarr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]functionsort(arr,num){letlow=0lethigh=arr.length-1letmid=Math.floor((low+high)/2)while(low<=high){if(arr[mid]===num...
ajax与算法,sql的group处理
functioncorrectAction(){$semester_id=$this->_getParam("semester_id");$day=$this->_getParam("day");//todo...$where=array();$where['lx_lessons.semester_id=?']=array("type"=>1,"val"=>$semester_id);$where['lx_lessons.lvalue=?']=array("type"=>1,"val"=>'1');$where['lx_lessons.day=?']=array("type"=>1,"val"=>$day);$where['lx_lessons.user_id>?']=array("type"=>1,"val"=>0);$aLessons=$this->dao_lessons->getlessons($where,array('daydesc','lorderdesc','user_iddesc'),fals...