伪代码和算法之间的区别?


17

从技术上讲,这两个词之间是否存在区别,还是可以互换使用?它们都或多或少地描述了解决问题的逻辑步骤顺序。不是吗 那么,为什么我们要使用两个这样的词来表达相同的意思呢?

或者,如果它们不是同义词,那么区别它们是什么?在什么情况下,我们应该使用伪代码一词还是算法一词?


4
一种算法是快速排序。伪代码是“给我一个三明治,然后在将其制成后,将其带给我。”
尼尔,

请参阅另一个问题的答案。我在那里描述了算法和伪代码之间的关系。
Goran Jovic

3
简短的版本:“伪代码是表示算法的一种方式”
Goran Jovic

3
@Neil甚至SUDO给我一个三明治xkcd.com/149
StuperUser 2012年

Answers:


37

维基百科对算法的定义:

在数学和计算机科学中,算法是一种有效方法,表示为用于计算函数的定义明确的指令的有限列表。算法用于计算,数据处理和自动推理。

从纯数学公式到复杂图形,可以使用多种方式描述算法,而无需使用伪代码。

伪代码描述了如何在不了解语法细节的情况下实现算法。

因此,它们并不是真正的同义词。


8

一种算法是关于如何编写代码的想法。伪代码是传达该想法所需的书面文本。


真好!短而直。但是我会说“书面文本”而不​​是“书面文本”。你怎么看?
卢西亚诺

6

“伪代码”是“算法”,“英语”是“敲笑话”。

算法是某种形式的结构,可以用伪代码或实际代码表示。

敲门笑话是某种形式的结构,可以用英语或其他某种语言来表达。(其他文化还会敲门笑话吗?我什至不知道。)


我不这么认为。至少在葡萄牙语中没有类似的敲门游戏。因此,我想说的还有其他浪漫语言,例如西班牙语和意大利语。我不会包括法语,因为它在几个世纪前的英属岛屿上与英语有着很深的渊源,而且我不了解罗马尼亚语等其他罗曼语。
卢西亚诺

3

快速排序算法只有一种,这是柏拉图的纯思想世界中会存在的那种东西。可能有许多不同的伪代码描述。我认为我将伪代码定义为大致类似于计算机代码的文本,并且可以由经验丰富的程序员将其翻译为实际的计算机代码,而无需进行任何创造性的飞跃。

所以不,我不会互换使用这些术语。


2

算法是一种系统的逻辑方法,用于解决计算机中的问题,而伪代码是纯英语的语句,可以稍后将其翻译为编程语言(程序)。


2

算法是语义,而伪代码只是语法通信中有关解决问题。这意味着该算法是解决问题的实际方法,而伪代码只是一种表达该方法的方法。

如果以C编程语言,伪代码或英语的任何方式(语法)表示算法,则该算法具有相同的含义(语义)。


1

据我了解,伪代码是算法和已实现程序之间的中介。您可以将伪代码基于算法。这包含要实施的可转移步骤。

另一方面,算法意味着整体逻辑。分步解决问题。如果以图表形式表示,则称为流程图。

有人可能将此称为伪代码,因为伪代码是商业软件开发中的常用术语,其中客户端Business Object开发人员根据需求编写伪代码。这提供给程序员/开发人员来实施。

在编程术语(例如系统编程,搜索,排序)中,您会发现更常见的算法,基本上是任何需要执行复杂逻辑的地方。


1

尽管伪代码似乎比算法更接近代码,但实际上,伪代码不是那么正式,它是一个更高级的描述。例如,您可以将象棋计算机描述为伪代码,如下所示:

  • 将初始作品放置在其位置
  • 展示板
  • 当游戏还没有结束时
    • 搬家并展示板
    • 提示用户移动
    • 让用户感动

是的,这是伪代码,它是一个很好的起点,但可以掩盖许多细节。它没有解决实现上的困难和变体,但是最大的好处是,它使您可以将整个情况概念化,而不必解决所有细节。

您可以修改它,再添加一个级别,如下所示:

  • 将初始作品放置在其位置
  • 展示板
  • 当董事会不是将死或抽签时
    • 列出白人的法律举动
    • 根据一些标准选择最好的
    • 采取行动并计算结果板
    • 查看是否发生了将死或抽签
    • 展示板
    • 列出黑人的法律举动
    • 提示用户进行合法移动以进行输入
    • 采取行动并计算结果板
    • 查看是否发生了将死或抽签
    • 展示板

现在,您可以为每个主要步骤编写伪代码,例如“列出黑人的法律行动清单”,如下所示:

  • 每一块黑色
    • 在给定位置的零件类型
      • 列出下一个可能的位置

现在,您可以看到伪代码的强大功能在于它能够一次性显示整个情况,然后允许您逐段处理细节。缺点是任何步骤都不是确定的简单步骤。

算法通常采用这些步骤之一,并以一种符号语言详细说明各种数据结构,以便您可以有效地实现该步骤的目标。

例如,get_legal_moves(board, color)值得进行算法设计:

get_legal_moves(board, color):
    for i,j in board_dimensions
        if piece_at i,j is of color
            if piece type is KNIGHT
                add the following to the next moves list:
                    location i+1 j+2, i-1 j+2... etc
            if piece type is rook
                add locations:....

您可以看到该算法必须非常精确才能有用。

它确保了几件事:首要目标是毫无错误地实现目标。这些步骤非常详细并且可以机械化地执行,并且这些步骤足够小,您可以对其重新排序以提高完成任务的效率(速度)。


这似乎是每一步都以伪代码表示的自顶向下算法分解。
内森·塔吉

0

根据我的经验,伪代码始终由职能人员(拥有流程的人员)编写,以表示适用于流程,模块或子系统的业务规则。

算法是一组明确的逻辑语句,用于解决尽可能具体的任务。


0

算法是用数学术语表示的东西。它包括分析,基本实现(甚至用伪代码表示),复杂性考虑因素(最佳,平均和最坏情况分析等)。

伪代码是程序的人类可读表示。甚至可以用来描述算法。


-2

Pseudo表示单&代码可能是一条指令。此处Pseudo-code表示用于轻松理解计算机编程语言的语句...有助于分析编程代码。。其中,算法是解决问题的指令的有限逻辑步骤。


1
在先前的10个答案中所提出和解释的观点上,这似乎没有提供任何实质性的内容
gna
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.