NL 完全(NL-complete)
在 NL 的問題中,有些是其中最難的一群:解出其中一個,就等於實質攻破了整個類別。一個問題若同時屬於 NL,且是某種通用的 NL 問題(任何其他 NL 問題都能翻譯成它),它就是 NL 完全。這是 NP 完全在 NL 的對應物,邏輯相同:這些完全問題捕捉了其類別的全部困難度,所以對任何單一個的更快演算法,會一口氣加速整個 NL。
要把這說精確,我們需要一種溫和到不會作弊的翻譯概念。對 NL 而言,正確的工具是對數空間歸約:若 NL 中的每個語言 A 都能對數空間歸約到 B,則問題 B 是 NL 困難;若 B 同時自身也在 NL 中,則 B 是 NL 完全。這裡必須用對數空間歸約(而非多項式時間歸約),因為多項式時間歸約本身可能比 NL 更強大,會模糊我們正試圖劃出的那些區別。無可爭議的旗艦是有向圖可達性(PATH 問題:是否存在從 s 到 t 的有向路徑?)。它屬於 NL,且每個 NL 計算都能編碼成其格局圖上的可達性問題,所以 PATH 是 NL 完全。
NL 完全是撬動整個類別的槓桿。由於 PATH 是 NL 完全且 NL 等於 co-NL(Immerman-Szelepcsenyi),可達性的補集也是 NL 完全。又因 NL 包含於 P,每個 NL 完全問題都有多項式時間演算法;未解的問題是它是否有確定型對數空間演算法,那正是 L 對 NL 的問題。提醒:NL 困難與 NL 完全有別,就如 NP 一樣。一個問題可以是 NL 困難卻住在 NL 之外(更難),只有同時也在 NL 中的那些才贏得「完全」這個標籤。
典範的 NL 完全問題是 PATH(有向 s-t 可達性)。為何完全?任何 NL 機器的執行都能畫成一張格局圖,其節點是機器可能的(狀態、讀寫頭位置、工作帶內容)快照;機器接受恰好發生在「某個接受性格局可由起始格局到達」之時,而那是一個在對數空間內建構出的 PATH 實例。
PATH 是 NL 完全:每個 NL 計算都化為其格局圖上的一個可達性問題。
NL 的完全性使用對數空間歸約,而非多項式時間歸約;多項式時間歸約可能超過 NL 自身的能力,無法保住它本應探測的類別邊界。