python 数据结构与算法
要点概论:
1.掌握数据结构的概念
2.了解算法
1.数据结构:
数据结构研究各种相关的数据信息如何表示,组织,存储与加工处理。数据结构中的关系指数据间的逻辑关系,与数据的物理存储无关,是从具体问题抽象出来的数学模型。
数据结构一般有线性结构和非线性结构。
1.1 线性结构
线性结构是指元素与元素之间是一对一的关系,一般有线性表,栈和队列等结构。
1.1.1 线性表
(a0,a1,......,an)(n > 0)如图所示:
1)存在唯一的“第一元素”a0
2)存在唯一的“最后元素”an
3)除最后元素an之外,各元素均有唯一的后继
4)除第一元素a0之外,各元素均有唯一的前驱
1.1.2 栈和队列
从数据结构角度讲,栈和队列均是操作受限的线性表,两者不同之处在于操作的特殊性(栈为LIFO,即后进先出:队列为FIFO,即先进先出)。
栈具有如下操作
1) 入栈(PUSH),最先插入的元素放在栈的底部
2) 出栈(POP),最后插入的元素最先出栈
队列指允许在线性表的一端进行插入,而在另一端进行删除。
1.2 非线性结构
非线性结构是至少在一个数据元素有两个或两个以上的直接后继(或直接前驱)的数据结构,一般有数和图两种。
1)在树形结构中,数据元素之间有着明显的层次关系,虽然每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。例如人类的族谱。
2 在图结构中,任意两个数据元素之间都可能相关,因此可用于描述多对多的关系。
2. 查找和排序
2.1 查找
1)顺序查找:
顺序查找又称线性查找,其查找方法为:从表的一端开始,向另一端逐个用给定值K与关键码进行比较,若找到,查找成功,若整个表检测完,仍未找到与K相同的关键码,则查找失败。
2)折半查找(二分查找算法)
折半查找的前提是线性表已经按照从小到打的顺序排列:
简单版:
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]def func(l,aim):mid = (len(l)-1)//2if l:if aim > l[mid]:func(l[mid+1:],aim)elif aim < l[mid]:func(l[:mid],aim)elif aim == l[mid]:print("bingo",mid)else:print('找不到') func(l,66) func(l,6)
View Code
升级版:
def search(num,l,start=None,end=None):start = start if start else 0end = end if end else len(l) - 1mid = (end - start)//2 + startif start > end:return Noneelif l[mid] > num :return search(num,l,start,mid-1)elif l[mid] < num:return search(num,l,mid+1,end)elif l[mid] == num:return mid
View Code
3)分块查找(研究中)
2.2 排序
排序是将一组无序的序列调整为有序的序列,排序的过程是一个逐步扩大有序子序列(对应的同步减小无序子序列)的过程:
基于不同的扩大有序子序列的方法,内部排序方法大致可分下列几种类型:插入类,交换类,选择类和归并类。
1)插入类:将无序子序列中的一个记录插入到有序子序列中,增加有序子序列的长度
1.基于顺序查找的插入类排序称为直接插入排序
2.基于折半查找的插入类排序称为折半插入排序
3.基于逐趟缩小增量的插入类排序称为希尔排序
2)交换类:交换类排序通过交换无序子序列中的元素从而得到其中关键字最小或最大的元素,并将它加入有序子序列中,以此方法增加有序子序列的长度。
交换类排序分为冒泡排序,快速排序等,这里简单说明一下冒泡排序:
冒泡排序是将待排列的数组元素看成是竖着排列的“气泡”,最小的元素为最小的“气泡”,较小的元素为较小的“气泡”。每一遍处理,就是自底而上检查一遍“气泡序列”,
并时刻注意两个相邻元素的顺序是否正确,如果发现两个相邻“气泡”的顺序不对,例如轻的“气泡”在重的“气泡”下面,则交换它们的位置。
一遍处理之后,最轻的“气泡”就浮到了最高位置;第二遍处理之后,次轻的“气泡”就浮到了次高位置。如此反复,共处理 n - 1 次,就可以完成“气泡”的有序排列。
3)选择类:选择类排序从无序子序列中选择关键字最小或最大的元素,并将它加入到有序子序列中,以此方法增加有序子序列的长度。
选择类排序分为简单选择排序,树形选择排序和堆排序。
4)归并类:归并类排序通过归并两个或两个以上的有序子序列,逐步增加有序子序列的长度。
转载于:https://www.cnblogs.com/HZY258/p/8450131.html
python 数据结构与算法相关推荐
- Python天天美味(32) - python数据结构与算法之堆排序
1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data): for i in ran ...
- python数据结构与算法13_python 数据结构与算法 (13)
python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...
- python leetcode_leetcode 介绍和 python 数据结构与算法学习资料
for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...
- Python数据结构与算法(二)栈和队列
本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...
- Python数据结构与算法(一)列表和元组
本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...
- Python 数据结构与算法——快排
Python 数据结构与算法--选取算法(TopK) 如果说快速选取法所代表的是剪枝式的遍历操作--在递归树中找出一条通往第 k<script type="math/tex" ...
- Python 数据结构与算法——从二分图到寻找最大排列(Maximum Permutation)
假设现在有 8 位有着特殊癖好的人去买票看电影,其中有一部分人得到了自己喜欢的座位,但大多数人并不满意.现在的问题是,如果这些人各自都有自己喜欢的座位(喜欢的座位有重叠,这是进行最大排列的前提,否则无 ...
- Python数据结构与算法(4.1)——递归
Python数据结构与算法(4.1)--递归 0. 学习目标 1 递归 1.1 递归的基本概念 1.2 递归的重要性 1.3 递归三原则 1.4 递归的应用 2 递归示例 2.1 列表求和 2.2 汉 ...
- Python数据结构与算法(3.5)——双端队列
Python数据结构与算法(3.5)--双端队列 0. 学习目标 1. 双端队列的基本概念 1.1 双端队列的基本概念 1.2 双端队列抽象数据类型 2. 双端队列的实现 2.1 顺序双端队列的实现 ...
- Python数据结构与算法(3.1)——栈
Python数据结构与算法(3.1)--栈 0. 学习目标 1. 栈的基本概念 1.1 栈的基本概念 1.2 栈抽象数据类型 1.3 栈的应用场景 2. 栈的实现 2.1 顺序栈的实现 2.2 链栈的 ...
最新文章
- 大型网站系统架构演化之路(转)
- PyQt5 技巧篇-便于文字排版的等宽字体推荐:Source Code Pro的中文为英文两倍宽字体
- 简单实现一边固定,另一边自适用
- 有关gcc,make,gdb的知识
- 两个分数化简比怎么化_我学《分数的意义》心得
- linuxpip安装python包_Windows+Linux安装Python包管理工具pip
- python打印网页成pdf_vue中将网页打印成pdf
- 你说,Redis如何实现键值自动清理?
- 如何在Linux上使用netstat命令查证DDOS***
- 单例模式 java 实现_单例模式
- java 存储过程简单例子
- 【毕业设计】jsp+sql毕业生招聘系统毕业设计(系统+论文+英文文献+综合材料)
- postman测试JSON参数接口
- 本体论:Gene Ontology (基因本体)
- 高可用架构篇:【2】ActiveMQ高可用+负载均衡集群的安装、配置、高可用(多节点)
- java题目青蛙跳杯子_蓝桥杯 历届试题 青蛙跳杯子
- 正则的replace方法详解
- 【地理空间】初识OpenStreetMap
- 微信封号被限制的几种原因及解决方法
- hadoop之大数据生态系统的前世今生
热门文章
- Python 3 - 如何下载视图和保存证书
- 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第一部分
- php返回json套数组_教你PHP怎么不用框架写优雅的中小网站
- java未知对象调用其某个方法_引用一个类的属性或调用其方法,必须以这个类的对象为前缀。...
- nginx防火墙在哪设置_Nginx 基本使用介绍
- python 打包文件夹_Python打包文件夹(zip/tar/
- io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature.
- python大学_大学为什么不先开python?
- Java使用easyexcel读大文件
- html 如何实现一条竖线边上有 刻度_Android H5交互Webview实现localStorage数据存储