Python Data Structure 简明教程
Python - Algorithm Design
算法是一个循序渐进的过程,它定义了一组按特定顺序执行的指令,以获得所需的输出。算法通常独立于底层语言创建,即算法可以在不止一种编程语言中实现。
Algorithm is a step-by-step procedure, which defines a set of instructions to be executed in a certain order to get the desired output. Algorithms are generally created independent of underlying languages, i.e. an algorithm can be implemented in more than one programming language.
从数据结构的角度来看,以下是一些重要的算法类别 -
From the data structure point of view, following are some important categories of algorithms −
-
Search − Algorithm to search an item in a data structure.
-
Sort − Algorithm to sort items in a certain order.
-
Insert − Algorithm to insert item in a data structure.
-
Update − Algorithm to update an existing item in a data structure.
-
Delete − Algorithm to delete an existing item from a data structure.
Characteristics of an Algorithm
并非所有程序都可以称为算法。算法应具有以下特征 -
Not all procedures can be called an algorithm. An algorithm should have the following characteristics −
-
Unambiguous − Algorithm should be clear and unambiguous. Each of its steps (or phases), and their inputs/outputs should be clear and must lead to only one meaning.
-
Input − An algorithm should have 0 or more well-defined inputs.
-
Output − An algorithm should have 1 or more well-defined outputs, and should match the desired output.
-
Finiteness − Algorithms must terminate after a finite number of steps.
-
Feasibility − Should be feasible with the available resources.
-
Independent − An algorithm should have step-by-step directions, which should be independent of any programming code.
How to Write an Algorithm?
对于编写算法,没有明确定义的标准。相反,它取决于问题和资源。算法永远不会被编写来支持特定的编程代码。
There are no well-defined standards for writing algorithms. Rather, it is problem and resource dependent. Algorithms are never written to support a particular programming code.
正如我们所知,所有编程语言都共享基础代码构造,如循环(do、for、while)、流程控制(if-else)等。这些通用构造可用于编写算法。
As we know that all programming languages share basic code constructs like loops (do, for, while), flow-control (if-else), etc. These common constructs can be used to write an algorithm.
我们按部就班编写算法,但并不总是如此。算法编写是一个过程,在问题域定义明确后执行。也就是说,我们应该了解问题域,并针对该问题域设计解决方案。
We write algorithms in a step-by-step manner, but it is not always the case. Algorithm writing is a process and is executed after the problem domain is well-defined. That is, we should know the problem domain, for which we are designing a solution.
Example
我们尝试通过示例来学习算法编写。
Let’s try to learn algorithm-writing by using an example.
-
Problem − Design an algorithm to add two numbers and display the result.
step 1 − 开始
step 1 − START
step 2 − 声明三个整数 a 、 b 和 c
step 2 − declare three integers a, b & c
step 3 − 定义 a 和 b 的值
step 3 − define values of a & b
step 4 − 对 a 和 b 的值进行加法
step 4 − add values of a & b
step 5 − 将步骤 4 的输出存储到 c
step 5 − store output of step 4 to c
step 6 − 打印 c
step 6 − print c
step 7 − 结束
step 7 − STOP
算法告诉程序员如何对程序进行编码。或者,算法可以写成 −
Algorithms tell the programmers how to code the program. Alternatively, the algorithm can be written as −
step 1 − 开始加法
step 1 − START ADD
step 2 − 获取 a 和 b 的值
step 2 − get values of a & b
step 3 − c ← a + b
step 3 − c ← a + b
step 4 − 显示 c
step 4 − display c
step 5 − 结束
step 5 − STOP
在算法的设计和分析中,通常使用第二种方法来描述算法。这使得分析员能够轻松地分析算法,而忽略所有不需要的定义。他可以观察正在使用什么操作以及流程如何进行。
In design and analysis of algorithms, usually the second method is used to describe an algorithm. It makes it easy for the analyst to analyze the algorithm ignoring all unwanted definitions. He can observe what operations are being used and how the process is flowing.
编写 step numbers 是可选的。
Writing step numbers, is optional.
我们设计了一个算法来解决给定问题。一个问题可以用多种方法解决。
We design an algorithm to get a solution of a given problem. A problem can be solved in more than one ways.
因此,可以为给定的问题导出许多求解算法。下一步是分析那些建议的求解算法并执行最适合的解决方案。
Hence, many solution algorithms can be derived for a given problem. The next step is to analyze those proposed solution algorithms and implement the best suitable solution.