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 下载后执行安装文件,按照默认安装顺序安 ...
随机推荐
- java中引用的概念
强引用(StrongReference) 强引用就是指在程序代码之中普遍存在的,比如下面这段代码中的object和str都是强引用: 1 2 Object object = new Object(); ...
- npm由来和作用
npm由来 本文转载自: https://blog.csdn.net/qq_37696120/article/details/80507178 npm作用 本文转载自: https://www.cnb ...
- inout口在modelsim仿真的方法
//主要是// 和**********部分是关键 1 `timescale 1ns/1ns module tb(); reg main_clk; :] addr; reg FPGA_CS0;//FPG ...
- LeetCode 547 朋友圈
题目: 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋友的 ...
- Docker数据卷持久化
Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs. volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/ ...
- Linux一些常用操作命令
1.创建一个等同于root管理员的用户 useradd -u 0 -o -g root -G root -d /home/username username usermod -u 0 -o ...
- 前端生成水印之SVG方式
SVG:可缩放矢量图形(英语:Scalable Vector Graphics,SVG)是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式. SVG由W3C制定,是一个开放标准. (f ...
- Java中next()和nextLine()的区别
首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后 ...
- type() 和 isinstance()区别
a=111 # type() 返回数据类型 In: type(a) Out: int In: print(type(a)) Out: <class 'int'> # isinstance ...
- jupyter 中markdown使用
jupyter使用还是很方便的,尤其是喜欢MarkDown功能,在安装插件后可以非常清晰的看到整个文档的基本结构,下面介绍下MarkDownd的使用: 1.MarkDown必须是在命令模式是下使用的, ...