python-算法基础
1.时间复杂度和空间复杂度
2.查找算法
2.1 二分查询法
2.1.1 非递归代码
def erfen(data,target):
low = 0
high = len(data) - 1
while low < high:
mid = (low + high) // 2
if data[mid] == target:
return mid
elif data[mid] < target:
low = mid + 1
else:
high = mid - 1
return
2.1.2 递归代码
def diguierfen(data,target):
low = 0
high = len(data) - 1
if low < high:
mid = (low + high) // 2
if data[mid] == target:
return mid
elif data[mid] < target:
diguierfen(data[mid+1:high],target)
else:
diguierfen(data[0:mid-1],target)
else:
return
3.排序算法
3.1 冒泡排序
def maopao(data):
length = len(data)-1
for i in range(length):
for j in range(length-i):
if data[j]>data[j+1]:
data[j],data[j+1]=data[j+1],data[j]
思路:存在n个数排序时
第1轮 n-1次
第2轮 n-2次
第n-1轮 1次
外层循环n-1次,内存循环从n-1每次减少1直到1
for i in range(length):
for j in range(length-i):
外层是从0开始到n-1,内层是从0开始,每次减少1
i=0时,表示第1轮循环,需要比较n-1次
i=1时,表示第2轮循环,需要比较n-2次
3.2 优化版的冒泡排序
def maopao(data):
length = len(data)-1
for i in range(length):
exchange = False
for j in range(length-i):
print("#")
if data[j]>data[j+1]:
data[j],data[j+1]=data[j+1],data[j]
exchange = True
if not exchange:
break
3.3 选择排序
def xuanze(data):
length = len(data) - 1
for i in range(length):
minindex = i
for j in range(i+1,length+1):
if data[minindex]>data[j]:
data[minindex],data[j] = data[j],data[minindex]
定义第一个索引为最小值,每次遍历找出最小值,每次都是和自己后面一个值比较
3.4 快速排序
4.二叉树遍历
class note:
def __init__(self,data=None,left=None,right=None):
self.data = data
self.left = left
self.right = right class Tree:
def __init__(self,root):
self.root = root def pre(self,tree):
if tree is None:
return
print(tree.data)
self.pre(tree.left)
self.pre(tree.right) def mid(self,tree):
if tree is None:
return
self.mid(tree.left)
print(tree.data)
self.mid(tree.right) def after(self,tree):
if tree is None:
return
self.after(tree.left)
self.after(tree.right)
print(tree.data) if __name__=="__main__":
# node1 = note(data=1)
# node2 = note(node1, 0, 2)
# node3 = note(data=3)
# node4 = note(data=4)
# node5 = note(node3, node4, 5)
# node6 = note(node2, node5, 6)
# node7 = note(node6, 0, 7)
# node8 = note(data=8)
# root = note(node7, node8, 100)
root = note('D',note('E'),note('F'))
# root = note('D', note('B', note('A'), note('C')), note('E', right=note('G', note('F'))))
t = Tree(root)
t.pre(t.root)
t.mid(t.root)
t.after(t.root)
分别为前中后序遍历
python-算法基础的更多相关文章
- Python算法基础
一.简介 定义和特征 定义:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时 ...
- 腾讯2017年暑期实习生编程题【算法基础-字符移位】(C++,Python)
算法基础-字符移位 时间限制:1秒 空间限制:32768K 题目: 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间. 你能帮帮小Q吗? ...
- Python 从基础------进阶------算法 系列
1.简介 关 ...
- Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- Python之算法基础
1>递归相关: 递归:递归算法是一种直接或间接地调用自身算法的过程,在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且 易于 ...
- Python之路【第二十四篇】Python算法排序一
什么是算法 1.什么是算法 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出.简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果. ...
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- Python算法:推导、递归和规约
Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...
- (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md
第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...
- Python:基础知识
python是一种解释型.面向对象的.带有动态语义的高级程序语言. 一.下载安装 官网下载地址:https://www.python.org/downloads 下载后执行安装文件,按照默认安装顺序安 ...
随机推荐
- 活代码LINQ——09
一.代码 ' Fig. 9.7: LINQWithListCollection.vb ' LINQ to Objects using a List(Of String). Module LINQWit ...
- ajax请求, 前后端, 代码示例
[博客园cnblogs笔者m-yb原创,转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] http ...
- Android 问题列表
25. Touch 事件传递机制 26. 点击事件设置监听的几种方式 27. Hander 的原理 28. Thread 和HandThread 的区别 29. AsyncTask 简介 30. As ...
- document.onkeydown
document.onkeydown=function(e) { if(e.keyCode==13) { //当按下回车键,执行我们的代码 } }
- vue路由的懒加载
一.懒加载 也叫延迟加载或者按需加载,即在需要的时候进行加载, 二.为什么要使用懒加载 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要 ...
- 日积月累--线程中断interrupt()方法
线程中断方法interrupt()方法的理解: interrupt()方法的源码: interrupted()方法的源码及注解: isInterrupted()方法源码及注解: 在了解这个方法之前我们 ...
- 2017-9-10"切题如切菜杯"模拟赛T4 ZZI
题目 YYH拿到了父亲给的钱欣喜若狂,把这些钱拿来造了n栋房子.现在他要给这些房子通电.他有两种方法:第一种是在房间里搭核电发电机发电,对于不同的房子,他需要花不同的代价Vi:,第二种是将有电的房子i ...
- 【原创】Proxmark3系列教程1——PM3用法
1 PM3介绍 proxmark3是一款开源的RFID安全研究平台黑色按钮从图中我们可以看到左上方有一颗黑色按钮,这个按钮就是Proxmark3的功能键,主要用于启动嗅探模式以及停止进程功能,其中内置 ...
- mongo常用sql
基本查询 db.getCollection('chdr').find({chdrnum:"test123456"}) lookup关联查询 db.getCollection ( ...
- 手动调用run方法和普通方法调用没有区别
手动调用run方法和普通方法调用没有区别