python算法
文章平均质量分 67
记录一下算法的知识,帮助理解
*Heygirl
不断学习让自己变得更幸运
展开
-
Python选择排序算法(面向对象写法)
"""选择排序"""class SelectionSort(object): def __init__(self, li): self.li = li self.min_index = None # 初始时设置列表的最小值为空值 def campare_elem(self, m, n): """比较元素""" if self.li[m] > self.li[n]: self.min_in原创 2020-09-03 10:54:40 · 337 阅读 · 0 评论 -
Python冒泡算法(面向对象写法)
"""冒泡排序"""class BubbleSort(object): def __init__(self, li): self.li = li def campare_elem(self, m, n): """比较两个元素的大小""" if self.li[m] > self.li[n]: self.exchange_elem(m, n) def exchange_elem(self, m,原创 2020-09-02 19:51:43 · 179 阅读 · 0 评论 -
搜索--顺序查找、二分查找
搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找二分法查找二分查找只能作用于有序的顺序表中二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成原创 2020-08-01 10:46:06 · 719 阅读 · 0 评论 -
顺序查找
顺序查找简介顺序表查找又称为线性查找法;是最基本的查找技术。它的查找思路:将数据一个一个地按顺序逐次查找。所以不管数据顺序为何,都需要从头到尾用记录的关键字和给定的值比较:若相等,则查找成功,找到所查记录; 反之,则查找不成功。优缺点优点:文件在查找前不需要任何的处理与排序。缺点: 查找速度慢。分析如果数据没有重复,找到数据就可以终止的话,最好的情况1次就找到,最差的情况未找到数据,需做n次比较,时间复杂度为O(n)。当数据量很大时,不适合使用顺序查找法。但如果预估所查找的数据在文件前端原创 2020-07-31 22:51:06 · 290 阅读 · 0 评论 -
topk问题
问题:现在有 n 个数,设计算法得到前 k 大的数。(k<n)解决思路:排序后切片 O(nlogn)排序LowB三人组(冒泡、选择、插入)O(kn)堆排序思路 O(nlogk)原创 2020-07-18 10:42:38 · 166 阅读 · 0 评论 -
python算法 —— 堆排序
堆排序树与二叉树树是一种数据结构 比如:目录结构树是一种可以递归定义的数据结构树是由n个节点组成的集合:如果n=0,那这是一棵空树;如果n>0,那么存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树。树结构的一些基本定义示意图结点的度:结点拥有的子树的数目。eg:结点 A 的度为3树的度:树种各结点度的最大值。eg:树的度为3根节点:最上面那个节点 A叶子结点:度为 0 的结点。eg:E、F、C、G 为叶子结点原创 2020-07-17 17:25:25 · 202 阅读 · 0 评论 -
python算法 ---- 归并排序
归并排序归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。基本思想归并排序是用分治思想,分治模式在每一层递归上有三个步骤:分解(Divide):将n个元素分成个含n/2个元素的子序列。解决(Conquer):用合并排序法对两个子序列递归的排序。合并(Combine)原创 2020-07-16 19:16:53 · 685 阅读 · 0 评论 -
python算法 --- 插入排序
插入排序简介插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法描述● 从第一个元素开始,该元素可以认为已经被排序;● 取出下一个元素,在已经排序的元素序列中从后向前扫描;● 如果该元素(已排序)大于新元素,将该元素移到下一位置;● 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;● 将新元素插入到该位置后;● 重复步骤2~5。动图演示算法分析最坏原创 2020-07-12 23:16:53 · 279 阅读 · 0 评论 -
算法与数据结构(python) -- (2)
线性表1.线性表 --- 顺序表顺序表的形式顺序表的结构与实现顺序表的结构顺序表的两种基本实现方式元素存储区替换元素存储区扩充顺序表的操作增加元素删除元素Python中的顺序表list的基本实现技术2. 线性表 --- 链表1.线性表 — 顺序表在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,用元素原创 2020-07-12 11:49:54 · 156 阅读 · 0 评论 -
python算法 --- 快速排序
快速排序介绍基于分治的思想,是冒泡排序的改进型。首先在数组中选择一个基准点(该基准点的选取可能影响快速排序的效率,后面讲解选取的方法),然后分别从数组的两端扫描数组,设两个指示标志(low指向起始位置,high指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换low和high位置的值,然后从前半部分开始扫秒,发现有元素大于基准点的值,就交换low和high位置的值,如此往复循环,直到low>=high,然后把基准点的值放到high这个位置。一次排序就完成了。以后采用递归的方式分原创 2020-07-11 22:02:42 · 391 阅读 · 0 评论 -
python算法 --- 选择排序
选择排序:简介选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法描述n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。● 初始状态:无序区为R[1…n],有序区为空;● 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1…i-1]和R(i…n)。该趟排序从原创 2020-07-11 14:55:37 · 119 阅读 · 0 评论 -
python算法 --- 冒泡排序
简介冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法描述● 比较相邻的元素。如果第一个比第二个大,就交换它们两个;● 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;● 针对所有的元素重复以上的步骤,除了最后一个;● 重复步骤1~3,直到排序完原创 2020-07-11 14:43:23 · 736 阅读 · 0 评论 -
算法与数据结构(python) -- (1)
算法+结构1.提出问题:直接上代码2.算法的提出算法的概念算法的五大特性3.算法效率衡量执行时间反应算法效率单靠时间值绝对可信吗?时间复杂度与“大O记法”如何理解“大O记法”最坏时间复杂度4.Python内置类型性能分析timeit模块5.操作测试6.数据结构概念算法与数据结构的区别抽象数据类型(Abstract Data Type)1.提出问题:如果 a+b+c=1000,且 a2+b2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?直接上代码import timedef原创 2020-07-11 13:31:10 · 165 阅读 · 0 评论 -
python排序算法--桶排序
桶排序工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)桶排序是将待排序集合中处于同一个值域的元素存入同一个桶中,也就是根据元素值特性将集合拆分为多个区域,则拆分后形成的多个桶,从值域上看是处于有序状态的。对每个桶中元素进行排序,则所有桶中元素构成的集合是已排序的。介绍桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:在额外空间充足的情况原创 2020-07-10 21:27:56 · 412 阅读 · 0 评论 -
python算法—基数排序
基数排序1.基数排序(radix_sort)2.算法思想3.基本解法4.代码实现1.基数排序(radix_sort)基数排序也是非比较的排序算法,基数排序也称为桶排序。基数排序就是将待排序数据拆分成多个关键字进行排序,也就是说,基数排序的实质是多关键字排序。多关键字排序的思路是将待排数据里德排序关键字拆分成多个排序关键字; 第1个排序关键字,第2个排序关键字,第3个排序关键字…然后,根据子关键字对待排序数据进行排序。2.算法思想基数排序又称为“桶子法”,从低位开始将待排序的数按照这一位的值放到相应原创 2020-07-08 22:45:19 · 489 阅读 · 0 评论 -
Python算法—计数排序
计数排序1.算法介绍2.算法过程3.python代码实现1.算法介绍计数排序是一种非基于比较的排序算法,其空间复杂度和时间复杂度均为O(n+k),其中k是整数的范围。基于比较的排序算法时间复杂度最小是O(nlogn)的。计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。计数排序对于数据范围很大的数组,需要大量时间和内存。2.算法过程首先找出数组中的最大值,那么数组中的所有值肯定在0到最大值之间,比原创 2020-07-07 20:53:57 · 1796 阅读 · 2 评论