数据结构与算法 Python语言描述 笔记

数据结构

线性表包括顺序表和链表,python的list是顺序表,链表一般在动态语言中不会使用。不过链表还是会出现在各种算法题中。

  • 单链表
    • 逆转链表: leetcode 206
  • 双链表
  • 循环单链表

字符串 string

有一个重要的点就是字符串的匹配问题,其中比较重要的是无回溯匹配算法(KMP算法),算法比较复杂,重要的思想在于匹配过程中不回溯。实际复杂度是O(m+n), m和n分别是匹配模式串和目标串,一般m<<n。

  • 通配符 *和?
    • * 匹配任意一个字符串
    • ?匹配任意一个字符
  • 正则表达式:内容很多,这里就不讲了
    • 原始字符串:在字符串前面加r前缀,\不作为转义符

栈 stack

队列 queue

python3有内置的实现模块

二叉树

基本概念:路径,长度,层数。都比较好理解。
root的层数为0。
二叉树的性质:

  • 性质6.1:在非空二叉树第i层中最多有2^i个节点
  • 性质6.2:高度为h的二叉树最多有2^(h+1)-1个节点
  • 性质6.2:对于任何非空二叉树,如果其叶节点的个数为n0,度数为2的节点个数为n2,那么n0=n2+1
    满二叉树:所有分支节点的度数都是2
  • 性质6.4: 满二叉树的叶节点比分支节点多一个
    扩充二叉树:把一个二叉树的所有节点变成度数为2的节点(就是这棵树长了一圈叶子),旧节点叫内部节点,新节点叫外部节点。
  • 性质6.5:扩充二叉树的外部路径长度叫E, 内部路径长度叫I, n是内部节点数量, E=I+2*n
    完全二叉树:0-(h-1)层的节点都满,并且最后一层的节点都在左边。
  • 性质6.6:完全二叉树节点数为n,则高度h=floor(log2n)
  • 性质6.7:完全二叉树节点数为n, 并从0开始编号(按层次按左右)
    • root的编号是0
    • i的父节点是floor((i-1)/2)
    • if 2i+1<n, 则其left child: 2i+1 else 无left child
    • if 2i+2<n, 则其right chiild: 2i +2 else 无right child
      完全二叉树到线性结构有自然的双向映射
  • 深度优先遍历 depth first traversal, depth first search, DFS
    • 先根序遍历DLR
    • 中根序遍历LDR
    • 后根序遍历LRD
  • 宽度(广度)优先遍历, Breadth First Search, BFS:实现BFS一般要用到一个队列

先根序DFT

def preorder(t, proc):if not t:return Noneproc(t.val)preorder(t.left)preorder(t.right)

广度优先遍历 BFS

def levelorder(t, proc_):q = Queue()q.put(t)while not q.empty():n = q.get()if not n:continueq.put(n.left)q.put(n.right)proc_(n.val)
  • 合并两个二叉树:leetcode 617

堆:一个完全二叉树,并且,任意一个节点存放的数据先于其子节点的数据

小顶堆 大顶堆
堆和完全二叉树

  • 堆+一个元素 ->完全二叉树
  • 堆 去掉root 生成两个堆
  • 上面得到的两个堆+新的root -> 完全二叉树
  • 堆去掉最后一个节点,还是堆
    堆可以用来构建优先队列(py3已经实现了)
    由堆实现的优先队列,创建的时间复杂度是O(n),插入和弹出是O(logn)
    堆还可以用来排序

heap sort python实现

def heap_sort(nums_):def siftdown(nums_i, e, begin, end):i = beginj = begin*2+1while j < end:if j + 1 < end and nums_i[j+1] < nums_i[j]:j += 1if e < nums_i[j]:breaknums_i[i] = nums_i[j]i = jj = 2*j+1nums_i[i] = eend = len(nums_)for k in range(end//2, -1, -1):siftdown(nums_, nums_[k], k, end)for k in range((end-1), 0, -1):e = nums_[k]nums_[k] = nums_[0]siftdown(nums_, e, 0, k)return nums_[::-1]

heap sort c++实现 序列是数组
c++堆排序

排序算法 sort algorithm

  • 内排序:在内存上排序
  • 外排序
    归并是外排序的基础
    原地排序算法:空间复杂度为O(1)

稳定性
就是原序列里有一些Key一样的元素,排序之后能否保持不改变这部分序列的相对顺序。
比如key-value pair,按照key 排序:
(0, 100), (1, 50), (1, 60), (1, 45), (-2, 80)
希望排序之后(1, 50), (1, 60), (1, 45)这三个元素的相对位置不变。

适应性
如果一个排序算法对接近有序的序列工作的更快,就称这种算法具有适应性。

也就是说,如果本来已经快排序完了,还差一点,那么算法是能够利用这种优势迅速完成剩下的工作,还是推倒重来,按照原本既定的方法重新排序。

9.2 简单排序算法

  • 插入排序:已经有一个排序完的序列,从剩余序列中顺序拿出一个跟前面的序列挨个比较,寻找合适的位置插入。用于链表不错
  • 选择排序:
    • 简单选择排序:每次找到最小的元素放在最前面
    • 直接选择排序算法:把找到的最小元素和已排序序列后面的元素交换位置。是一个非常烂的算法。别用。
    • 堆排序:堆排序的问题是不稳定
  • 交换排序
    • 冒泡排序
    • 交错排序:从左向右扫描一遍,从右向左再扫描一遍

9.3快速排序

1169117-20171130173518151-983302537.png

转载于:https://www.cnblogs.com/theodoric008/p/7899523.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flask 跨域问题

一、什么是跨域 跨域是指&#xff1a;浏览器A从服务器B获取的静态资源&#xff0c;包括Html、Css、Js&#xff0c;然后在Js中通过Ajax访问C服务器的静态资源或请求。即&#xff1a;浏览器A从B服务器拿的资源&#xff0c;资源中想访问服务器C的资源。 同源策略是指&#xff1a;…

1.3 使用电脑测试MC20的电话语音功能

需要准备的硬件 MC20开发板 1个https://item.taobao.com/item.htm?id562661881042GSM/GPRS天线 1根https://item.taobao.com/item.htm?id531979567261IPEX接口转SMA接口转接线 1根https://item.taobao.com/item.htm?id531979903836GPS有源天线 1根https://item.taobao.com/i…

前端之 AJAX

AJAX参数详细列表 参数名类型描述urlString(默认: 当前页地址) 发送请求的地址。typeString(默认: "GET") 请求方式 ("POST" 、 "GET")。注意&#xff1a;其它 HTTP 请求方法&#xff0c;如 PUT 和 DELETE &#xff0c;但仅部分浏览器支持。tim…

html5--1.18 div元素与布局

1.18 div元素与布局 1.元素的分类2.div元素与布局 1、元素的分类 块元素:主要特征是会产生换行效果&#xff0c;自动与其他元素分离成两行&#xff1b;通常可以作为容器在内部添加其他元素。已经学过的块元素有&#xff1a; h1~h6;hr;ul;ol;p;table......... 内联元素:不会产生…

五个优秀的视频格式转换工具

电脑、手机、DVD播放机、PSP……这么多的东西都可以播放视频&#xff0c;但是视频格式又千差万别的&#xff0c;我们该怎么办&#xff1f;这里&#xff0c;我们介绍五个功能强大且易于使用的媒体转换器&#xff0c;用于转换不同类型的视频文件。 一、Super (Windows) Super是一…

艾宾浩斯记忆表格excel_Excel全年学习复习计划表(艾宾浩斯遗忘曲线)

最近准备考在职博士&#xff0c;刷刷学历&#xff0c;不得不又拿起必考的英语来&#xff0c;发现由于这几年敲代码&#xff0c;日常生活词汇忘了很多&#xff0c;只好买本考博词汇背诵&#xff0c;不过三十而立的人背起来确实费劲了&#xff0c;所以开始寻找好的背诵方法。又想…

七个帮助你处理Web页面层布局的jQuery插件

1.UI.Layout jQuery UI布局插件官方网站&#xff1a;http://layout.jquery-dev.com/index.cfm使用大小可折叠的嵌套面板和大量选项创建高级UI布局。布局可以创建任何你想要的UI外观; 从简单的标题或侧边栏到具有工具栏&#xff0c;菜单&#xff0c;帮助面板&#xff0c;状态栏…

前端之 CSS

CSS介绍 CSS&#xff08;Cascading Style Sheet&#xff0c;层叠样式表)定义如何显示HTML元素。 当浏览器读到一个样式表&#xff0c;它就会按照这个样式表来对文档进行格式化&#xff08;渲染&#xff09;。 CSS语法 CSS实例 每个CSS样式由两个组成部分&#xff1a;选择器…

在Window下编译OpenH323

前言&#xff1a; 本文只提供VC6.0的编译说明&#xff0c;如果想知道VC.Net下的编译过程请参看原文。 原文 &#xff1a; http://www.voxgratia.org/docs/pwlib_windows.html#msvc_headers 作者 &#xff1a;Craig Southeren 翻译 &#xff1a; Richard 原文…

matlab立体坐标定位_无惧密集建筑,小天才立体定位技术带来最强定位体验

如今&#xff0c;在可穿戴设备市场中&#xff0c;智能手表占据相当大一部分。而作为核心功能之一的定位&#xff0c;在智能手表中发挥着不可替代的作用&#xff0c;尤其是对于儿童电话手表而言。并且&#xff0c;在技术飞速进步&#xff0c;产品迭代加快的当前&#xff0c;儿童…

svga文件如何查看_电脑隐藏文件?如何查看隐藏文件 方法简单易学

大家好&#xff0c;我是小白一键重装软件的客服。如何查看隐藏文件呢&#xff1f;有时候不小心把文件夹勾选隐藏后文件就消失了&#xff0c;到底是怎么回事呢&#xff1f;其实这个是电脑上面一些设置开启了文件隐藏的功能哦&#xff0c;那么下面小白系统带你了解下如何查看隐藏…

化工图纸中LISP_必备干货丨石油化工安装工程质量与成本控制研究

对于整个石油化工工程来说&#xff0c;石油化工的安装工程在其中是最重要并且最核心的一个环节&#xff0c;其对石油化工工程的质量有着决定性的作用。从客观的角度来说&#xff0c;如果石油化工安装工程在实际的施工过程中出现任何的问题&#xff0c;就会威胁到周边人群的生命…

[原创]windows server 2012 AD架构 试验 系列 – 15解决AD复制冲突

[原创]windows server 2012 AD架构 试验 系列 – 15解决AD复制冲突 这节我详细说下 ADDS使用stamp来作为解决冲突的依据 Stamp由三块组成 Version, time stamp , source DC GUID (发生对象修改行为的源DC的GUID) 一般来说冲突分为几下情况: 1-属性冲突 你可以用repadmin来查看版…

vue新手入门——vue-cli搭建

首先说明&#xff0c;以下内容vue官网都有文档&#xff0c;如果觉得麻烦啰嗦&#xff0c;请移步至 安装-vue.js 。 准备工作&#xff1a; 1.下载并安装node环境&#xff0c;一般情况下安装好node之后&#xff0c;npm也会安装好。具体安装的话&#xff0c;百度大概能帮得上忙。 …

如何看懂源代码–(分析源代码方法)

我们在写程式时&#xff0c;有不少时间都是在看别人的代码。例如看小组的代码&#xff0c;看小组整合的守则&#xff0c;若一开始没规划怎么看&#xff0c; 就会“噜看噜苦&#xff08;台语&#xff09; ” 不管是参考也好&#xff0c;从开源抓下来研究也好&#xff0c;为了了解…

LNMP环境添加第三方模块

一.在LNMP环境下添加memcache模块 1.安装依赖库(libevent) [rootnode1 ~]# tar xvf libevent-2.0.21-stable.tar.gz [rootnode1 ~]# cd libevent-2.0.21-stable [rootnode1 libevent-2.0.21-stable]# ./configure --prefix/usr/local/libevent [rootnode1 libevent-2.0.21-sta…

学生成绩管理系统-程序维护

托管平台地址&#xff1a;https://gitee.com/lucess/StudentMarkManage.git 小组名称:干翻沈师 程序运行方法: 1、后台服务&#xff1a;进入项目文件夹执行 python TeamProject.py runsercer 0.0.0.0:5050 2、前台服务&#xff1a;进入./WEB-INFO/TeamProjectWeb 文件夹执行 ya…

改需求

转载于:https://www.cnblogs.com/gw2010/p/7856484.html

架构师一般做到多少岁_软件测试可以做到多大岁数?

做这个行业也几年了&#xff0c;经常听到有人问&#xff0c;软件测试这个行业能干到多少岁&#xff0c;当然里边包含想要进入这个行业的和已经在这个行业里边发展的&#xff01;基本上软件测试可以分为三条职业发展路线&#xff1a;技术路线、管理路线、产品路线&#xff01;目…

day13 迭代器和生成器

一、上节回顾和作业讲解&#xff1a; 1、如果这个网页没有被爬取过就真的去访问这个网页&#xff0c;否则就返回之前访问的时候缓存文件中的内容 &#xff08;重要的例子&#xff09; from urllib.request import urlopen def wrapper(func):def inner(*args, **kwargs):with o…