数据结构

一种研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作之间的相关问题

程序设计 = 数据结构 + 算法

数据结构,就是数据关系,就是数据元素之间存在的一种或多种特定关系的集合。

逻辑结构和物理结构

逻辑结构

数据对象中数据元素之间的相互关系,也是我们之后需要关注和谈论的问题。

常见逻辑结构

  • 集合结构:集合结构中数据同属于一个集合,它们之间没有其他不三不四的关系。

  • 线性结构:线性结构中数据是一对一的逻辑关系。

  • 树形结构:元素之间存在一对多的层次关系。像WBS, dom树一样的类型结构。

  • 图形结构:(最复杂),图形结构数据元素是多对多的关系。

物理结构

数据逻辑结构在计算机中存储的方式。研究的就是把数据元素存储到计算机的存储器中。

数据元素的存储结构形式主要有两种

  • 顺序存储:把数据元素放在地址连续的存储单元中,其数据间的逻辑关系和物理关系是一致的。例如,编程语言的数组结构。

  • 链式存储: 将数据元素放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。需要用指针存放数据元素的地址。例如:医院排队,你只需要注意前一个数据的情况。

算法

数据结构与算法是紧密相关的一组概念。

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

类似于:技巧和方式。对于给定的问题,是可以用多种算法来解决的。

算法的五个特性:输入、输出、有穷性、确定性和可行性。

  • 输入、输出:0个或多个
  • 有穷性:不可以死循环
  • 确定性: 每一个步骤都有确定的含义,不会出现二义性。
  • 正确性 1、无语法错误 2、合法输入产出满足要求输出。 3、非法输入能够产生满足规格的说明 4、对于故意刁难的测试输入都有满足要求的输出结果。
  • 可读性 便于阅读、理解和交流
  • 健壮性
  • 时间效率高和存储量低
示例引入

从1累加到100,用计算机算出来

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
int i,sun = 0,n=100;

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

{
    sum = sum + i
}

printf("%d",sum);

1
2
3
4
5
6
7
8
9

// 高斯算法
// 算法速率增大
int i,sun = 0,n=100;

sum = (1+n)*n/2;

printf("%d",sum);

学习掌握一些好的算法,对我们解决问题很有帮助。

其他

我们不说怎么能够成为XXX,我们先来看看成为XXX之后要做什么事情,而做这些事情,需要什么样的能力,在拥有了这些能力、做上了这件事情之后,又能向什么方向发展。

把算法当黑盒用的问题在于:黑盒能够解决问题的时候,使用方便,而一旦不能解决问题,或者对质量有所要求,就会感觉无所适从。

作为程序员、工程人员,想用机器学习算法解决实际问题,就得对算法有一定程度的掌握,此外对于数据处理和模型验证,也需具备相应知识。