
python基本算法
brave_jcc
这个作者很懒,什么都没留下…
展开
-
排序和搜索(一)——python实现顺序查找
【基本原理】当数据存储在诸如列表的集合中时,我们就说它具有线性或顺序关系。在python列表中,数据项存储的位置是单个索引值,并且索引值是有序的,顺序查找就可以按照索引顺序逐个比较,直到找到或者遍历整个列表【无序列表查找分析】图片来自:problem-solving-with-algorithms-and-data-structure-using-python【代码】#假定是无序排列def seq...原创 2018-02-28 10:27:04 · 1594 阅读 · 1 评论 -
基本数据结构的python实现
【1.栈结构的python实现】栈,线性数据结构,LIFO后进先出,添加和删除总是发生在同一侧。例如:盘子的堆放和拿取代码:【2.队列】队列,FIFO,先进先出,新添加的在队尾,移除的一端称队首,例如:排队分析:python实现中,队列尾部在列表位置0,首部在列表末尾,意味着,插入操作是O(n),删除操作是O(1)代码:【3.双端队列】deque,双端队列,类似于队列,有两个端部,首部和尾部,项在...原创 2018-03-18 17:39:29 · 482 阅读 · 0 评论 -
排序和搜索(九)——快速排序的python实现
【理解】快速排序是分治法的典型,我们首选一个枢轴值,枢轴值的作用是作为比较对象将列表划分为大于它的一部分和小于他的一部分【分析】(1)分区总是出现在列表中间,则分区就可类比二分查找是O(logn);为了找到分割点,需要针对枢轴值检查 n 个项中的每一个。结果是 nlogn(2)最坏的情况,就是在首或尾分区,此时O(n^2)【中值三技术】选择枢纽值【代码】1.简单的我们将枢轴值设置在列表第一个2....原创 2018-03-16 21:04:21 · 182 阅读 · 0 评论 -
排序和搜索(八)——归并排序的python实现
【基本原理】归并排序是一种递归算法,不断将列表拆分为一半。 如果列表为空或有一个项,则按进行排序。如果列表有多个项,我们分割列表,并递归调用两个半部分的合并排序。 一旦对这两半排序完成,就执行称为合并的基本操作。合并是获取两个较小的排序列表并将它们组合成单个排序的新列表的过程。【分析】一分为二的过程:类似于二分查找,时间复杂度为O(logn)合并过程:大小为 n 的列表的合并操作需要 n 个操作。...原创 2018-03-14 20:42:23 · 210 阅读 · 0 评论 -
排序和搜索(三)——hash查找之冲突解决(2)
在http://blog.youkuaiyun.com/brave_jcc/article/details/79499336中提到了几种hash函数,但是也只是最大可能减少冲突,并未真正解决冲突问题,本文主要介绍几种常见的冲突解决方法(1)开放寻址+线性探测在遇到冲突的时候,尝试查找另一个空槽用以保存导致冲突的数据值。一个简单的方法是从原始哈希值位置开始,然后以顺序方式移动槽,直到遇到第一个空槽。注意,我们可...原创 2018-03-10 10:44:32 · 356 阅读 · 0 评论 -
排序和搜索(三)——hash查找之hash函数(1)
在之前的(一)顺序查找和(二)二分查找中我们都是基于数据在列表中存储的索引位置查找的,本文所要说的是基于hash表的查找【hash表】又名散列表,是一种根据关键码寻找值的数据映射结构。哈希表的每个位置,通常称为槽,对应存储一个项,由0开始,如图所示是一个size为10的哈希表,最初每个槽中没有值,均为None.【hash函数】又称为散列函数,是数据值与哈希表之间的映射函数。哈希函数接收数据值,返回...原创 2018-03-10 10:15:39 · 442 阅读 · 0 评论 -
python算法分析---查找和排序总结
对于有序和无序列表,顺序搜索是 O(n)。在最坏的情况下,有序列表的二分查找是 O(log^n )。哈希表可以提供恒定时间搜索。冒泡排序,选择排序和插入排序是 O(n^2 )算法。shell排序通过排序增量子列表来改进插入排序。它落在 O(n) 和 O(n^2 ) 之间。归并排序是 O(nlog^n ),但是合并过程需要额外的空间。快速排序是 O(nlog^n ),但如果分割点不在列表中间附近,可...转载 2018-03-01 21:38:41 · 303 阅读 · 0 评论 -
排序和搜索(六)——插入排序的python实现
【插入排序】有这么一组数25,46,89,75,32。第一个数25先放在第一个位置,不管。25 再看第二个数46,与前面25比较,大,顺理成章放在第二个位置。2546 再看第三个数89,与邻近的前面的46比较,大,由于前面已经排好序,故推出比25也大,放在第三个位置254689 再看第4个数75,与邻近的前面的89比较,小,89后移。再往前比,与邻近的前面的46比较,大类推,放在46和...原创 2018-03-01 15:50:24 · 136 阅读 · 0 评论 -
排序和搜索(五)——选择排序的python实现
选择排序:先指定最大数据所在的位置为0,第一次遍历比较其他位置数据与0上数据的大小,如果大于,则替换改位置为最大数据位置,遍历结束,交换数据(python列表为最大数据与列表最后数据交换)。回到初始指定位置0,进行第二次遍历(第一次遍历得出的最大数据不参与第二次遍历),直至剩列表最后一个数据【分析】虽然和冒泡排序一样,选择排序的时间复杂度仍然是O(n^2),但是数据交换次数比冒泡排序要少~~【数据...原创 2018-03-01 10:58:51 · 186 阅读 · 0 评论 -
排序和搜索(二)——python实现二分查找
【基本原理】在上一篇有序列表的顺序查找中,我们假定列表是按照值排好序的,基于排序的列表,我们按照python列表索引从头开始比较。而在二分查找中,我们先取中间索引位置,如果找到就返回;没找到(升序排序),如果中间位置的值大于待查项,则排除中间位置的值和比中间位置值大的另一半元素,如果待查项在列表中,肯定存在于小的半部分。重复此过程知道找到,返回;反过来也一样【二分查找分析】列表有n项,第1次比较剩...原创 2018-02-28 11:25:23 · 624 阅读 · 0 评论