导读:本文带你熟悉一个重要的术语——算法。
作者:帕诺斯·卢里达斯(Panos Louridas)
来源:大数据DT(ID:hzdashuju)
算法(algorithm)就是一个过程,是一种特殊的过程。它必须描述为一个有限步骤序列,且必须在有限时间内结束。每个步骤必须是良好定义的,达到人类可用一支笔和一张纸执行它的程度。
算法基于我们提供给它的输入做一些事情,并生成反映其所做工作的一些输出。算法1-1实现了我们前面描述的过程。
算法1-1 一个简单的股票跨度算法
SimpleStockSpan(quotes)→spans
输入: quotes,保存n个股票报价的数组
输出: spans,保存n个股票跨度的数组
1spans←CreateArray(n)
2for i←0 to n do
3 k←1
4 span_end ← FALSE
5 while i-k ≥ 0 and not span_end do
6 if quotes[i-k] ≤ quotes[i] then
7 k←k+1
8 else
9 span_end ← TRUE
10 spans[i] ← k
11return spans
算法1-1展示了如何描述算法。我们并不使用某种计算机语言,因为那样会迫使我们处理与算法逻辑无关的实现细节,我们使用的是某种伪代码(pseudocode)形式。
伪代码是一种介于真正的程序代码和非形式化描述之间的形式。它使用一种结构化格式,并采用一组具有特定含义的词汇。但是,伪代码不是真正的计算机代码。它并不是为了被计算机执行,而是易于被人类理解。
顺便提一下,程序也应能被人类理解,但并非所有程序都是如此——有很多正在运行的计算机程序写得很糟糕,难以理解。
每个算法都有一个名字,接受一些输入,并生成一些输出。在本书中,算法的名字将采用骆驼拼写法(CamelCase),输入会写在括号中,输出用一个→指示。接下来的几行将会对算法的输入和输出进行描述。可以用算法的名字紧接放在括号中的输入来调用(call)算法。
一旦算法编写好,就可以将其作为一个黑盒来处理,可以给它一些输入,黑盒则会返回算法的输出。当用一种程序设计语言实现一个算法时,它就是一个具名的计算机代码片段——函数(function)。在一个计算机程序中,我们调用实现算法的函数。