我刚刚开始学习计算机编程,我想了解更多关于编程算法的知识。我买了一些参考书。但是,当我读这本书时,我发现了一些像这样的代码:
function Get-Number(n)
Q ← NIL
Enqueue(Q,1)
While n > 0 do
x ← Dequeue(Q)
Unique-Enqueue(Q,2x)
Unique-Enqueue(Q,3x)
Unique-Enqueue(Q,5x)
n ← n – 1
return x
function Unique-Enqueue(Q,x)
i ← 0
while i < |Q| ^ Q[i] < x do
i ← i + 1
if i < |Q| ^ x = Q[i] then
return
Insert(Q,i,x)
我已经学习了一些C语言的基础知识,但是我没有看到那种代码,我无法理解算法。有谁知道上述代码是什么类型的编程语言?非常感谢你!
答案 0 :(得分:1)
我猜这是pseudocode。看起来语法的含义如下:
function F(x)
声明一个新的功能 F带有一些参数 Q <- value
为名为Q的变量指定值,如果该值尚不存在则创建Q someFunction(x)
调用 someFunction
,传递参数x
while
是 while loop if
... then
是一个 if语句,与C中的相同,但语法更像英语return x
退出当前函数并返回x作为其返回值,如果未指定返回值则返回值(C术语中的void函数)|Q|
生成集合Q <
表示与C和数学相同(小于运算符)Q[i]
在位置i ^
可能意味着逻辑AND,因为这就是数学中的含义答案 1 :(得分:1)
调用Get-number(n)
会返回n th 最小的自然数,只有2,3或5作为素因子。这些数字的列表如下所示:
{1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, ...}
完整的代码有两个功能。我将逐一解释每一步。
function Get-Number(n)
Q ← NIL
Enqueue(Q,1)
While n > 0 do
x ← Dequeue(Q)
Unique-Enqueue(Q,2x)
Unique-Enqueue(Q,3x)
Unique-Enqueue(Q,5x)
n ← n – 1
return x
Q
的空队列。在下一步中,我们将1推送到Q = [1]
。x
。然后分别致电Unique-Enqueue(Q,2x)
,Unique-Enqueue(Q,3x)
和Unique-Enqueue(Q,5x)
。x
的最终值。因此,我们有效地放弃了函数末尾的队列Q
,并仅保留x
的最终值。总的来说,给定一个输入n
,此函数将返回一个输出x
,该输出可以在完成上述所有函数调用后获得。
现在让我们看看另一个函数。
function Unique-Enqueue(Q,x)
i ← 0
while i < |Q| ^ Q[i] < x do
i ← i + 1
if i < |Q| ^ x = Q[i] then
return
Insert(Q,i,x)
Q
中,继续向右移动,直至找到一个数字
不满足Q[i] < x
,即查找队列中从左到右移动的第一个数字,该数字至少与x
一样大。x
,请停止。如果此数字大于x
,请在此数字前插入x
。如果没有这样的号码,请在末尾插入x
。我们打电话给Get-number(4)
:
Q = [1]
。Q = [2,3,5]
。Q = [3,4,5,6,10]
。Q = [4,5,6,9,10,15]
。Q = [5,6,8,9,10,12,15,20]
。因此Get-number(4)
会返回4
,因为那是我们x
的最后一个值。