学习数据结构必备的基础知识(一)

数学基础

  • 数学知识在计算机编程的初学之中并不会体现很多,但是随着学习的深入,我们对数学知识的应用会越来越频繁。
  • 在这里并不会对需要学习掌握的数学知识进行过多的解析,想完全掌握需要去阅读《高等数学》,《离散数学》等相关教材

指数

指数是幂运算aⁿ(a≠0)中的一个参数,a为底数,n为指数,指数位于底数的右上角,幂运算表示指数个底数相乘。当n是一个正整数,aⁿ表示n个a连乘。当n=0时,aⁿ=1。

对数

  • 在数学中,对数是对求幂的逆运算,正如除法是乘法的逆运算,反之亦然。
  • 如果a的x次方等于N(a>0,且a≠1),那么数x叫做以a为底N的对数(logarithm),记作x=loga N。其中,a叫做对数的底数,N叫做真数。

级数

  • 级数是指将数列的项依次用加号连接起来的函数。
  • 级数理论是分析学的一个分支;它与另一个分支微积分学一起作为基础知识和工具出现在其余各分支中。二者共同以极限为基本工具,分别从离散与连续两个方面,结合起来研究分析学的对象,即变量之间的依赖关系──函数。

什么是算法

要知道,程序=数据结构+算法。那么到底什么是算法呢?让我们来看一个例子。

  • 现在给出一个问题,如何通过计算机C语言编程来实现1到100的和(1+2+3+4+……+100)?
    相信大多数人的代码都会是这个样子的:
#include <stdio.h>
int main() 
{
    int sum=0,i;
    for(i=1;i<=100;i++){
        sum+=i;
    }
    printf("%d",sum);
    return 0;
}

这几乎是计算机中最简单的程序了,但是,早在300年前的小学生高斯在课堂上被老师要求去计算这个结果,在同班同学还在手推写结果的时候,高斯早就已经做完了,他利用等差数列求和的算法,轻易打败了同班同学。
请注意,我在这里用的是算法这个词,相信注意到这一点之后,咱就明白了什么是算法。
我们来看看高斯的方法用代码怎么写:

#include <stdio.h>
int main() {
    int sum=(1+100)*100/2;
    printf("%d",sum);
    return 0;
}

用高斯的方法和第一个普遍的答案相比较可以很明显的看出来,第一个方法进行了100次的运算,才得出我们想要的结果,而对于高斯答案,仅进行了1次运算就得到了想要的结果,而在实际中计算机的计算远远不止这点计算量,以此如果我们去计算1到1000000的和呢?使用了等差数列还是一步算好,而这就是算法
~~

算法的特点

1>输入输出
算法具有零个或者多个输入,同时,算法具有至少一个的输出。

对于在屏幕上打印”Hello World”一样,你可以不需要有任何的输入,直接输出得到结果即可,而对于一个没有输出的算法,没有任何意义。

2>确定性
算法的每一步都具有确定的含义,无二义性。任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出。

请注意,如果算法的目的是产生一个随机数字,每一次运行产生了不同的结果,看上去好像违反了算法确定性原则,但计算机产生随机数亦是使用一种(或多种)算法解决。

3>有穷性
一个算法总是需要(输入合法的情况下)在有限的步骤结束,即每个算法需要在有穷的时间内完成。

这是算法与程序的最主要的区别,程序可以无限制循环的执行下去。对于此,你可以理解为一个算法必须要有一个”边界“,即使一个算法需要计算机连续运算50年,但依旧是有穷的,只不过这个算法意义已经不是很大了。

4>可行性
一个算法是可以被执行的,即算法中的每个操作都可以通过已经实现的基本运算执行有限的次数完成。

尽管在目前计算机解存在着没有实现成功的极为复杂的算法,但是并不能说的上是无法实现,只不过是受到现在的工具和人类的大脑限制了,这属于理论研究的范围。
~~

算法的设计要求

1>正确性
正确性(Correctness)指的是该算法能够满足预先指定的功能与性能的需求,即能够得到正确答案。

其大致可以分为以下四点:

a)该算法中不含任何语法错误。

b)程序对于几组输入数据能够得到满足需求的结果。

c)程序对于非法的输入也能够得到满足需求说明的结果(如抛出异常)。

d)程序对于精心挑选的严苛数据依旧能够产生满足需求的结果。

2>健壮性
健壮性(Robustness)指的是当输入数据不合法时,算法也能做出相关的处理,而不是产生不可预计的效果。

3>可读性
可读性(Readability)指的是算法是可以阅读,理解和交流的。

4>耗时低,占用空间少
运行时间(Running time)与占用空间(Storage space)概念,在设计算法时,我们总是希望能够更少的使用时间和空间达成我们的目标。

我们算法与数据结构的研究的重点就是为了让程序运行块,占用空间低。
~~

理解数据结构的基本概念和术语

下面会给出一些概念,以及相关解析,理解记忆最佳。
1>数据
数据(Data)是信息的载体,是可以被计算机识别,存储并加工处理的描述客观事物的信息符号的总称。数据不仅仅包括了整形,浮点数等数值类型,还包括了字符甚至声音,视频,图像等非数值的类型。

2>数据元素
数据元素(Data Element)是描述数据的基本单位,也被称为记录。一个数据元素有若干个数据项组成。

如禽类,鸡鸭都属于禽类的数据元素。

3>数据项
数据项(Data Item)是描述数据的最小单位,其可以分为组合项和原子项

  • 组合项
    如果数据元素可以再度分割,则每一个独立处理单元就是数据项,数据元素就是数据项的集合。

  • 原子项
    如果数据元素不能再度分割,则每一个独立处理的单元就是原子项。
    如日期2019年4月25日就是一个组合项,其表示日期,但如果单独拿25日这个数据出来观测,这就是一个原子项,因为其不可以再分割。

4>数据对象
数据对象(Data Object)是性质相同的一类数据元素的集合,是数据的一个子集。数据对象可以是有限的,也可以是无限的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值