少儿Python编程7-计算机数据结构与算法二

一、算法

1.定义:算法是指解题方案的准确而完整的描述。算法是模型分析的一组可行的,确定的和有穷的规则。

2.特征:

a)有穷性(Finiteness):算法必须能在执行有限个步骤之后终止。

b)确切性(Definiteness):算法的每一步骤必须有确切的定义。

c)输入项(Input):算法有0个或多个输入,以刻画运算对象的初始情况。

d)输出项(Output):算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;

e)可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。

3.要素

a)对数据对象的运算和操作: 算术运算、逻辑运算、关系运算、数据传输。

b)算法的控制结构:算法的执行顺序(顺序、选择、循环)

4.复杂度

a) 时间复杂度:是指执行算法所需要的计算工作量,可以用算法所执行的基本运算次数度量。

b) 空间复杂度:是指执行算法所需要的内存空间。包括算法程序、输入的初始数据以及算法执行过程中需要的额外空间。

二、常见的数据结构[1]

1.数组

基本操作:读取O(1)、更新O(1)、插入O(n)、删除O(n)、扩容O(n)。

2.链表

单向链表的每一个节点又包含两部分,一部分是存放数据的变量data,另一部分是指向下一个节点的指针next。

基本操作:读取O(n)、更新O(1)、插入O(1)、删除O(1)。

数组和链表对比

数组:适合多读、插入删除少的场景。

链表:适用于插入删除多、读少的场景

3.栈

栈是一种线性逻辑数据结构,栈的元素只能后进先出。最早进入的元素存放的位置叫做栈底,最后进入的元素存放的位置叫栈顶。栈只能从一端进出。

基本操作:入栈O(1)、出栈O(1)。

4.队列

队列是一种线性逻辑数据结构,队列的元素只能后进后出。队列的出口端叫做队头,队列的入口端叫做队尾。一头进,另一头出。

基本操作:入队 O(1)、出队 O(1)。

5.哈希表

一种逻辑数据结构,提供了键(key)和值(value)的映射关系。

基本操作:写入:O(1)、读取:O(1)、扩容O(n)。

6.树

树是由根节点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的节点,所定义的关系称为父子关系。父子关系在树的节点之间建立了一个层次结构。在这种层次结构中有一个节点具有特殊的地位,这个节点称为该树的根节点,或称为树根。

三、算法复杂度

简单的说,算法就是计算机解题的过程。 在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是算法的逻辑形式,后者是算法的代码形式。

如:求1+2+3+...998+999+1000=?

算法1:依次相加: 循环处理 ---处理999次

算法2:高斯解法:首尾相加*500 (1+1000)*1000/2 ---处理3次

算法3:使用递归实现---处理100次

sum(100) = sum(99)+100

sum(99)  = sum(98)+99

 .....          

sum(2) = sum(1)+2

sum(1) = 1

评价算法优劣的依据:复杂度(时间复杂度和空间复杂度)

计算机资源最重要的是时间和空间资源,因此复杂度分为时间和空间复杂度,时间复杂度是指执行算法所需要的计算工作量,空间复杂度是指执行这个算法所需要的内存空间。

1.时间复杂度(Time Complexity)

一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。 一个算法中的语句执行次数称为语句频度或时间频度。

2. 空间复杂度(Space Complexity)

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。

算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。

四、排序(了解)

排序(sorting)的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。

五、查找(了解)

从大量数据中找出需要的数据。

六、数据结构思维导图

六、参考资料

[1]: 百度安全验证

猜你喜欢

转载自blog.csdn.net/weixin_40239288/article/details/125887026
今日推荐