几种常见算法的Python实现
1、选择排序
#找到最小的元素
def FindSmall(list):
min=list[0]
for i in range(len(list)):
if list[i]<min:
min=list[i]
return min #选择排序
def Select_Sort(list):
newArr=[]
for i in range(len(list)):
minValue=FindSmall(list)
newArr.append(minValue)
list.remove(minValue)
return newArr testArr=[11,22,33,21,123]
print(Select_Sort(testArr))
2、快速排序
def Quick_Sort(list):
if len(list)<2:
return list
else:
temp=list[0]
less=[i for i in list[1:] if i<=temp]
more=[i for i in list[1:] if i>temp]
return Quick_Sort(less)+[temp]+Quick_Sort(more) testArr= [13,44,53,24,876,2]
print(Quick_Sort(testArr))
3、二分查找
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)
4、广度优先搜索
#使用字典构建图
graph={}
graph["you"]=["Alice","Bob","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 False print(Search("you"))
5、贪婪算法
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实现的更多相关文章
- 机器学习10种经典算法的Python实现
广义来说,有三种机器学习算法 1. 监督式学习 工作机制:这个算法由一个目标变量或结果变量(或因变量)组成.这些变量由已知的一系列预示变量(自变量)预测而来.利用这一系列变量,我们生成一个将输入值映射 ...
- 常见算法的python实现
提到排序算法,常见的有如下几种:冒泡排序.选择排序.插入排序.快速排序.堆排序.归并排序.希尔排序:查找算法最常见二分查找.这些算法的时间复杂度如下: 算法名称 时间复杂度(一般情况) 冒泡排序 O( ...
- 几种常见算法js
没有系统地总结过js算法,虽然在项目中陆陆续续的也用过好多算法,有一次去一家公司面试的时候,面试官说想谈谈算法,有点懵了,所以接下来的面试中谈的也有点被动,避免下次再碰到这种情况,今天决定好好的总结下 ...
- 十大经典排序算法总结 (Python)
作业部落:https://www.zybuluo.com/listenviolet/note/1399285 以上链接是自己在作业部落编辑的排序算法总结- Github: https://github ...
- 几种排序算法的学习,利用Python和C实现
之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...
- 常见排序算法之python实现
冒泡排序 简介 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交 ...
- 10 种机器学习算法的要点(附 Python 和 R 代码)
本文由 伯乐在线 - Agatha 翻译,唐尤华 校稿.未经许可,禁止转载!英文出处:SUNIL RAY.欢迎加入翻译组. 前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关 ...
- 10 种机器学习算法的要点(附 Python)(转载)
一.前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明.更个性化的技术 也许我们生活在人类历史上最关键的时期:从使用 ...
- 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码) Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在GitHub上分享了自己如何使用P ...
随机推荐
- iOS 使用代码创建约束,实现自动布局
///与下面约束对象属性截图相对应//使用Auto Layout约束,禁止将Autoresizing Mask转换为约束 [self.funcView setTranslatesAutoresizin ...
- Android-Recyclerview的简单使用
由于Recyclerview是在 android.support.v7.widget.包 RecyclerView,所以需要导Recycler库: 导Recycler库: 选择项目,右键--> ...
- CentOS 7安装fail2ban+Firewalld防止SSH爆破与CC攻击
准备工作 1.检查Firewalld是否启用 #如果您已经安装iptables建议先关闭 service iptables stop #查看Firewalld状态 firewall-cmd --sta ...
- cnblogs第一篇文章
大家好,以后我就在这里很多交流分享了!谢谢!
- .net core 与ELK(3)安装Kibana
1.去产品官网下载https://www.elastic.co/downloads/kibana 对应的tar.gz的压缩包,放到/usr/local/src目录 2.解压 -linux-x86_64 ...
- wpf Im
- 多用户在线人数监听(基于TomCat)
服务器Servlet端 package com.sxt.mvcpro.servlet; import java.io.IOException; import java.util.HashSet; im ...
- [Vue] vue-cli3.0安装
1. node.js安装https://nodejs.org/en/download/ 2.npm的安装 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了.同样可以通过输入 &qu ...
- Unable to preventDefault inside passive event listener due to target being treated as passive?
使用滚动时候,新版google浏览器,会弹出如下的警告. 解决方法,可以加上* { touch-action: none; } 这句样式去掉. 其原因:https://developers.googl ...
- Java零基础教程(二)基础语法
Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...