伪代码(Pseudocode)是一种算法描述语言。使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言。伪代码必须结构清晰、代码简单、可读性好,并且类似自然语言。 介于自然语言与编程语言之间。
例子:
主要规定:
1) 算法中出现的数组、变量可以是以下类型:整数、实数、字符、位串或指针。通常这些类型可以从算法的上下文来看是清楚的,并不需要额外加以说明。
2) 在算法中的某些指令或子任务可以用文字来叙述,例如,"设x是A中的最大项",这里A是一个数组;或者"将x插入L中",这里L是一个链表。这样做的目的是为了避免因那些与主要问题无关的细节使算法本身杂乱无章。
3) 算术表达式可以使用通常的算术运算符(+,-,*,/,以及表示幂的^)。逻辑表达式可以使用关系运算符=,≠,<,>,≤和≥,以及逻辑运算符与(and),或(or),非(not)。
4) 赋值语句是如下形式的语句:a<-b 。
这里a是变量、数组项,b是算术表达式、逻辑表达式或指针表达式。语句的含义是将b的值赋给a。
5) 若a和b都是变量、数组项,那么记号a<->b 表示a和b的内容进行交换。
6) goto语句具有形式
goto label(goto标号)
它将导致转向具有指定标号的语句。
7) 条件语句有以下两种形式:
if c then s或者
if c then s
else s′
这里c是逻辑表达式,s和s′是单一的语句或者是被括在do和end之间的语句串。对于上述两种形式,假若c为真,则s被执行一次。假若c为假,则在第一种形式中,if语句的执行就完成了,而在第二种形式中,执行s′。在所有的情况下,控制就进行到了下一个语句,除非在s或s′中的goto语句使控制转向到其它地方。
8) 有两种循环指令:while和for。
while语句的形式是
while c do
s
end
赋值语句用符号←表示,x←exp表示将exp的值赋给x,其中x是一个变量,exp是一个与x同类型的变量或表达式(该表达式的结果与x同类型);多重赋值i←j←e是将表达式e的值赋给变量i和j,这种表示与j←e和i←e等价。
例如:
x←y
x←20*(y+1)
x←y←30
选择语句用if-then-else来表示,
格式: if (Condition1) then [ Block 1 ] else if (Condition2) then [ Block 2 ] else [ Block 3 ] |
例子: if x<10 then y=2*x+1 else if x<15 then y=x+2 else y=x |
循环语句有三种:while循环、repeat-until循环和for循环
其他约定
1)书写上的“缩进”表示程序中的分程序(程序块)结构。用缩进取代传统的begin和end语句来表示程序的块结构,可以大大提高代码的清晰性。
2)算法一般流程
1.数据的收集
2.数据的准备:数值型或布尔型
3.分析数据
4.训练算法:计算不同的独立特征的条件概率
5.测试算法:计算错误率
6.使用算法:以实际应用为驱动
\begin{algorithm}[!t]
...
...
\end{algorithm}
整体大框架明确了伪代码或算法结构的开始(\begin)和结束(\end)的位置,而 algorithm 说明插入的内容是算法。[!h] 是算法的摆放格式:在当前位置(hear),所有的格式和图片、表格相同。
\caption{Algor of ABC}
\label{alg:AOA}
caption 是算法的标题。{ }中就是标题展示的具体内容,标题也会有编号,一般都是自动编号。label 是标签,标签主要是在引用的时候会用到。
说明:有时候,我们喜欢强调标签是属于算法标签,所以这里使用 alg:AOA,而不是直接使用 AOA 作为标签。
(3)设置输入和输出
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
算法一般是需要输入和输出的,我们重新替换掉上面定义的两个命令:
\algorithmicrequire
\algorithmicensure
所以修改之后,应该明白上面两行命令的含义了。我们使用的命令:\renewcommand{}{}
,第一个大括号是修改前的命令,第二个大括号是修改后的命令。\textbf是命令文本的格式(加粗)。
如果这条语句适用于所有的算法,那么我们就可以把这条语句和引用包的命令放在一起:
这就是全局设定的命令,所有用到该命令的算法都要遵守这个设定。在每个具体的算法中,我们就不需要使用这个命令了。但如果在算法中使用了这个命令,就会优先按照这个命令来。而其他没有使用这个命令,就是用前面全局设定的命令。
\begin{algorithmic}[1]
\end{algorithmic}
这一对是算法内容的框架,表示算法的具体实现以伪代码的形式写在这里。
后面有个参数,参数中一般都写1,这个1表示具体算法内容前面的序号是每几行语句标一次序号,一般我们都是每一行算法语句都要,所以是1。
\REQUIRE $A$, $B$, $C$ %%input
\ENSURE EEEEE %%output
这一整块就是输入参数和输出参数。其中,\REQUIRE 命令表示输入,\ENSURE 命令表示输出。
如果算法中不需要输入和输出这两条语句,那我们这两条语句就不用写在算法中,显示的效果就只有算法的内容了。
\STATE AAAAA
\WHILE{$A=B$}
\STATE BBBBB
\ENDWHILE
\FOR{each $i \in [1,10]$}
\IF {$C = 0$}
\STATE CCCCC
\ELSE
\STATE DDDDD
\ENDIF
\ENDFOR
\RETURN EEEEE
算法的引用要用到的命令 /ref
,如果要调用上面的算法,就可以这样调用:
As show in algorithm \ref{alg:AOA}