几种常见的Python算法实现分别有哪些

技术几种常见的Python算法实现分别有哪些这篇文章将为大家详细讲解有关几种常见的Python算法实现分别有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、选择排序

本文将详细讲解几种常见的Python算法实现,文章内容质量较高,所以边肖将分享给大家参考。希望大家看完这篇文章后对相关知识有一定的了解。

1.选择排序。

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

#找到了最小的元素deffindmall(列表):

min=list[0]for line range(len(list)): if list[I]min :

min=list[i]returnmin

#选择排序定义选择_排序(列表):

newArr=[]for iirange(len(list)):

最小值=查找小(列表)

new err . append(MinVaLue)

list.remove(minValue)返回新值

testar=[11,22,33,21,123]print(select _ sort(testar))2。快速分类。

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

defQuick_Sort(列表):iflen(列表)2:returnlistelse:

temp=列表[0]

less=[iforiinlist[1:]ifi=temp]

more=[iforiinlist[1:]if temp]returnQuick _ Sort(更少)[temp] Quick_Sort(更多)

testar=[13,44,53,24,876,2]print(quick _ sort(testar))3。二分搜索法。

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

defItem_Search(列表,项目):

低=0

high=len(列表)-1whilelow=high:

middle=(低高)//2 print(list[middle])if list[middle]item :

high=middle-1 liflist[middle]项目:

low=中1 LSE : returnmiddlereturnnone

test_list=[1,3,5,7,9,11,13,15,17,19,21]

项目_搜索(测试_列表,11)4。广度优先搜索。

广度优先搜索是一种由节点和边组成的图算法。一个节点可以连接多个节点,这些节点称为邻居。广度优先搜索算法可以解决两类问题:第一类是节点A到节点B是否有路径;第二个问题是从节点A到节点b哪条路径最短,使用广度优先搜索算法的前提是图的边没有权重,即该算法只用于未加权的图。如果图的边有权重,则应使用Dikstra算法来寻找最短路径。例如,如果你认识爱丽丝、鲍勃和克莱尔,鲍勃认识anuj和peggy,爱丽丝认识peggy,克莱尔认识tom和jonny,你需要在最短路径中找到你认识的人来找到tom,那么算法实现如下:

#使用字典构建图表图表={}。

图['你']=['爱丽丝',' B

ob","Claire"]
graph["Bob"]=["Anuj","Peggy"]
graph["Alice"]=["Peggy"]
graph["Claire"]=["Tom","Jonny"]
graph["Anuj"]=[]
graph["Peggy"]=[]
graph["Tom"]=[]
graph["Jonny"]=[]from collections import deque#简单的判断方法def person_is_seller(name): return name=='Tom'def Search(name):
 searched=[] #用于记录检查过的人,防止进入死循环
 search_queue=deque() #创建队列
 search_queue+=graph[name] while search_queue:
 person=search_queue.popleft() if not person in searched: #仅当这个人没检查过时才检查
 if person_is_seller(person): print("the seller is {0}".format(person)) return True else:
 search_queue+=graph[person]
 searched.append(person) #将这个人标记为检查过
 return Falseprint(Search("you"))

5、贪婪算法

贪婪算法,又名贪心算法,对于没有快速算法的问题(NP完全问题),就只能选择近似算法,贪婪算法寻找局部最优解,并企图以这种方式获得全局最优解,它易于实现、运行速度快,是一种不错的近似算法。假如你是个小偷,商店里有很多箱子,箱子里有各种水果,有些箱子里有3种水果,有些箱子有2种...,你想尝到所有种类的水果,但你一个人力气有限,因此你必须尽量搬走最少的箱子,那么,算法实现如下:

fruits=set(["苹果","香蕉","梨子","西瓜","草莓","橘子","荔枝","榴莲"]) 
#箱子以及包含的水果box={}
box["b1"]=set(["苹果","香蕉","西瓜"])
box["b2"]=set(["草莓","橘子","榴莲"])
box["b3"]=set(["梨子","荔枝","草莓"])
box["b4"]=set(["香蕉","橘子"])
box["b5"]=set(["梨子","榴莲"])
final_boxs=set() #最终选择的箱子#直到fruits为空while fruits:
 best_box=None #包含了最多的未包含水果的箱子
 fruits_covered=set() #包含该箱子包含的所有未包含的水果
 #循环迭代每个箱子,并确定它是否为最佳箱子
 for boxItem,fruitItem in box.items():
 covered=fruits & fruitItem #计算交集
 if len(covered)>len(fruits_covered): 
 best_box=boxItem
 fruits_covered=covered
 fruits-=fruits_covered
 final_boxs.add(best_box) 
print(final_boxs)

关于几种常见的Python算法实现分别有哪些就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/48484.html

(0)

相关推荐

  • 怎么用CSS实现仿Windows10鼠标照亮边框效果

    技术怎么用CSS实现仿Windows10鼠标照亮边框效果这篇文章主要讲解了“怎么用CSS实现仿Windows10鼠标照亮边框效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学

    攻略 2021年11月6日
  • JS正则表达式

    技术JS正则表达式 JS正则表达式(1) 正则表达式的作用
    给定的字符串是否符合正则表达式的过滤逻辑(匹配)
    可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
    强大的字符串替换能力(替换)(

    礼包 2021年12月15日
  • MySQL中CURRENT_TIMESTAMP的使用方式是什么

    技术MySQL中CURRENT_TIMESTAMP的使用方式是什么这篇文章主要讲解了“MySQL中CURRENT_TIMESTAMP的使用方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢

    攻略 2021年11月25日
  • JavaScript实现换肤效果(换背景)

    技术JavaScript实现换肤效果(换背景) JavaScript实现换肤效果(换背景)JavaScript实现换肤效果(换背景)
    本文实例为大家分享了JavaScript实现换肤效果的具体代码,供大

    礼包 2021年11月1日
  • Spring整合Mybatis的方式

    技术Spring整合Mybatis的方式 Spring整合Mybatis的方式导入依赖的jar包dependencygroupIdjunit/groupIdartifactIdjunit/artifac

    礼包 2021年10月20日
  • C++如何解决单例懒汉式和多线程问题

    技术C++如何解决单例懒汉式和多线程问题这篇文章主要为大家展示了“C++如何解决单例懒汉式和多线程问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++如何解决单例懒汉式和

    攻略 2021年12月1日