P/NP 問題、NPC問題、停機問題、N皇后問題

更新 發佈閱讀 10 分鐘

並不是所有問題都能透過程式來解決。在計算機理論(英語:Theory of computation)中,數學家們對各種問題進行分類,其中有許多被定義為非常難解的問題。在程式設計的世界裡,我們有各式各樣的演算法用來解決不同的問題,這些問題也可以根據它們的難度來分類。

本篇文章會帶你了解 P/NP 問題,這是計算理論中非常重要的一個主題。學習了這些概念後,當你聽到工程師們討論「P 問題」或「NP 問題」時,你就能跟上他們的思路,甚至加入討論了!


溫故知新:

演算法 | Big O 複雜度| Pseudocode 偽代碼

相關電影推薦:《模仿遊戲》(英語:The Imitation Game)


在程式設計中,有些問題必須採用「土法煉鋼」的方式來解決,也就是要一一嘗試每個可能性,直到找到正確答案。這樣的方法雖然能解決問題,但通常效率非常低,特別是當可能性很多時。

回溯法(Backtracking)

比土法煉鋼更有效的一種方法是回溯法(Backtracking)。回溯法的策略是列出所有可能性,但只要計算到某個路徑的結果已經確定不可行,就立即「回溯」並停止探索該路徑,轉而嘗試其他可能。這樣可以避免不必要的計算,節省大量時間。經典的回溯法例子就是 N 皇后問題

N-Queens ( N 皇后問題)(Leetcode 51.)

如果有在 Leetcode 上刷題的朋友應該會對這題有印象。

我們先縮小範圍,用 4 乘 4 的棋盤來看。西洋旗的規則中,若要讓兩皇后無法吃掉彼此,則一皇后不能在另一皇后縱向、橫向或對角線。本次的挑戰是把 Q1~ Q4 四個皇后中,並符合西洋棋的規則。

以下圖來說,Q1 是皇后,則另一皇后必不可在打叉的方格子,只有空格可以放。

  1. 先放在 [0,0] 的位置
  2. 再來往第二列 (row 2) 找適合可以擺第二個皇后 Q2 的位置。

(圖片來源:geeksforgeeks)

vocus|新世代的創作平台
擺放 Q2。看來 Q3 不能再擺了,因為前後橫向、縱向、對角線都會碰到其他皇后。

擺放 Q2。看來 Q3 不能再擺了,因為前後橫向、縱向、對角線都會碰到其他皇后。

  1. 倒帶回去重新放 Q2 的位置,並放在 [1,3]
vocus|新世代的創作平台

4.看起來可行,繼續往下放 Q3,但 Q4 也沒辦法放。

vocus|新世代的創作平台
  1. 所以重新調整 Q1 的位置,再填上 Q2。其實應該要先填 [1,0] 這個位置,不過這個也行不通,所以填 [3,1],後續依序填上 Q3 和 Q4。
vocus|新世代的創作平台
vocus|新世代的創作平台
vocus|新世代的創作平台

在介紹 P 問題之前,我們先來了解圖靈機

圖靈機(Turing Machine) 是一個能進行計算的理論模型,可以被視為現代電腦的雛形。它模擬了運算過程中的基本步驟,因此在計算理論中扮演著重要的角色。

DTM(Deterministic Turing Machine,決定性圖靈機)

DTM 的特色在於「下一步只有一種可能」。也就是說,每當圖靈機執行到某個狀態時,它只能按照一個明確的規則來決定下一個動作。現代的電腦就是屬於這種類型,因為它們的運算是決定性的。

決定性(deterministic) 的意思就是「結果是確定的」,就像你按下按鈕,電腦就會確定進行下一步操作。

NTM(Non-deterministic Turing Machine,非決定性圖靈機)

NTM 則有點特別,它的「下一步可以有多種可能性」。換句話說,它可以同時運算多個選擇,就像是在平行宇宙中同時進行多個運算。這並不是現實中的電腦能做到的,但在理論上,我們會用 NTM 來描述一些複雜問題的解法。

舉個簡單的例子:

假設我想飛到越南,面前有三個航班:BR-396、AJ-381、TK1888,但我沒有機票資訊,不知道哪一班飛越南。如果是 DTM 的情境,我只能一班班搭去試,直到找到正確的航班;這就像我一步一步按照確定的順序操作。而 NTM 的情境則像是我有分身,能同時搭上三個航班,瞬間知道哪一班飛越南,或者我超級會猜,直接猜中正確的班機。這就是 NTM 能同時探索多種可能性的特點。


P 問題和 NP 問題

在介紹 P 問題和 NP 問題之前,先了解它們與運算時間複雜度有關。

演算法 | Big O 複雜度| Pseudocode 偽代碼

P 問題(Polynomial Time Problem,多項式時間問題)

P 問題指的是那些能在多項式時間內解決的問題。簡單來說,時間複雜度用 n 來表示輸入的大小,而 P 問題的時間複雜度像是 O(n²)、O(n·log n)、O(n)、O(1) 這樣的形式,n 在底數,這表示隨著輸入的增大,運算時間增加得比較「溫和」,不會成倍爆炸。

這類問題是計算速度較快且可行的。換句話說,我們可以在合理的時間內找到解。

NP 問題(Non-deterministic Polynomial Time Problem,非決定性多項式時間問題)

NP 問題則是在 DTM 中需要用超多項式時間解的問題,n會在指數,例如O(2ⁿ)、O(nⁿ)理論上可以用 NTM 來解決的問題,但時間複雜度比 P 問題高很多。這類問題的解法通常被形容為「土法煉鋼」,因為解決這些問題需要非常多的嘗試。

白話文來說,NP 問題就是那些解起來超難、時間超長的問題。經典的例子之一就是「八皇后問題」,你得一個一個位置嘗試,直到找到所有皇后都不互相攻擊的位置。

vocus|新世代的創作平台


NP 完全(NP-Complete, NPC)

NP 完全問題(NPC) 是 NP 類別中最難的一群問題。這類問題有一個特性,就是 NP 中的其他問題都可以「化約(reduce)」成 NPC 問題。換句話說,如果你能夠解決某個 NPC 問題,代表你可以解決 NP 中的所有問題。

更具體的說明

假設我們有兩個問題:A 問題 和 A+ 問題。其中,A+ 問題比 A 問題更難(時間複雜度高)。如果你能把 A 問題「化約」成 A+ 問題,那麼你就能用解 A+ 問題的方法來解決 A 問題。但反過來,更難的問題 A+ 不能被降級成 A 問題,也就是說,解決更難的問題並不會直接幫助你解決比較簡單的問題。

總結一下,如果你能解決 NP 完全問題(A+),那麼你一定能解決 NP 問題(A)。一旦找到能有效解決 NPC 問題的演算法,那麼 NP 中的所有問題都能被高效解決!

vocus|新世代的創作平台



是否存在更高效率的演算法,可使確定型圖靈機以多項式時間求 NP 問題的解?

這個是千禧年大獎難題之一,到 2024 都還沒有人證明的出來,依然是懸案。

有兩種可能:

  1. 用 DTM (目前電腦)解 NP 問題只能用暴力法,更有效率的演算法並不存在,所以P≠NP。
  2. 用 DTM 處理 NP 問題的更高效率演算法其實存在,只是目前還沒被找到, 所以P=NP。

「沒找到」並不等於「不存在」,如果能夠證明 P=NP,就代表人類有一天一定可以找到更高效率的演算法處理 N皇后的問題。

停機問題(Halting Problem)

有一個著名的大獎難題,被證明為「不可能」由電腦解決,那就是停機問題

停機問題的定義

問題是這樣的:

有沒有一個程式,可以判斷輸入的程式碼是會一直運行下去,還是最終會停止(中止)?

答案是:沒有

我一開始對於這個問題感到困惑,有什麼好問的?但其實這是個深奧的問題。數學家艾倫·圖靈(Alan Turing)早在 1936 年就證明了這個問題無法被解決,這個理論限制了電腦能夠解決的問題範圍。

假設有一個能解決停機問題的程式

假設有個神奇的程式,叫 opposite(相反),這個程式可以檢測其他程式是否會停止。如果 opposite 偵測到輸入的程式會停止,它就回傳「中止」;如果它偵測到程式會無限運行,它就回傳「持續運行」(running)。

聽起來還不錯?但接下來,我們要進一步思考:如果我們把 opposite 程式自己當作輸入,會發生什麼?

矛盾產生

現在,假設我們把 opposite 程式自己輸入給自己,也就是把「判斷程式」拿來判斷自己。會發生什麼情況呢?

  1. 如果 opposite 判斷自己會停止,根據它的設計,它應該回傳「持續運行」——這和它本來應該回傳的「停止」相矛盾。
  2. 如果 opposite 判斷自己會無限運行,它應該回傳「中止」,但這又和它的檢測結果(持續運行)矛盾。

這樣就形成了邏輯上的悖論,也就是說,這個程式無法正確地判斷自己會不會停下來。

結論

因此,無論這個程式多麼聰明,當你問它關於它自己的運行狀況時,它都會陷入邏輯矛盾,無法正確回答。這就是圖靈所證明的停機問題的核心:對於所有可能的程式,我們無法設計出一個可以總是正確判斷它們是否會停下來的程式

推薦參考以下這兩個影片會更容易了解:

The Halting Problem: The Unsolvable Problem

Understanding the Halting Problem



留言
avatar-img
越南放大鏡 X 下班資工系
63會員
109內容數
雙重身份:越南放大鏡 X 下班資工系 政大東南亞語言學系是我接觸越南語的起點,畢業後找越南外派工作的生活跟資訊時,發現幾乎都是清單式的分享,很難身歷其境。所以我希望「越南放大鏡」可以帶讀者看到更多細節和深入的觀察。 - 下班資工系則是自學資工系的課程內容,記錄實際操作的過程,學習理論的過程。希望可以跟讀者一起成長。
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/04/11
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。
Thumbnail
2025/04/11
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。
Thumbnail
看更多
你可能也想看
Thumbnail
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
Thumbnail
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
題目會給定一顆樹,要求我們輸出所有從Root node根節點 到 Leaf node 葉子節點的路徑。 我們會介紹DFS模板 + Tree search演算法的框架來解題
Thumbnail
題目會給定一顆樹,要求我們輸出所有從Root node根節點 到 Leaf node 葉子節點的路徑。 我們會介紹DFS模板 + Tree search演算法的框架來解題
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 直線排列Permutations 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所有可能的情況,遞迴展開所有分
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 直線排列Permutations 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所有可能的情況,遞迴展開所有分
Thumbnail
這題乍看之下是新題目,但仔細一想, 其實只是前面介紹過的費式數列的小變形而已,解題思想基本不變。 題目說每次可以爬一階樓梯或兩階樓梯,問爬到n階的方法數是多少。
Thumbnail
這題乍看之下是新題目,但仔細一想, 其實只是前面介紹過的費式數列的小變形而已,解題思想基本不變。 題目說每次可以爬一階樓梯或兩階樓梯,問爬到n階的方法數是多少。
Thumbnail
題目會給定我們一個n值,問我們n! 也就是n階乘 尾巴的零有多少個? 例如n=5 就是代表5! = 5x4x3x2x1=120 尾巴有一個零,回傳1
Thumbnail
題目會給定我們一個n值,問我們n! 也就是n階乘 尾巴的零有多少個? 例如n=5 就是代表5! = 5x4x3x2x1=120 尾巴有一個零,回傳1
Thumbnail
如同這個Dynamic programming 深入淺出系列的開始, 在經過比較簡單的入門題(Coin Change)之後, 來看比較進階的二維DP題目Unique Path
Thumbnail
如同這個Dynamic programming 深入淺出系列的開始, 在經過比較簡單的入門題(Coin Change)之後, 來看比較進階的二維DP題目Unique Path
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
八皇后問題是一個經典的計算機科學問題,以前沒學好,最近剛好看到,於是重讀了一次,順手做個筆記幫助記憶,也分享給有需要或有興趣的讀者。內容枯燥,適合睡前閱讀。
Thumbnail
八皇后問題是一個經典的計算機科學問題,以前沒學好,最近剛好看到,於是重讀了一次,順手做個筆記幫助記憶,也分享給有需要或有興趣的讀者。內容枯燥,適合睡前閱讀。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
題目會給定一組規則,要求我們計算給定長度下的母音直線排列有幾種?
Thumbnail
題目會給定一組規則,要求我們計算給定長度下的母音直線排列有幾種?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News