什么是算法

就是一个计算的过程,解决问题的方法

用到知识点

递归

调用自身

有结束条件

下次执行相应的复杂度要减少

时间复杂度排序(按效率排序)

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基本常用算法的更多相关文章

  1. 关于python机器学习常用算法的例子

    Home Installation Documentation  Examples     Previous An introduction ... This documentation is for ...

  2. Python之路,Day21 - 常用算法学习

    Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...

  3. Python实现常用排序算法

    Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...

  4. python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表

    目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...

  5. 第四百一十四节,python常用算法学习

    本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...

  6. Python常用算法

    本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...

  7. Python数据结构与算法设计总结篇

    1.Python数据结构篇 数据结构篇主要是阅读[Problem Solving with Python]( http://interactivepython.org/courselib/static ...

  8. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  9. python中常用的九种数据预处理方法分享

    Spyder   Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...

随机推荐

  1. 企业级项目把.app文件转成.ipa文件的自动化实现

    将MakeIPA.sh添加到项目的根目录下 此脚本针对企业级项目打包,不会编译项目,在打包前确认项目已经编译完成生成了"XXX.app"文件 使用前需要配置该脚本部分路径才能正确打 ...

  2. Android系统init进程启动及init.rc全解析

    转:https://blog.csdn.net/zhonglunshun/article/details/78615980 服务启动机制system/core/init/init.c文件main函数中 ...

  3. path.join()和path.resolve()的区别

    现在写代码的时候有时候使用path.join(__dirname,'dist')有时候用path.resolve(__dirname,'dist'),都是能拼接处来一个绝对路径,但是具体有什么区别呢? ...

  4. go channel 阻塞

    初接触 go 有不对得请解释下 Channel是goroutine之间进行通信的一种方式,先看下面代码为什么会阻塞: func closer(ch chan int) { ch <- 1 log ...

  5. 20145327实验五 Java网络编程

    实验五 Java网络编程 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器, ...

  6. php 与 c++ openssl 加密通信

    $key = '1234567890123456'; $iv = '1234567890123456'; $enc = openssl_encrypt("hello wolrd!" ...

  7. C++ 读取文件所有内容的方法

    方法一 #include <fstream> #include <string> #include <iostream> using namespace std; ...

  8. Python学习札记(二) python3.5安装 + (假装是)第一个Python程序

    参考: Mac OS 安装 Python3.5 廖雪峰Python教程:安装Python 笔记: 安装: 1.官方网站下载安装包:安装程序 2.执行安装程序完成Python3.5包的安装. 3.安装P ...

  9. webjars-jquery的引用

    什么是WebJars WebJars以jar包的形式来使用前端的各种框架.组件,如jquery.bootstrap WebJars将客户端(浏览器)资源(JavaScript,Css等)打成jar包文 ...

  10. webpack入门配置

    webpack入门配置 根据该篇文章进行配置: 入门 Webpack,看这篇就够了 其中由于版本更新的问题会出现几个问题: 1.Would you like to install webpack-cl ...