攻克数据结构和算法——第一天:绪论

简介: 攻克数据结构和算法——第一天:绪论

一,数据结构的基础概念


0e07fbc60170404c8eb880a73a7aaf0e.png


程序(程序设计):为计算机处理问题编制的一组指令集合。


算法:处理问题的策略。


数据结构:问题的数学模型。


1,计算机的应用涉及到的更多的是非数值计算的问题。即计算机处理的对象是纯粹的数值以外的表格、图像、声音等各种具有一定结构的数据。


计算机应用系统中的两个关键问题:


1)表示:对象及其关系在计算机中的表示。只有对象及其相互关系已存储在计算机中,才能被进一步

处理;

2)操作:对对象进行处理,访问。


2,相关名词:


◆数据(Data)


数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合


数据包含整型、实型、布尔型、图象、字符、声音等一切可以输入到计算机中的符号集合。


◆数据元素(Data Element)


数据元素(Data Element) :是组成数据的基本单位,是数据集合的个体,在计算机中通常作为一个整体进行考虑和处理。


fd011a76c29b4e68b6699fe589cfb0f6.png


一个数据元素可由一个或多个数据项(Data Item )组成,数据项是有独立含义的最小单位


◆数据对象(Data 0bject )


数据对象是性质相同的数据元素的集合,是数据的一个子集。(整数,浮点数)


◆数据结构(Data Structure)


是指相互之间存在一种或多种特定关系的数据元素集合,是带有结构的数据元素的集合,它指的是数据元素之间的相互关系,即数据的组织形式。


◆数据类型(Data Type)


数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。


例如:


在高级语言中,整型类型的取值范围为: -32768~+32767,

运算符集合为加、减、乘、除、取模,

即+、一、*、/、%。



原子类型:其值不可分解。如C语言中的标准类型(整型、实型、字符型)


结构类型:其值是由若干成分按某种结构组成的,因此是可以分解的,并且它的成分可以是非结构的,也可以是结构的。


◆数据抽象与抽象数据类型


抽象数据类型(Abstract Data Type):指基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。


抽象数据类型确定了一个模型,但将模型的实现细节隐藏起来;它定义了一组运算,但将运算的实现过程隐藏起来。


例如:线性表的抽象数据类型的描述:


ADT Linear list{
数据元素        所有a;属于同一数据对象,i=1, 2,.....n;        n>=0;
逻辑结构        所有数据元素a; (i=1, 2, ..., n-1)存在次序关系
                        <a i, a i+1>, a无前趋,an无后继;
操作        设L为Linear_ list
                Initial(L):初始化空线性表; 
                Length(L):求线性表的表长;
                Get(L,i):取线性表的第i个元素;
                Insert(L,b):在线性表的第i个位置插入元素b;
                Delete(L,i):删除线性表的第i个元素;
} ADT Linear list


ADT有两个重要特征:


①数据抽象:用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)

②数据封装:将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。


3,数据结构的内容:


逻辑结构、存储结构和运算集合。


按某种逻辑关系组织起来的一批数据,按一定的映象方式把它存放在计算机存储器中,并在这些数据上定义了一个运算的集合,就叫做数据结构。


逻辑结构:指数据元素之间逻辑关系描述。

形式化描述: Data_ Structure=(D,R)

其中D是数据元素的有限集,R是D上关系的有限集。


四类基本的结构

集合结构、线性结构、树型结构、图状结构。

集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其它关系。


存储结构:逻辑结构在计算机中的存储映象,是逻辑结构在计算机中的实现,它包括数据元素的表示和关系的表示。


数据元素的表示:用若干个二进制“位串”表示


数据元素之间关系在计算机中的表示方法:

顺序映象(顺序存储结构)

非顺序映象(非顺序存储结构)


运算集合:在计算机中进行运算操作的集合。


二,算法及其时间复杂度


1,算法的特性:


1.有限性:有限步骤之内正常结束,不能形成无穷循环。

2.确定性:算法中的每一一个步骤必须有确定含义,无二义性得以实现。.

3.输入:有多个或0个输入。

4.输出:至少有一个或多个输出。

5.可行性:原则上能精确进行,操作可通过已实现基本运算执行有限次而完成。


2,算法设计的要求:


1)正确性:


一般可分为四个层次:

(1)程序不含语法错误;

(2)程序对于几组输入数据能够得出满足规格说明要求的结果;

(3)程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;

(4)程序对于一切合法的输入数据都能产生满足规格说明要求的结果。


2)可读性:


一个程序的命名一般应该按照它的含义,函数的整个结构都要非常的清晰。


3)健壮性:


抗病毒,抗干扰能力


4)高效率和低存储量的要求:


一般我们需要一-个程序的效率是比较高的,占用的存储空间是比较少的。


3,算法,语言,程序的关系:


1.算法:描述了数据对象的元素之间的关系(包括数据逻辑关系、存贮关系描述)

2.描述算法的工具:算法可用自然语言、框图或高级程序设计语言进行描述。

(本课程选择类C语言描述算法。)

3.程序是算法在计算机中的实现。


4,算法的性能分析:


1)评价算法的标准:


评价算法的标准:

一般来说评价一个算法的好坏就是看它的时间和空间,因为空间现在的内存都很大,考虑的比较少,我们主要考虑算法的时间复杂度怎样进行度量。


评价一个算法主要看这个算法所占用机器资源的多少,而这些资源中时间代价与空间代价是两个主要的方面,通常是以算法执行所需的机器时间和所占用的存储空间来判断一个算法的优劣。


2)性能评价:


对问题规模N与该算法在运行时所占的空间S与所耗费的时间T给出一个数量关系的评价。


3)算法效率的衡量:


通常有两种衡量算法效率的方法:


事后统计法

缺点: 1.必须执行程序

       2.其它因素掩盖算法本质(硬件)


事前分析估算法


编写完算法之后,再去粗略计算时间复杂度


和算法执行时间相关的因素:


1)算法选用的策略

2)问题的规模

3)编写程序的语言

4)编译程序产生的机器代码的质量

5)计算机执行指令的速度

一个算法耗费的时间=算法中每条语句的执行时间之和


若不考虑机器硬、软件因素,可以认为算法“运行工作量的大小是问题规模的函数。


6,关于算法执行时间:


●定义:


一个算法的执行时间大致上等于其所有语句执行时间的总和,对于语句的执行时间是指该条语句的执行次数和执行一-次 所需时间的乘积。


●分析:


不是针对实际执行的时间精确地算出算法执行具体时间,而是针对算法中基本操作语句(原操作)的执行次数做出估计,从中得到算法执行时间的信息。


语句频度是指该语句在一个算法中重复执行的次数。


7,算法的时间复杂度:


算法的时间复杂度,即是算法的时间量度记做:T(n)=O(f(n))


例如:

(1) x=x+1; 时间复杂度为0(1), 称为常量阶; .

(2) for(i=1;i<= n; i++) x=x+1;时间复杂度为O(n), 称为线性阶;

(3) for(i=1;i<= n; i+)

for (j=1;j<= n; j++) x=x+1;时间复杂度为0(n2),称为平方阶。


b31965dcc2c04ce78d1841ceb3dea775.png

524c73d2fba549098d3d707b61a4575f.png


8,算法性能评价:


对问题规模N与该算法在运行时所占的空间与所耗费的时间T给出一个数量关系的评价。


一个算法的执行时间大致上等于其所有语句执行时间的总和。


9,算法的空间复杂度:


作为算法所需存储空间的量度,记做:

S(n)=O(f (n))


算法的存储量包括:

1.输入数据所占空间

2.程序本身所占空间

3.辅助变量所占空间


10,例子:


问题:编写程序实现用一元人民币换成

分、两分、五分的硬币共50枚。

分析:假设一分、两分、五分的硬币各

为x, y, z枚。

则有:


x+y+ z= 50

x+ 2y+ 5z= 100


ba36aa80d3304cc7bbeaa7f5a1889564.png


af65cf00f4be48f8858ef8a8efb7d9b7.png


c0641389464e4ce58d7d569657fd48c0.png

a77cc857ca12412281387efed01ef719.png


对于一个特定的问题,我们可能会有很多的解决方法,但是不同的方法各有利弊,所以说算法的设计至关重要。


综上,我们提出以下讨论:


1,什么是数据类型?数据类型的作用是什么?


数据类型解决了“存”的问题:它决定了使用这个类型需要开辟空间的大小以及内存中的数据是如何存储的;

数据类型解决了“取(读)”的问题:它改变了看待内存空间的视角,比如在内存中同样的两块4个字节的空间,存放着同样的二进制码,如果这两块内存对应的两个变量类型不一样,那么它们的意义也就不一样了。


解决指定问题的一种解决方案。定义区分各种数据变量,以便计算机存储,处理。


2,数据结构四种逻辑结构的特点是什么?


1.数据4种逻辑结构:(1)集合结构:数据元素之间没有任何关系。(2)线性结构:数据元素之间定义了线性关系。1对1。(3)树形结构:数据元素之间定义了层次关系。1对多。(4)图状结构:数据元素之间定义了网状关系。多对多。2.(1)集合结构。集合任何两数据元素间都没逻辑关系,组织形式松散。(2)线性结构。线性结构 结点按逻辑关系依排列形锁链。(3)树形结构。树形结构具支、层特性,其形态点象自界树。(4)图状结构。图状结构结点按逻辑关系互相缠绕,任何两结点都邻接。扩展资料:1.数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。2.数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。


3,


在一重循环中的语句,其时间复杂度一定是O(n)吗?


例如:


   void fun(int n)
    {
        int i=0, s=0;
        while(s<n)
        {
                i++;
                s=s+i;;
        }
    }


请分析该算法的时间复杂度,其时间复杂度是O(n)吗?


不是


s = s + i,i累加


设循环次数为x


s=1+2+3+...+x=x(x+1)/2


循环执行条件为s=x(x+1)/2


所以时间复杂度为O(√n)

目录
相关文章
|
2月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
68 1
|
2月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
160 4
|
11天前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
36 2
|
28天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
57 20
|
2月前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
2月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
2月前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
131 23
|
2月前
|
算法
数据结构之蜜蜂算法
蜜蜂算法是一种受蜜蜂觅食行为启发的优化算法,通过模拟蜜蜂的群体智能来解决优化问题。本文介绍了蜜蜂算法的基本原理、数据结构设计、核心代码实现及算法优缺点。算法通过迭代更新蜜蜂位置,逐步优化适应度,最终找到问题的最优解。代码实现了单链表结构,用于管理蜜蜂节点,并通过适应度计算、节点移动等操作实现算法的核心功能。蜜蜂算法具有全局寻优能力强、参数设置简单等优点,但也存在对初始化参数敏感、计算复杂度高等缺点。
75 20
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
80 1
|
2月前
|
机器学习/深度学习 算法 C++
数据结构之鲸鱼算法
鲸鱼算法(Whale Optimization Algorithm,WOA)是由伊朗研究员Seyedali Mirjalili于2016年提出的一种基于群体智能的全局优化算法,灵感源自鲸鱼捕食时的群体协作行为。该算法通过模拟鲸鱼的围捕猎物和喷出气泡网的行为,结合全局搜索和局部搜索策略,有效解决了复杂问题的优化需求。其应用广泛,涵盖函数优化、机器学习、图像处理等领域。鲸鱼算法以其简单直观的特点,成为初学者友好型的优化工具,但同时也存在参数敏感、可能陷入局部最优等问题。提供的C++代码示例展示了算法的基本实现和运行过程。
79 0

热门文章

最新文章