为您找到搜索结果:2024个
数据结构以及相关例题
python中常见的数据结构统称为容器(container)。序列,映射,以及集合是三类主要的容器。 序列:序列属于一种数据结构,序列中每个元素被分配一个序号(即索引)。在python中,共有6中内建的序列,包含列表(list),元祖(tuple),字符串(str),unicode字符串,buffer对象,xrange对象。要访问序列的一部分,可使用切片操作。 字符串,列表,元祖之间的转换:a="Ilovefishc"b=list(a)print(b)---['I','','l','o','v','e','','f','i','s','h','c']#字符串到列表的转换字符串的分割:split以什么分割,分割完后列表中将不存在该元素name="dedfefeeJjDA"print(name.split("e"))#字符串到列表的转换print(name.split())#这个作用其实挺大,可以移除多余的空格,并将字符串转换成列表---["d","d","f","f","jiDA"]---['ded','fefe','eJjDA']...
面试题目(2)
面试第二天,貌似已经习惯了记下笔试题目,然后去温习自己不懂的地方。就当面试,是一个不断温习的过程,不断进步的过程。 1、div2放在div1中,需要通过CSS将div2放置于div1的右下角 <divid="div1"> <divid="div2"></div> </div> 当时想到的是用margin去控制,但是想到没有宽度和高度,故而想到了定位,这个题目很狡猾,它从字面上没提到定位二字。所以,我在div2中写的是position:relative;bottom:0;right:0;没细想,事实上这句话是有问题的,因为我写的relative,div1是父元素,并没有定位,所以就算是相对定位,也依旧是左上角。正确的应该是这样: <style>#div1{border:1pxsolid#ccc;width:500px;height:200px;positio...
面试题目(1)
来北京第二天,裸辞的我开始漫漫找工作的路。不过虽说依旧是菜鸟,但也还是感觉自己可以找到个好工作。面试第一家,那是一家外包公司,HR居然是女的,好严肃和犀利。气场上,我怂了。 稍微问两三个问题,啊,没答上来,不耐烦的HR直接说了据——今天先到这儿。悲剧。不过俗话说,不打无准备的战,看,这就是下场,让我不看书。 其中有一个问题是:ie6的一个bug——IE下两个div之间会出现3个像素的Bug(经典的3pxBug)。而后,自己试验了下这个问题,如何解决。<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equi...
查找算法(第一弹)顺序查找和折半查找
算法描述 顺序查找又称为线性查找,是一种最简单的查找方法。适用于线性表的顺序存储结构和链式存储结构。该算法的时间复杂度为O(n)。 顺序查找是从第一个元素m开始逐个与需要查找的元素x进行比较,当比较到元素值相同(即m=x)时返回元素m的下标,如果比较到最后都没有找到,则返回-1。优缺点 缺点:是当n很大时,平均查找长度较大,效率低; 优点:是对表中数据元素的存储没有要求,可以是无序的。另外,对于线性链表,只能进行顺序查找。我的代码实现(包含返回首值和返回所有值的数组两种方法):1packagecn.ftf.mysearch;23importjava.util.ArrayList;45/*6*线性查找7*/8publicclassMySeqSearch{9//只返回第一个的下标10publicstaticintseqFirstSearch(int[]arr,intn){11for(inti=0;i<arr.len...
排序算法(第三弹)归并排序和基数(桶)排序
归并排序排序动图演示整体效果: 排序细节: 排序原理:归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序1. 向上归并排序的时候,需要一个暂存数组用来排序,2. 将待合并的两个数组,从第一位开始比较,小的放到暂存数组,指针向后移,3. 直到一个数组空,这时,不用判断哪个数组空了,直接将两个数组剩下的元素追加到暂存数组里,4. 再将暂存数组排序后的元素放到原数组里,两个数组合成一个,这一趟结束。 我的代码实现:1packagecn.ftf.mysort;23importjava.util.Arrays;45publicclassMyMergeSort{6//完善参数,外部调用7publicstaticint[]mergeSort(int[]arr){8int[]temp=newint[arr.length];9arr=mergeSort1(arr,0,arr.length-1,temp);10returnarr;11}...
排序算法(第二弹)希尔排序和快速排序
希尔排序和快速排序是两种非常快速的排序算法,希尔排序是插入排序的一种,是对简单插入排序的改进算法。快速排序简称快排,是对冒泡排序的改进算法。这两种排序都是百万千万级别的排序算法,在排大体量数据时第一弹中所讲的三种简单排序算法的效率实在是差强人意。希尔排序: 排序图解:动图演示: 排序原理:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,4,3,2,1,0]这种倒序序列,数组末端的0要回到首位置很是费劲,比较和移动元素均需n-1次。 而希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分组进行插入排序,随后逐步缩小增量,继续按组进行插入排序操作,直至增量为1。希尔排序通过这种策略使得整个数组在初始阶段达到从宏观上看基本有序,小的基本在前,大的基本在后。然后缩小增量,到增量为1时,其实多数情况下只需微调即可,不会...
排序算法(第一弹)冒泡,选择和直接插入排序
写在前面:一:排序算法的分类:1.内部排序和外部排序 内部排序:待排序记录存在计算机内存中进行的排序过程。外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序过程。 2.比较类排序和非比较排序比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 二、复杂度分析,算法稳定性和适用场景稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面。时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 排序算法第一弹:简单的冒泡,选择和插入排序 网上关于排...
递归,回溯算法两大经典案例—迷宫问题和八皇后问题
迷宫问题:问题描述:用二维数组表示一个迷宫,比如1表示墙,0表示空格,设置一个起点和终点,让小球自己从迷宫的起点到终点走出一条路径,并将路径标识为2。代码实现:1packagecn.ftf.digui;23publicclassMiGong{4publicstaticbooleanfindPath(int[][]arr,inti,intj){5//结束条件6if(arr[6][5]==2){7returntrue;8}9if(arr[i][j]==0){10arr[i][j]=2;11if(findPath(arr,i+1,j)){12returntrue;13}elseif(findPath(arr,i,j+1)){14returntrue;15}elseif(findPath(arr,i-1,j)){16returntrue;17}elseif(findPath(arr,i,j-1)){18returntrue;19}else{20arr[i][j]=3;21returnfalse;22}23}else{24returnfalse;25}26}27publicstaticvoidm...
数据结构第一章绪论课后小练
题一:判断n是否是一个素数,若是则返回逻辑值true,否则返回逻辑值false。packagech01;importjava.util.Scanner;publicclassPart01{publicbooleanprime(inta){booleanflag=true;if(a==1){flag=false;}for(inti=2;i<a-1;i++){if(a%i==0){flag=false;break;}}returnflag;}publicstaticvoidmain(String[]args){inta;Scannerin=newScanner(System.in);a=in.nextInt();Part01aa=newPart01();System.out.println(aa.prime(a));}}题二:设计一个算法,计算∑i=1ni!的值。packagech01;importjava.util.Scanner;publicclassPart01{publicintsum(inta){inti,j,b,sum=0;for(i=1;i<=a;i++)...
贝叶斯算法学习
http://blog.knownsec.com/Knownsec_RD_Checklist/algorithm/bayes.txt贝叶斯:1.阮一峰总结的这两篇《贝叶斯推断及其互联网应用》http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.htmlhttp://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_two.html2.算法杂货铺——分类算法之朴素贝叶斯分类(NaiveBayesianclassification)http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html3.朴素贝叶斯(NB,NaiveBayes)简介http://home.cnblogs.com/group/topic/40112.html4.数学之美番外篇:平凡而又神奇的贝叶斯方法http://mindhacks.cn/2008/09/2...
KMP算法
KMP算法是字符串匹配功能的一个优化。所谓字符串匹配的问题意思是说,给一个字符串和一个匹配串,判断这个匹配串是否被这个字符串包含。或者说求匹配字符串在给的字符串中出现的位置。 在C语言中,strstr函数就是这个字符串功能的实现,既然你看到了这篇博客,我就默认你已经了解strstr函数。 举个例子:给一个字符串string:abcabcabcabcacabxy求字符串pattern:abcabcacab在string中字符串的位置。 如果按照暴力算法,就是一个一比对过去:暴力破解的思路就是字符串和匹配串一路比过去,若相等,就一起往后移一位,但是如果不相等,匹配串就要回到起点,字符串回到开始匹配位置的下一个字符串。 /*match.cpp*/#include<cstdio>#include<cstring>intmain(){char*string="abcabcabcabcacabxy";char*pattern="abcabcacab";intlen_string=strlen(string);intlen_patter...
Python3数据结构
列表:Python列表是可变的,这是它区别于字符串数组和元组的最重要的特点。列表可以修改,而字符串和元组不能。 以下是Python中列表的描述方法:方法描述list.append(x)将元素添加到列表结尾list.extend(L)通过添加指定列表的所有元素来扩充列表list.insert(i,x)在指定位置插入一个元素,第一个参数是准备插入到其前面的那个元素的索引list.remove(x)删除列表中值为x的第一个元素,如果没有这个元素会返回一个错误。list.pop([i])从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()会返回最后一个元素。元素随机从列表中被移除。list.clear()移除列表中所有项list.index(x)返回列表中第一个值为x元素的索引。如果没有匹配的元素就返回一个错误。list.count(x)返回x在列表中出现的次数list.sort()对列表中的元素进行排序list.reverse()倒排列表中的元素list.copy()返回列表的浅复制 类似于insert、remove、sort等修...
九大经典算法之基数排序、桶排序
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。排序过程是将所有待比较数值统一为同样的数位长度,数位较短的数前面补零,然后从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。intgetMax(intarr[],intn){intmx=arr[0];for(inti=1;i<n;i++)if(arr[i]>mx)mx=arr[i];returnmx;}voidcountSort(intarr[],intn,intexp){intoutput[n];inti,count[10]={0};for(i=0;i<n;i++)count[(arr[i]/exp)%10]++;for(i=1;i<10;i++)count[i]+=count[i-1];for(i=n-1;i>=0;i--){output[count[(arr[i]/exp)%10]-1]=arr[i];count[(arr[i]/exp)%10]--;}for(i=0;i<n;i++)arr[i]=o...
九大经典算法之归并排序
归并操作的工作原理如下:第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置;第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;重复步骤3直到某一指针超出序列尾;将另一序列剩下的所有元素直接复制到合并序列尾;//循环实现voidmerge(intarr[],intl,intm,intr){inti,j,k;intn1=m-l+1;intn2=r-m;intL[n1],R[n2];for(i=0;i<n1;i++)L[i]=arr[l+i];for(j=0;j<n2;j++)R[j]=arr[m+1+j];i=0;j=0;k=l;while(i<n1&&j<n2){if(L[i]<=R[j]){arr[k]=L[i];i++;}else{arr[k]=R[j];j++;}k++;}while(i<n1){arr[k]=L[i];i++;k++;}while(j<n2){arr[k]=R[j];j++;k++...
九大经典算法之选择排序、堆排序
原理:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。voidselection_sort(intarr[],intn){for(inti=0;i<n-1;i++){inttemp=a[i];intt=i;for(intj=i+1;j<n;j++){if(a[j]<temp){temp=a[j];t=j;}}a[t]=a[i];a[i]=temp;}}空间效率:O(1)时间效率:最好情况:O(N) 平均情况:O(N^2) 最坏情况:O(N^2)稳定性(相同元素相对位置变化情况):不稳定比较次数与初始状态无关堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满...