Python基本常用算法
什么是算法
就是一个计算的过程,解决问题的方法
用到知识点
递归
调用自身
有结束条件
下次执行相应的复杂度要减少
时间复杂度排序(按效率排序)
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
判断时间复杂度
1.循环减半的过程就是O(logn)
2.几次循环就是n的几次方的复杂度
空间复杂度(以空间换时间)
评估算法内存占用大小
列表查找
顺序查找
从列表第一个元素开始,顺序进行搜索,直到找到为止。
def linear_seach(data_set,val):
for i in range(,data_set):
if i == val:
print(i)
return i
return '没找到'
二分查找
从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。
def bin_seacher(data_set,val):
low =
high = len(data_set) -
while low <= high:
mid = (low+high) //
if data_set[mid] == val:
print('索引位置:',mid)
return mid
elif data_set[mid] < val:
low = mid +
else:
high = mid -
print('没有找到')
return None li = range()
bin_seacher(li,)
案例
import random def random_list(n):
'''
生成随机数据
:param n:
:return:
'''
ret = []
a1 = ['赵','钱','孙','李','邹','吴','郑','王','周']
a2 = ['力','好','礼','丽','文','建','梅','美','高','']
a3 = ['强','文','斌','阔','文','莹','超','云','龙','']
ids = range(,+n)
for i in range(n):
name = random.choice(a1) + random.choice(a2) +random.choice(a3)
age = random.randint(,)
dic = {'id':ids[i], 'name':name, 'age':age}
ret.append(dic)
return ret def id_seacher(data_list,id):
low =
high = len(data_list) -
while low <= high:
mid = (low+high) //
if data_list[mid]['id'] == id:
print('索引位置:',mid)
return mid
elif data_list[mid]['id'] < id:
low = mid +
else:
high = mid -
print('没有找到')
return None data_list = random_list()
ind = id_seacher(data_list,)
print(data_list[ind]['name'])#输入人名
冒泡排序
首先,列表每两个相邻的数,如果前边的比后边的大,那么交换这两个数
循环无序区的数继续比较
import random
def bubble_sort(li): for i in range(len(li) - ):# 几趟
exchange = False # 标志位
for j in range(len(li) - i - ):
if li[j] > li[j + ]:
li[j], li[j + ] = li[j + ], li[j]
exchange = True
if not exchange:
break
li = list(range())
random.shuffle(li)
print(li)
bubble_sort(li)
print(li)
时间复杂
最好情况 O(n)
一般情况 O (n2)
最差情况 O (n2)
选择排序
一趟遍历记录最小的数,放到第一个位置;
再一趟遍历记录剩余列表中最小的数,继续放置;
def select_sort(li):
for i in range(len(li) - ): #循环次数
min_loc = i
for j in range(i + ,len(li)):#从无序区找
if li[j] < li[min_loc]:
min_loc = j
li[i], li[min_loc] = li[min_loc], li[i]
li = list(range())
random.shuffle(li)
print(li)
select_sort(li)
print(li)
插入排序
列表被分为有序区和无序区两个部分。最初有序区只有一个元素。
每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
def insert_sort(li):
for i in range(,len(li)):
tmp = li[i]
j = i -
while j >= and tmp < li[j]:
# 判断新数是否比前一个数小,小就将前一个数向后挪一个位置
li[j + ] = li[j]
j -=
li[j + ] = tmp li = list(range())
random.shuffle(li)
print(li)
insert_sort(li)
print(li)
a. 时间效率
# coding:utf- from timeit import Timer # li1 = [, ]
#
# li2 = [,]
#
# li = li1+li2
#
# li = [i for i in range()]
#
# li = list(range()) def t1():
li = []
for i in range():
li.append(i) def t2():
li = []
for i in range():
li += [i] def t3():
li = [i for i in range()] def t4():
li = list(range()) def t5():
li = []
for i in range():
li.extend([i]) timer1 = Timer("t1()", "from __main__ import t1")
print("append:", timer1.timeit()) timer2 = Timer("t2()", "from __main__ import t2")
print("+:", timer2.timeit()) timer3 = Timer("t3()", "from __main__ import t3")
print("[i for i in range]:", timer3.timeit()) timer4 = Timer("t4()", "from __main__ import t4")
print("list(range()):", timer4.timeit()) timer5 = Timer("t5()", "from __main__ import t5")
print("extend:", timer5.timeit()) def t6():
li = []
for i in range():
li.append(i) def t7():
li = []
for i in range():
li.insert(, i) #------------------结果-------
append: 1.0916136799496599
+: 1.0893132810015231
[i for i in range]: 0.4821193260140717
list(range()): 0.2702883669990115
extend: 1.576017125044018
Python列表类型不同分别操作的时间效率
def t6():
li = []
for i in range():
li.append(i) def t7():
li = []
for i in range():
li.insert(, i) timer6 = Timer("t6()", "from __main__ import t6")
print("append", timer6.timeit()) timer7 = Timer("t7()", "from __main__ import t7")
print("insert(0)", timer7.timeit()) ####################
append 1.1599015080137178
insert() 23.26370093098376
append 比 insert 执行效率高
Python基本常用算法的更多相关文章
- 关于python机器学习常用算法的例子
Home Installation Documentation Examples Previous An introduction ... This documentation is for ...
- Python之路,Day21 - 常用算法学习
Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...
- Python实现常用排序算法
Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...
- python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表
目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...
- 第四百一十四节,python常用算法学习
本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...
- Python常用算法
本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...
- Python数据结构与算法设计总结篇
1.Python数据结构篇 数据结构篇主要是阅读[Problem Solving with Python]( http://interactivepython.org/courselib/static ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- python中常用的九种数据预处理方法分享
Spyder Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...
随机推荐
- Eclipase .自动提示
打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Activation triggers for java的值为 .abc ...
- etcd:从应用场景到实现原理的全方位解读 转自infoq
转自 infoq etcd:从应用场景到实现原理的全方位解读 http://www.infoq.com/cn/articles/etcd-interpretation-application-scen ...
- CSS 媒体类型
CSS 媒体类型 媒体类型允许你指定文件将如何在不同媒体呈现.该文件可以以不同的方式显示在屏幕上,在纸张上,或听觉浏览器等等. 一.媒体类型 一些CSS属性只设计了某些媒体.例如"voice ...
- JavaScript 数据类型小结
数据类型对于机器而言,其意义在于更加合理的分配内存空间,而对于编程者而言,数据类型提供了我们相对应的一系列方法,对数据进行分析与处理. 在本文中,将对JavaScript数据类型的基础知识进行总结,全 ...
- SaltStack日常维护-第七篇
练习内容 远程执行其他模块 官方模块有很多超过300+ 1.cmd.run 2.network 3.service 4.state 5.其它日常维护 演示 cmd.run模块 可以执行系统命令,超级模 ...
- Oracle SQL Developer 编辑区不能删除,后退,空格,复制粘贴等功能都失效的解决办法
Oracle SQL Developer 编辑区不能删除,后退,空格,复制粘贴等功能都失效的解决办法 解决: 打开菜单并选择Tools-prefrence-Accelerators-Load Pres ...
- BZOJ 2761: [JLOI2011]不重复数字 hash哈希
题目就不贴了 点我看题 题意:这题题意很简明,就是给一个序列,把序列里相同的删掉,然后输出,按原数列顺序. 思路:这题之前QZZ和ZN大神犇叫我去做,辣时还不会hash,就留着了.最近某夏令营学会了h ...
- Flask-最简单的Python http服务框架使用
环境准备 Python + pip + Flask sudo easy_install pip sudo pip install flask 代码如下(做了个jieba分词的服务) # encodin ...
- DLL注入之SHELLCODE数据转换
#include "stdafx.h" #include <stdio.h> #include <string.h> #include <conio. ...
- 缓存技术内部交流_05_Cache Through
参考资料: http://www.ehcache.org/documentation/3.2/caching-patterns.html http://www.ehcache.org/document ...