NP完全問題以及在編譯器領域的求解

2021-10-03 00:23:23 字數 2148 閱讀 3788

​ np完全問題(np-c問題),是世界七大數學難題之一。 np的英文全稱是non-deterministic polynomial的問題,即多項式複雜程度的非確定性問題。

​ np類問題:所有的非確定性多項式時間可解的判定問題構成np類問題。非確定性演算法:非確定性演算法將問題分解成猜測和驗證兩個階段。演算法的猜測階段是非確定性的,演算法的驗證階段是確定性的,它驗證猜測階段給出解的正確性。設演算法a是解乙個判定問題q的非確定性演算法,如果a的驗證階段能在多項式時間內完成,則稱a是乙個多項式時間非確定性演算法。有些計算問題是確定性的,例如加減乘除,只要按照公式推導,按部就班一步步來,就可以得到結果。但是,有些問題是無法按部就班直接地計算出來。比如,找大質數的問題。有沒有乙個公式能推出下乙個質數是多少呢?這種問題的答案,是無法直接計算得到的,只能通過間接的「猜算」來得到結果。這也就是非確定性問題。而這些問題的通常有個演算法,它不能直接告訴你答案是什麼,但可以告訴你,某個可能的結果是正確的答案還是錯誤的。這個可以告訴你「猜算」的答案正確與否的演算法,假如可以在多項式(polynomial)時間內算出來,就叫做多項式非確定性問題。

​ npc問題:np中的某些問題的複雜性與整個類的複雜性相關聯.這些問題中任何乙個如果存在多項式時間的演算法,那麼所有np問題都是多項式時間可解的.這些問題被稱為np-完全問題(npc問題)。

​ 在乙個週六的晚上,你參加了乙個盛大的晚會。由於感到侷促不安,你想知道這一大廳中是否有你已經認識的人。你的主人向你提議說,你一定認識那位正在甜點盤附近角落的女士羅絲。不費一秒鐘,你就能向那裡掃視,並且發現你的主人是正確的。然而,如果沒有這樣的暗示,你就必須環顧整個大廳,乙個個地審視每乙個人,看是否有你認識的人。

​ 生成問題的乙個解通常比驗證乙個給定的解時間花費要多得多。這是這種一般現象的乙個例子。人們發現,所有的完全多項式非確定性問題,都可以轉換為一類叫做滿足性問題的邏輯運算問題。既然這類問題的所有可能答案,都可以在多項式時間內計算,人們於是就猜想,是否這類問題,存在乙個確定性演算法,可以在多項式時間內,直接算出或是搜尋出正確的答案呢?這就是著名的np=p?的猜想。 不管我們編寫程式是否靈巧,判定乙個答案是可以很快利用內部知識來驗證,還是沒有這樣的提示而需要花費大量時間來求解,被看作邏輯和電腦科學中最突出的問題之一。它是斯蒂文·考克於2023年陳述的。

​ 有些計算問題是確定性的,比如加減乘除之類,你只要按照公式推導,按部就班一步步來,就可以得到結果。但是,有些問題是無法按部就班直接地計算出來。比如,找大質數的問題。有沒有乙個公式,你一套公式,就可以一步步推算出來,下乙個質數應該是多少呢?這樣的公式是沒有的。再比如,大的合數分解質因數的問題,有沒有乙個公式,把合數代進去,就直接可以算出,它的因子各自是多少?也沒有這樣的公式。

​ 這種問題的答案,是無法直接計算得到的,只能通過間接的「猜算」來得到結果。這就是非確定性問題。而這些問題的通常有個演算法,它不能直接告訴你答案是什麼,但可以告訴你,某個可能的結果是正確的答案還是錯誤的。這個可以告訴你「猜算」的答案正確與否的演算法,假如可以在多項式時間內算出來,就叫做多項式非確定性問題。而如果這個問題的所有可能答案,都是可以在多項式時間內進行正確與否的驗算的話,就叫完全多項式非確定問題。

​ 完全多項式非確定性問題可以用窮舉法得到答案,乙個個檢驗下去,最終便能得到結果。但是這樣演算法的複雜程度,是指數關係,因此計算的時間隨問題的複雜程度成指數的增長,很快便變得不可計算了。

​ 人們發現,所有的完全多項式非確定性問題,都可以轉換為一類叫做滿足性問題的邏輯運算問題。既然這類問題的所有可能答案,都可以在多項式時間內計算,人們於是就猜想,是否這類問題存在乙個確定性演算法,可以在多項式時間內直接算出或是搜尋出正確的答案呢?這就是著名的np=p?的猜想。

​ 解決這個猜想,無非兩種可能,一種是找到乙個這樣的演算法,只要針對某個特定np完全問題找到乙個演算法,所有這類問題都可以迎刃而解了,因為他們可以轉化為同乙個問題。另外的一種可能,就是這樣的演算法是不存在的。那麼就要從數學理論上證明它為什麼不存在。

近鄰法插入法

模擬退火演算法

遺傳演算法

神經網路演算法​ 編譯器相關的np完全問題,主要涉及指令排程、暫存器分配,指令和資料安排,一般採用近似演算法來獲取答案。這些np完全問題,雖然看起來與諸如表示式的代數重新關聯這種問題相近 。但後者有著大量的解決方案,更糟的是,對於這些np完全問題來說,所要的解往往取決於編譯器和應用程式**中的上下文資訊。在編譯器對此類問題近似求解時,會面臨編譯時間和可用記憶體上的限制。好的編譯器會巧妙地混合理論、實踐知識、技術和經驗。

參考:《編譯器設計》

演算法中的P問題 NP問題 NP完全問題和NP難問題

在討論演算法的時候,常常會說到這個問題的求解是個p類問題,或者是np難問題等等,於是我特地搜了這方面的資料,自己總結了下,估計研究演算法的大家應該都知道,要是我總結的 不對,歡迎一起 在講p類問題之前先介紹兩個個概念 多項式,時間複雜度。知道這兩概念的可以自動跳過這部分 1 多項式 axn bxn ...

演算法中的P問題 NP問題 NP完全問題和NP難問題

在討論演算法的時候,常常會說到這個問題的求解是個p類問題,或者是np難問題等等,於是我特地搜了這方面的資料,自己總結了下,估計研究演算法的大家應該都知道,要是我總結的 不對,歡迎一起 在講p類問題之前先介紹兩個個概念 多項式,時間複雜度。知道這兩概念的可以自動跳過這部分 1 多項式 axn bxn ...

小N研究的NP完全問題

什麼np完全問題 這個就是一道水題。首先我們可以想到建乙個圖,但是不知所措。因為每乙個點都可以左右選擇,那麼就是可以把乙個奇數狀態轉移成偶數狀態。那麼我們一開始就隨便放,然後再乙個點連線的相鄰的兩個點進行連邊,表示可以轉移狀態。我們會發現很多個聯通塊,如果聯通塊裡面有奇數個權值為奇數的點,那麼就答案...