算法是解决问题并获得结果的过程。在这个处理过程中,问题以数据的形式输入,结果同样以数据的形式输出,在算法的处理过程中,也需要各种临时的数据。

数据是什么?

数据是多种不同信息的表现。

以料理中的食谱为例,下面的材料即为算法——食谱的数据:

  猪肉120g, 洋葱1/2个, 胡萝卜1/2个, 土豆2个, 糖一大勺, 料酒2大勺……

计算机程序中的算法也是如此,为了解决问题需要使用各种数据:

1. 求最大公约数的算法:

  a. 求最大公约数的两个整数
  b. 求出的最大公约数(整数)

2. 一组数据的排序算法:

  a. 要排序的一组数据
  b. 数据的个数
  c. 排好序的一组结果数据

在一个算法的思考过程中,我们需要很多信息,所有这些信息都是数据,都会协助问题解决的流程。因此,所有的算法是”处理“和”数据“的相互结合。

数据类型的理解

数据代表各种信息,被视为信息的数据有很多类型,根据不同种类分为不同的组,如食谱数据的分组:

  配料:猪肉、牛肉、洋葱、白菜
  调味品:酱油、料酒、糖、盐
  量:100g, 200ml, 1勺
  时间:时、分、秒
  火候:大火、中火、小火

计算机编程的算法中需要处理的数据也分为不同的组,这样的分组就称为数据类型:

  整数型:0, 1, 100, -100
  浮点型:1.1, 3.1415926, - 2.98
  字符型:A, B, x, 我, 你
  字符串型:ABC, CHINA, 算法
  布尔型:true, false

值的理解

数据是各种信息的表现形式,而数据的具体表现就是值。

在烹饪的食谱中, 猪肉、酱油、胡椒等是在做料理时使用的配料和调味料,也可以说是表示”物“的”值“。而100g, 1小勺,200ml等式表示分量,时间等”数“的”值“。

在算法中,我们用数值、文字等描述”值“, 如整数型或浮点型的值:0, 1, 1.1, 3.14。字符型和字符串的值,一般用单引号或双引号括起字符或字符串:'A', 'B', "CHINA".

括起来表示是为了与一般的数值区别开,比如: 10 和 "10",这两个分别是整数型值和字符串的值。

变量的理解

在算法中,当我们对一些数据进行操作时,需要保存这些数据的空间,这些空间称为”变量“。比如,我们做文件整理的时候,需要把所有文件分类到不同的盒子里进行管理,在这里,文件就是数据,存放文件的盒子就是所谓的变量。也就是说,变量起到了盒子的作用,我们可以移动各种数据并存入盒子里。

在这里需要注意一点,在整理文件时,我们可以把多个种类的文件放入一个盒子里,但变量,一般情况下,只能存入一种类型的数据。同时,在已经存入数据的变量中输入另一个值时,原先存入的数据将消失。比如声明一个变量: int i; 此时,盒子已经搬出来了,但盒子里没有任何数据,接着我们设定: i = 2; 于是数据2被存入了盒子 i 里,我们可以继续设定 i 的值: i = 3; 此时,3存入了盒子里,而数据2已经消失了。

值得一提的是,在我们声明一个变量 int i;这个步骤中,i 的状态是不放入任何数据。

变量的区分

算法中,我们经常使用多个变量,为了区分不同的变量并方便认识变量的用途,我们需要使用变量名来为装数据的箱子取名。

变量名要唯一。

赋值语句

变量的值的代入是通过变量指定的赋值语句完成的,赋值语句的右边也可以是使用运算符号的公式,如:i = 10; j = 3 + 5;

赋值语句右边可能是个变量名,此时的变量名代表存储在此变量中的值,如 j = i + 5; 这里的变量名 i 表示存储在变量 i 中的值,如果 i = 3,那么j = i + 5就相当于 j = 3 + 5;

数组

算法中,数组用来保存大量数据。例如:存储全校学生的测试结果(分数), 或者所有注册会员的名字等。

数组的原则:同一数组中的所有数据必须是同类型的值。

数组的理解:它是把很多变量线性排列的结果,即,数组是变量的箱子"无缝隙"地排列在一条直线上。

与变量有变量名作为标记一样,数组也有数组名,数组名是指定某一个目标数组而给定的唯一名称。

构成数组的”箱子“的个数称为数组元素数,可以用编号进行管理,且编号默认从0开始。

二维数组

数组中存储大量的关联数据。其中,在一条直线上排列的,像储物柜的数组称为一维数组,另外,也有把变量像纵向和横向无缝隙排列的矩形数组,它称为二维数组。甚至还有向水平、垂直、深度三个方向无缝隙排列的立方体数组,称为三维数组……

二维数组被广泛地使用在行和列的大量数据的管理中,如:围棋游戏中黑白子的管理

如果每一层的房间数排列一样,那么,由N层组成的宾馆房间构造也可以认为是二维数组。

总之,二维数组必须是由变量的”箱子“无缝隙地排列成长方形的结果:

字符串

在算法中,字符和字符串的处理是比较特殊的。

对于字符,计算机内部是通过数字(或字符编码)表示的。例如:字符'A'为65, 字符 'B' 为66...

字符串是上述字符编码对应的字符连续的表现,因此,字符串是字符无缝隙线性排列的信息,或者可以定义为:字符串是每个元素存储字符的字符型数组,例如:字符串"ABC",可以看成是存储字符'A', 'B', 'C'的数组。

算法解读:s变量和数组的更多相关文章

  1. 算法求解中的变量、数组与数据结构(STL 中的容器)

    本质上算法都是对数据的操作,没有数据,没有存储数据的容器和组织方式,算法就是无源之水无本之木,就是巧妇也难为无米之炊.算法是演员,变量.数组.容器等就是舞台, 然后整个算法的处理流程,都是针对这些数据 ...

  2. php变量与数组相互转换的方法(extract与compact

    #php变量与数组相互转换的方法(extract与compact) #compact 多个变量转数组 $name = 'sui'; $email = 'sui@qq.com'; $arr = comp ...

  3. 如何判断一个变量是数组Array类型

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...

  4. java 数组变量与数组对象

    数组是否必须初始化 对于这个问题,关键在于要弄清楚数组变量和数组对象的差别.数组变量是存放在栈内存中的,数组对象是存放在堆内存中的.数组变量只是一个引用变量,他能够指向实际的数组对象. 所谓的数组初始 ...

  5. JavaScript用typeof判断变量是数组还是对象,都返回object

    在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object. 使用typeof加leng ...

  6. C++ 用变量定义数组

    较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...

  7. js判断一个变量是数组还是对象

    判断变量是数组还是对象,使用Object.prototype.toString.call(),兼容性好,切勿使用typeof来判断对象或者数组,因为typeof得到的都是object: functio ...

  8. C++中变量做数组长度

    在Java中,这是完全可以的,比如我们运行如下程序: package cn.darrenchan.storm; import java.util.Arrays; public class Test { ...

  9. Perl 引用:引用就是指针,Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序。

    Perl 引用引用就是指针,Perl 引用是一个标量类型可以指向变量.数组.哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方. 1.创建引用1.使用斜线\定义变量的时候,在变量名前面加个\, ...

  10. Perl 变量:标量变量、数组变量、哈希变量和变量上下文

    一.Perl 变量变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间.解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型.浮点型.字符串等.上一章 ...

随机推荐

  1. (转)create table #temptable 临时表 和 declare @bianliang table ()表变量

    在开发过程中,经常会遇到使用表变量和本地临时表的情况.下面是对二者的一个介绍: 1. 为什么要使用表变量 表变量是从2000开始引入的,微软认为与本地临时表相比,表变量具有如下优点:  a.与其他变量 ...

  2. 【C/C++】随机数问题

    最初问题:从n个数中随机选择m个数(0<=m<=n). 为了便于描述,可以将该问题抽象为:从0-n-1这n个数中随机选择m个数.计算机能够提供的随机数都是伪随机的,我们假设计算机提供的伪随 ...

  3. BZOJ 4300: 绝世好题 动态规划

    4300: 绝世好题 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4300 Description 给定一个长度为n的数列ai,求ai的 ...

  4. android studio clone 失败

    Clone failedunable to access 'https://git.oschina.net/xx/xx.git/': Failed to connect to x.tu26.net p ...

  5. 错误名称:EntityCommandExecutionException

    错误名称:EntityCommandExecutionException 错误时间:2015/9/22 11:13:34 错误消息:执行命令定义时出错.有关详细信息,请参阅内部异常. 堆栈信息: 在 ...

  6. 持续集成(二)环境搭建篇—内网邮件server搭建

    在我们的持续构建中,项目构建中出现错误提醒.或者开发者之间的沟通交流,进度汇报的事务,都是离不开一个通信工具.那就是邮件.在我们的项目开发中假设使用第三方的邮件平台,这肯定不是最好的选择.由于第三方的 ...

  7. Java Inner Classes

    When thinking about inner classes in java, the first thing that comes to my mind is that, WHY do we ...

  8. 301 redirect Domain Name using global.asax

    void Application_BeginRequest(object sender, EventArgs e) { if (HttpContext.Current.Request.Url.ToSt ...

  9. StringUtilsd的isEmpty、isNotEmpty、isBlank、isNotBlank

    1. public static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0 下面是 Strin ...

  10. Flink 剖析

    1.概述 在如今数据爆炸的时代,企业的数据量与日俱增,大数据产品层出不穷.今天给大家分享一款产品—— Apache Flink,目前,已是 Apache 顶级项目之一.那么,接下来,笔者为大家介绍Fl ...