Python程序设计与算法基础,python实现算法的代码

  Python程序设计与算法基础,python实现算法的代码

  今天和大家总结的Python学习教程是关于Python算法的实现。上次催我更新算法的伙伴可糙了!

  1、选择排序

  选择是一种简单直观的排序算法。其原理如下:首先,在未排序的序列中找到最小(最大)的元素,存储在排序后的序列的开头。然后,继续从剩余的未排序元素中寻找最小(最大)的元素,然后放在排序后的序列的后面,以此类推,直到所有元素都排序完毕。该算法实现如下:

  # find最小元素def find mall(list):min=list[0]for I in range(len(list)):if list[I]min:min=list[I]return min # Select Sort def Select _ Sort(list):new arr=[]for I in range(len(list)):min value=find small(list)new arr . append(minValue)list . remove(minValue)return newArrtestArr=[11,22,33,21,123]print(Select _ Sort(testArr))010-50

  快速排序比选择性排序运行速度快,其工作原理是:设要排序的数组为N,首先随机选择一个数据(通常是数组的第一个数)作为关键数据,然后将所有小于它的数放在它的前面,所有大于它的数放在它的后面。这个过程被称为快速排序。您可以使用python递归地解决这个问题:

  def Quick _ Sort(list):if len(list)2:返回list else:temp=list[0]less=[I for I in list[1:]if I=temp]more=[I for I in list[1:]if itemp]返回Quick _ Sort(less)[temp]Quick _ Sort(more)testArr=[13,44,53,24,876,2]print(Quick _ Sort(testArr))2、快速排序

  二分搜索法的输入是一个有序列表。如果要搜索的元素包含在一个有序列表中,二分搜索法可以返回它的位置。我们打个比方来说明二分搜索法的原理:比如我随机想到1~100范围内的一个整数,用最少的次数猜出这个数。每次你猜完一个数字,我都会回复大或小。第一种方法是你从1开始倒着猜,那么如果我要的数字是100,那么你要猜100次;第二种方法是从50开始。如果我说小,就猜75,这样依次消去剩下的一半数。这是二分搜索法方法。可以看出,二分搜索法方法更快。对于一个有n个元素的有序列表,用简单方法搜索最多需要n步,而二分搜索法方法最多只需要lon2 n步。该算法在python中实现如下:

  def Item_Search(list,Item):low=0 high=len(list)-1 while low=high:middle=(low high)//2 print(list[middle])if list[middle]Item:high=middle-1 elif list[middle]Item:low=middle 1 else:return middle return None test _ list=[1,3,5,7,9,11,13,15,17,19,21]Item_Search(test_list,11)3、二分查找

  广度优先搜索是一种图算法。图由节点和边组成。一个节点可以与多个节点连接,这些节点称为邻居。广度优先搜索算法可以解决两类问题:第一类是从节点A到节点B是否存在路径;第二类问题是从节点A到节点B的哪条路径最短。使用广度优先搜索算法的前提是图的边没有权重,即该算法只用于无权重的图。如果图的边有权重,那么应该使用atgdxlc算法来寻找最短路径。举个例子,如果你认识高个的无极,鲍勃,执着的棒棒糖,鲍勃认识anuj和佩吉,高个的无极认识佩吉,执着的棒棒糖认识汤姆和乔尼,你需要通过你认识的人用最短路径找到汤姆,那么算法实现如下:

  #使用字典构建graph graph={} graph [你]=[SX DTD ,鲍勃,有美丽心灵的月亮] graph [鲍勃]=[ SX DTD ]=[佩吉] graph [琼尼] graph [安奴]=[] graph [佩吉]=[] graph [汤姆]=[] graph [汤姆]=[]from collections import deque #简单判断法def person _ is _ seller(name):return name==汤姆 防止进入无限循环Search _ queue=dequee()# Create queue Search _ queue=graph[name]while Search _ queue:person=Search _ queue . pop left()if not person in searched:# Check if person _ is _ seller(person):print(卖方为{0})。 format (person))返回true else:search _ queue=graph[person]searched . append(person)#将此人标记为已选中返回false print(search( you ))4、广度优先搜索

  贪婪算法又称贪婪算法,对于没有快速算法的问题(NP-完全问题),只能选择近似算法。贪婪算法寻求局部最优解,试图通过这种方式获得全局最优解。该算法实现简单,运行速度快,是一种很好的近似算法。如果你是一个小偷,店里有很多箱子,里面装着各种水果,有的箱子里装着3种水果,有的箱子里装着2种水果…,你想尝遍各种水果,但你一个人的力量有限,所以你必须尽量去掉最少的箱子,那么算法实现如下:

  水果=set([苹果,香蕉,梨,西瓜,草莓,桔子,荔枝,榴莲]) # box及其包含的水果box={ } box[ B1 ]=set([苹果,香蕉榴莲])box[b3]=set([梨,荔枝,草莓]=box[ B4 ]=set(香蕉,桔子])box[b5]=set([梨,榴莲])final_boxs=set() #直到水果都并确定是否是boxItem的最佳盒子,box.items()中的fruit item:covered=fruit fruit item #计算交集if len(covered)len(fruits _ covered):best _ box=box item fruits _ covered=covered fruits-=fruits _ covered final _ boxs . add(best _ box)print(final _ boxs)合作伙伴有话补充。 请留言!感谢您的一贯支持!更多5、贪婪算法会继续跟大家更新!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: