算法与数据结构读后感,数据结构与算法分析读后感
首先总结几个概念算法的概念。五个特性:投入、产出、贫困、确定性、可行性。
算法是计算机处理信息的本质。因为计算机程序本质上是一种算法,它将精确的步骤传达给计算机来执行指定的任务。通常,算法在处理信息时,是从输入设备或数据的存储地址读取数据,将结果写入输出设备或某个存储地址,然后调用。
算法是解决独立问题的方法和思想。
对于算法来说,实现的语言不重要,思想才重要。
有很多语言来描述算法的实现版本,包括C描述、C描述和Python描述,但目前实现是用Python语言描述的。
数据结构学生的信息可以用列表或字典保存。在这两种保存下搜索学生信息时,时间的复杂度是不一样的。
为了解决这个问题,我们需要保存数据,并根据保存数据的方式来设计和实现算法。如果用不同的方式保存数据,就需要用不同的算法来处理。算法解决问题的效率越高,我们就越需要考虑如何保存数据。这是数据结构。
算法和数据结构密不可分。数据是一个抽象的概念,对它进行分类就可以得到编程语言的基本类型。比如int,float,char等。数据元素之间没有独立的关系,只有特定的关系,这些关系就是结构。数据结构是数据对象中数据元素之间的关系。
Python为我们提供了很多现成的数据结构类型。这些系统都是自己定义的,不需要自己定义的数据结构都是Python内嵌的数据结构,比如列表、元组、字典等。另一方面,Python系统也有未定义的数据组织方法。您需要自己定义如何组织这些数据。这些数据的组织被称为堆栈、队列和其他Python的扩展数据结构。
算法和数据结构之间的差异
数据结构只是静态地描述了数据元素之间的关系。
高效的程序需要根据数据结构来设计和选择算法。
程序=数据结构算法
总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题的载体。
仓库
类型需要几个字节的内存大小(不同的类型占用不同的空间)-存储。
我取出的字节类型有哪些?Int 4字节char 1字节
的所有高级数据结构都有基本的数据结构配置。
例如,int占用的4字节int 1从000000000000000000000000000000000000000000000000000000000000000000000000000000000000000开始。
八个。程序表
将数据存储在连续的内存区域。
图A显示了序列表的基本形式。数据元素本身是连续存储的。每个元素占用的存储单元大小是一定的(数据类型相同),每个元素的下标就是它的逻辑地址。另一方面,存储单元物理地址(实际存储器地址)可以通过将逻辑地址(第I个单元)和存储单元的大小(c)的乘积加到存储区域的头地址(10c)和(e0)来计算。
位置(ei)位置(ei ) c*i
因此,在访问一个指定的特征时,不需要从头遍历,通过计算就可以得到对应的地址,其时间复杂度为o(1)。
如果元素大小不一致,需要将实际的数据元素以图B中外部元素的形式单独存储,并保存序列表中每个元素位置对应的元素的地址信息,即链接。因为每个链接都需要相同的存储量,所以根据上面的公式,可以计算出元素链接的存储位置,并且可以沿着链接找到实际存储的数据元素。注意,图B中的C是存储链接目标所需的存储量,而不是数据元素的大小。通常这个量很小。
图B中的有序表也叫实际数据的索引,是最简单的索引结构。
0下标可以理解为偏移量,所以在寻址时特别有用。
表的结构。
一个表的完整信息由两部分组成:表中元素的集合,以及正确操作必须记录的信息,即关于表整体情况的信息。这些信息主要包括两个元素存储的容量和当前表中现有元素的数量。
表格排序的两种基本方式
图A是一个集成结构,存储表信息的单元和元素存储区连续排列在一个存储区中,两个部分数据的整体形成一个完整的顺序表对象。
集成结构强大且易于管理。然而,由于数据元素存储是表对象的一部分,所以在创建顺序表之后,元素存储将是固定的。
图B显示了分离的结构。只有整个表的相关信息,即元素的容量和数量,存储在表对象中。实际的数据元素存储在另一个独立的元素存储器中,并与基本表对象相链接。
替换元素存储
集成结构由于序列表的信息区和数据区是连续存储的,如果要改变数据区,只能整体转移。即,整个序列表的对象(存储序列表的结构信息的区域)改变。
如果要交换数据区,隔离结构只需要更新表的信息区中数据区的链接,顺序表的对象保持不变。
元素存储扩展
通过使用分离结构顺序表,可以用更大的区域替换数据区,从而在不改变表对象的情况下扩展数据区,不需要改变所有使用这个表的地方。只要程序运行环境(计算机系统)中有可用内存,这种表结构就不会满,也就不可操作。人们把序列表通过这种技术实现了
动态序列表,因为它的容量可以在使用中动态变化。
两种扩张策略
为每次扩展添加固定数量的存储位置的策略,例如为每次扩展添加10个元素位置,可以称为线性增长。
特点:节省空间,但是扩展操作频繁,操作次数多。
每次扩展的容量加倍,例如每次扩展的存储空间加倍。
特点:减少了扩展操作的执行次数,但可能会浪费空间资源。用空间换时间,推荐方式。
表的顺序操作
1)插入到未插入的2)按顺序插入O(n) 3)无序插入。
2)尾部删除2)保序删除3)保序删除
Python中的序列表
Python中的List和tuple采用了序列表的实现技术,拥有前面讨论的序列表的所有属性。
Tuple是不可变类型,即不可变序列表,所以不支持任何改变其内部状态的操作。在其他方面,它类似于list。
列表的基本实现技术
Python类型列表是一个元素个数可变的线性表,可以添加和删除元素,在各种操作中保持已有元素的顺序(即保序)。它还具有以下行为特征:
对于基于下标(位置)的高效元素访问和更新,时间复杂度应为O(1);
为了满足这个特性,应该采用顺序表技术,表中的元素存储在一个连续的存储区域中。
可以添加任何元素,在不断添加元素的过程中,表对象的标识符(由函数id获得的值)保持不变。
为了满足这个特性,需要能够改变元素存储区域,并且要保证存储区域改变时列表对象的id不变,只能采用分离实现技术。
在Python的官方实现中,list是一种动态序列表,通过分离技术实现。这就是为什么使用list.append(x)(或list.insert(len(list),x),即在尾部插入)比在指定位置插入元素更高效的原因。
在Python的正式实现中,list实现采用了以下策略:在创建一个空表(或者非常小的表)时,系统分配一个可以容纳8个元素的存储区域;当执行插入操作(插入或追加)时,如果元素存储区已满,则用4倍大的存储区替换它。但如果此时牌桌已经很大了(目前的门槛是50000),那就改变策略,翻倍。引入了这种策略变化