引言

计算机解决具体问题的步骤如下:

  • 从具体问题中抽象出一个适当的数学模型
  • 设计一个求解该数学模型的算法
  • 用某种计算机语言编写实现该算法的程序,调试和运行程序直到问题得到解决。

第一章 概论-LMLPHP
注:

  • 原始数据:实际问题中的数据
  • 逻辑结构:原始数据之间按照逻辑关系组织起来,人为因素大
  • 存储结构:原始数据实实在在在计算机中是如何存储的

此处可以以一个人处理有经验事情拿来类比,首先再次处理已经处理过的事情我们会先思考上回我们是这么做的(模型),这回我该怎么做(算法),付诸实践(编写程序直到解决);原始数据可以理解为该问题本身如:我要去办一个XXX证书,我需要XXX做;逻辑结构就是我的这些申请材料应该给XXX,存储结构就是我的这些申请材料实际给了XXX(理想与现实的差别)

基本概念和术语

数据、数据元素和数据项

  • 数据:所有被计算机存储、处理的对象
  • 数据元素:数据的基本单位,数据元素通常简称为元素
  • 数据项:数据元素的组成部分,是不可分割的最小标识单位;在数据库中又称为字段或域

下面以二维表为例,具体解释:
第一章 概论-LMLPHP

  • 一行即是一个数据元素;即827这一行数据代表一个数据元素
  • 一行中的每一列都是一个数据元素;即单827一个单元格代表一个数据项
  • 整张表代表数据;

数据的逻辑结构

  • 数据的逻辑结构是指数据之间的逻辑关系(数据元素之间的关联方式或“邻接方式”)
  • 四类基本结构如下图所示:

第一章 概论-LMLPHP

  • 集合:组织形式松散,两个结点之间没有邻接关系
  • 线性结构:结点按逻辑关系依次排列形成“链”,结点之间一个一个依次邻接
  • 树形结构:分支、层次
  • 图:任何两个结点都可以邻接,最复杂

数据的存储结构(物理结构)

  • 数据的存储结构定义:数据的逻辑结构在计算机中的实现
  • 存储结构包括:
    • 存储数据元素(存)
    • 数据元素之间的关联方式(怎么存)
  • 存储方式举例:
    • 顺序存储方式:所有结点存储在一个连续的存储区里,利用结点在存储器的相对位置来表达数据元素之间的逻辑关系
    • 链式存储方式:除数据元素外还有一个指针,每个指针指向下一个与本结点有逻辑关系的结点
      注: 顺序和链式最常用,除了上述两种,还有索引存储方式和散列存储方式
  • 存储结构的描述
    • 机器级:讨论存储结构在计算机存储器里的表现形式,直接以内存地址来描述存储结构
    • 语言级:用程序设计中的类型说明,变量说明等手段来描述存储结构;如数组、结构体和指针等

运算

注:基本运算包括:建立、查找、读取、插入和删除等

算法及描述

C语言基本语法:

  • 函数描述形式
函数类型 函数名(函数参数表)
//算法说明
{
语句序列
}
  • 输入、输出语句
//输入
scanf(格式串,变量1,...,变量n);
//输出
printf(格式串,变量1,...,变量n);
  • 赋值语句
变量名=表达式
  • 选择语句
//if
if(表达式) 语句;
//if ...else...
if(表达式) 语句;
else 语句;
//switch
switch
{
case 条件1:语句序列;break;
......
default: 语句序列;
}
  • 循环语句
//for
for(赋初值表达式序列;条件;修改表达式序列)语句;
//while
while(条件) 语句;
//do...while
do
{
语句;
}while(条件);
  • 结束语句
//函数结束
return 表达式;
//case结束
break;
//异常结束语句
exit(异常代码);
  • 出错语句
error("错误描述")
  • 注释
单行注释://注释内容
多行注释:/* 注释内容 */

算法分析

评价算法好坏的因素:

  • 正确性:能正确实现预定的功能,满足具体问题的需要
  • 易读性:易于阅读、理解和交流,便于调试、修改和扩充
  • 健壮性:即使输入非法数据,算法也能适当的做出反应或处理,不会产生预料不到的结果
  • 时空性:该算法的时间性能和空间性能,前者是算法包含的计算量,后者是算法所需要的存储量

时间复杂度

  • 时间复杂度常见阶数:常数阶O(1)——与输入规模无关;对数阶O(log n)、线性阶O(n)、多项式阶O(n)、指数阶O(C);其中C为大于1的正整数
  • 具有指数阶的算法是实际不可计算的,而阶数低于平方阶的算法是高效率的
  • 最坏时间复杂度:对于相同输入数据量的不同输入数据,算法时间用量的最大值
  • 平均时间复杂度:对所有相同输入数据量的各种不同输入数据,算法时间用量的平均值
  • 时间复杂度的计算看下图(由C知道支持):

第一章 概论-LMLPHP

空间复杂度

  • 空间复杂度:由程序代码所占用的空间、输入数据所占用的空间、辅助变量所占用的空间组成,一般只需分析辅助变量占用的空间即可

第一章 概论-LMLPHP

  • 算法f1、f2均是实现逆置的算法
  • 算法f1仅需2个辅助变量i,temp;与问题规模无关,空间复杂度为O(1)
  • 算法f2所需辅助变量为1个i和n为100的数组,与问题规模相关),空间复杂度为O(n)

牛刀小试

  • 在一般情况下,一个算法的时间复杂度是______的函数
  • 下列算法的时间复杂度T(n)=______
for(i=1;j<=n;i++)
{
k++;
for(j=1;j<=n;j++)
m+=k;
}
  • 与数据元素本身的形式、内容、相对位置、个数无关的是数据的_____
10-03 16:54