python数据结构和算法

1、图灵机

图灵机组成:
    一条无限长的分格纸带,每格可以记录1个符号
    一个读写头,可在纸带上左右移动,能读出和擦写格子的字符
    一个状态寄存器,记录有限状态中的1个状态
    一系列有限的控制规则:
        • 某个状态,读入某个字符时:
        • 要改写成什么字符
        • 要如何移动读写头
        • 要改变为什么状态

--图灵机规则是一个五元组:
    [当前状态 || 当前读入的字符 || 要改成什么字符 || 如何移动读写头 || 最后改成什么状态]

2、一般问题分类

--what
    --面向判断与分类的问题
    --可以通过有限树状分支对问题进行定位和解决

--why
    --面向求因与证明的问题
    --基本是从不言自明的公理出发,逐步证明和解释问题

--how
    --面向过程与构建的问题
    --有穷步骤下解决问题

3、计算复杂型

--可计算:最初只是关注可行性,并不计算具体消耗的时间和空间

--计算复杂性主要涉及到:
    --着重关注具体要花费多少计算步骤或多少存储空间
    --定义一些衡量指标,对问题的难易程度(所需的执行步骤数/存储空间大小)进行分类,是计算复杂性理论的研究范围
    --计算复杂性理论研究问题的本质,将各种问题按照其难易程度分类,研究各类问题的难度级别,并不关心解决问题的具体方案


--而算法研究的问题:
    --在不同现实资源约束情况下的不同解决方案,致力于找到效率最高的方案

--不可计算问题:
    --没有解决方案的问题
    --有解决方案,但是根本无法实现

    --举例:停机问题   无理数问题

4、程序 = 算法 + 数据结构

--程序设计语言需要为算法的实现提供实现“过程”和“数据”的机制,具体表现为“控制结构”和“数据类型”

--程序设计语言均有语句对应控制结构:
    --顺序处理、分支选择、循环迭代

--程序设计语言也提供最基本的数据类型来表示数据,如整数、字符等
    --但对于复杂的问题而言,直接使用这些基本数据类型不利于算法的表达

5、算法设计

为了控制问题和问题解决过程的复杂度,利用抽象来保持问题的“整体感”而不会陷入到过多的细节中去

--过程抽象:
    --对现实问题进行建模的时候,对算法所要处理的数据,也要保持与问题本身的一致性,不要有太多与问题无关的细节

--数据抽象:
    --“过程抽象”启发我们进行“数据抽象”
    --相对于程序设计语言中基本数据类型,抽象数据类型(ADT:Abstract Data Type)是对数据进行处理的一种逻辑描述,并不涉及如何实现这些处理
    --ADT:同一ADT可以采用不同的数据结构来实现,采用程序设计语言的控制结构和基本数据类型来实现ADT所提供的逻辑接口,属于ADT的“物理”层次

    --比如说:list 插入 删除 排序等  ||  字典 插入 抽取  ||  set集合 去重  这些都是物理层次,二通过这些功能实现某一个逻辑模型是其数据接口的逻辑层次

    --数据抽象的好处:对数据实现“逻辑”层次和“物理”层次的分离,可以定义复杂的数据模型来解决问题,而不需要立即考虑此模型如何实现Python 数据结构与算法

   

6、大O数量级:这个概念都讲臭了没啥意思,主要是自己练习着去分析

7、变位词算法

--题目:
    所谓“变位词”是指两个词之间存在组成字母的重新排列关系
    如:heart和earth,python和typhon
    为了简单起见,假设参与判断的两个词仅由小写字母构成,而且长度相等

--解题思路:
    解题目标:写一个bool函数,以两个词作为参数,返回这两个词是否变位词

--解题方案一:
    将词1中的字符逐个到词2中检查是否存在存在就“打勾”标记(防止重复检查)
    如果每个字符都能找到,则两个词是变位词只要有1个字符找不到,就不是变位词
    数量级为O(n2)

--解题方案二:
    将两个字符串都按照字母顺序排好序再逐个字符对比是否相同,如果相同则是变位词有任何不同就不是变位词
    数量级是O[nlog(n)]

--解题方案三:暴力破解
    将s1中出现的字符进行全排列,再查看s2是否出现在全排列列表中

--解题方案四:
    对比两个词中每个字母出现的次数,如果26个字母出现的次数都相同的 话,这两个字符串就一定是变位词

    为每个词设置一个26位的计数器,先检查每个词,在计数器中设定好每个字母出现的次数

    计数完成后,进入比较阶段,看两个字符串的计数器是否相同,如果相同则输出是变位词的结论

8、python数据结构语言性能

--主要测试python中 list dict 实现各种数据结构的时间效率

--总的方案就是,让最常用的操作性能最好,牺牲不太常用的操作
    80/20准则:80%的功能其使用率只有20%

--list :
    
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值