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 下载后执行安装文件,按照默认安装顺序安 ...
随机推荐
- Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】
接着上一篇Shadow Properties之美(一),我们来继续举一个有点啰嗦的栗子. 先看简单需求:某HR系统,需要记录员工资料.需要记录的资料有: 员工号(规则:分公司所在城市拼音首字母,加上三 ...
- grep用法
正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大:在以前上班 ...
- mp4文件解析(纯c解析代码)
参考链接:1. mp4文件格式解析 https://www.cnblogs.com/ranson7zop/p/7889272.html 2. MP4文件格式分析及分割实现(附源码) https: ...
- 转载: http状态码
消息 这一类型的状态码,代表请求已被接受,需要继续处理.这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束.由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在 ...
- docker学习构建镜像---第三章节
一.docker镜像使用 运行docker容器时,使用的镜像如果在本地不存在,docker会自动从docker镜像仓库中下载,默认是从docker hub公共镜像源下载 在这里,我们需要了解:管理和使 ...
- Python 习题一
1.使用while循环输入 1 2 3 4 5 6 8 9 10 # Author:Tony.lou i = 1 while i < 11: if i == 7: pass else: prin ...
- C# 事件的使用方法
事件 事件是C#中另一高级概念,使用方法和委托相关.奥运会参加百米的田径运动员听到枪声,比赛立即进行.其中枪声是事件,而运动员比赛就是这个事件发生后的动作.不参加该项比赛的人对枪声没有反应. 从程序员 ...
- selenium的定位方式
1.selenium的定位方式 selenium有18种定位方式,8种单数,8种复数,2种父类 2.8种单数定位方式 from selenium import webdriverimport time ...
- windows mysql 和linux mysql解决乱码问题
windows : 1找到mysql安装目录的my.ini文件 2修改的里面的内容为 character-set-server=utf8 default-character-set=UTF-8 然后打 ...
- elasticsearch的监控脚本
监控elasticsearch cluster 集群 通过主动模式将数据发送给zabbix server import json import struct import socket import ...