2012-12-12 57 views
3

想象一下下面的僞代碼循環第一次迭代的哨兵值?

objects[i], 1 <= i <= n 

objects[0] = 0 

for i from 1 to n 
    if(objects[i] - objects[i-1] > constant) 
    do something 

我想知道是否有用於分配objects[0] = 0一個特定的名稱。 我知道,當像這樣的值用於停止循環時,它們被稱爲sentinel值。然而,在這種情況下,我正在使用它,以便評估的第一個對象(objects [1])將有一些東西可以比較 - 顯然,objects[0]不是一個真正的對象,只是一種標誌。它仍然被稱爲哨兵價值?還有另外一個名字嗎?或者我應該不這樣做?

讓我知道如果我沒有讓自己清楚,我應該嘗試以另一種方式解釋我的問題。

+1

「哨兵值」是好的國際海事組織。或者也許是「邊界條件」? – Nemo

回答

2

Cormen et al。在簡介寫238頁的算法(第三版):

前哨是一個虛擬對象,使我們能夠簡化邊界條件 。

該定義足夠寬泛,以說明您的使用情況(例如,在CLRS中使用無限的標記值來簡化mergesort的合併例程)。

1

我一直把它稱爲「哨兵」,無論是在開始還是結束,並且還沒有被解僱。

+1

但是這與標記值的定義完全不符:「存在保證循環終止的特殊值」(來自http://en.wikipedia.org/wiki/Sentinel_value) – dcastro

+2

@dcastro:Cormen et人。寫道:「哨兵是一個虛擬物體,可以讓我們簡化邊界條件。」 – Nabb

+0

@Nabb:啊,那就解決了。我發現的所有其他定義都不考慮這些情況。這實際上是爲我的碩士論文而引用是非常有幫助的。你會把它作爲答案,所以我可以接受它嗎? – dcastro