常用演算法分析與設計
P問題,非P類問題,NP問題,NPC問題
P問題:如果一個問題可以找到一個能在多項式的時間(n在底數上面)裡解決的演算法,那麼這個問題就是P問題。
NP問題:可以在多項式時間裡驗證一個解的問題。NP問題的另一個定義是,可以在多項式時間裡猜出一個解的問題。
NPC問題(NP-完全問題):
存在這樣一個NP問題,所有的NP問題都可以規約化為它,換句話說,只要解決了這個問題,那麼所有的NP問題就都可以得到解決了。- 他是一個NP問題
- 所有的NP問題都可以規約化得到它。
NP難問題,只滿足NPC的第二個特徵,而不滿足第一個特徵.
P問題是一個NP問題,但是一個NP問題不一定是一個P問題。因為有NPC問題的存在,是的人們確信P問題 和NP問題不是相等的
規約:一個問題A可以規約為問題B的含義是,可以用問題B的解法解決問題A。問題B的時間複雜度高於問題A的時間複雜度。
我們所說的可約化問題指的是在多項時間內,找到一個變化法則,對於人一個程式A的輸入,都都能按照程式B的輸入,使兩個程式的輸出相同,那麼我們說問題A可以約化為問題B。
總之,P屬於NP,NP屬於NPC。
- NPC問題的例子有:
- 邏輯電路問題:給定一個邏輯電路,問是否存在一種輸入使輸出為True.
- 哈密頓迴路問題:
- 旅行商問題
相關推薦
常用演算法分析與設計
P問題,非P類問題,NP問題,NPC問題 P問題:如果一個問題可以找到一個能在多項式的時間(n在底數上面)裡解決的演算法,那麼這個問題就是P問題。 NP問題:可以在多項式時間裡驗證一個解的問題。NP問題的另一個定義是,可以在多項式時間裡猜出一個解的問題。 NPC問題(NP-完全問題): 存在這樣一個NP問題
演算法分析與設計課程設計-Dijkstra最短路徑演算法
演算法分析與設計課程設計報告書 題目:Dijkstra最短路徑演算法 設計人:張欽穎 班級:14計科2班 學號:1414080901218 一、  
演算法分析與設計期中測試——拓撲序[Special judge]
在圖論中,拓撲序(Topological Sorting)是一個有向無環圖(DAG, Directed Acyclic Graph)的所有頂點的線性序列. 且該序列必須滿足下面兩個條件: 每個頂點出現且只出現一次. 若存在一條從頂點 A 到頂點 B 的路徑,那麼在序列中頂點
演算法分析與設計期中測試——最小和
從數列A[0], A[1], A[2], …, A[N-1]中選若干個數,要求對於每個i(0<=i< N-1),A[i]和A[i+1]至少選一個數,求能選出的最小和. 1 <= N <= 100000, 1 <= A[i] <= 1000 請為下面
演算法分析與設計之多處最優服務次序問題
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; int main() { int i,n,j,k
演算法分析與設計之多處最優服務次序問題2
¢ 設有n個顧客同時等待一項服務,顧客i需要的服務時間為ti,1≤i≤n,共有s處可以提供此項服務。應如何安排n個顧客的服務次序才能使平均等待時間達到最小?平均等待時間是n個顧客等待服務時間的總和除以n。 ¢ 給定的n個顧客需要的服務時間和s的值,程式設計計算最優服務次序。 ¢ 輸入 第一行
演算法分析與設計:動態規劃之矩陣鏈乘
矩陣鏈乘問題 對於給定的n個矩陣,M1, M2 ,…, Mn,其中矩陣Mi 和Mj 是可乘的,要求確定計算矩陣連乘積 ( M1M2 …Mn )的計算次序,使得按照該次數計算 矩陣連乘積時需要的乘法次數最少 1、描述最優解結構 目標: 求出矩陣鏈乘Mi Mi+1 ┅Mj-1 Mj(
C/C++ 演算法分析與設計:貪心(整數配對)
題目描述 江鳥想到一個有趣的問題:給你N個正整數,你可以將這N個整數按兩個一組的方式成對劃分,當然其中的元素也可以不和其他元素配對劃分。現在的問題是,讓劃分為一對的元素的乘積與未配對的元素相加求和,並且讓和最大。比如:考慮這個集合{0,1,2,4,5,3},如果我們讓{0,3}、{2,5}分別成
C/C++ 演算法分析與設計:貪心(排隊接水)
題目描述 N個人同時提水到一個水龍頭前提水因為大家的水桶大小不一,所以水龍頭注滿第i(i=1,2,3......N)個人所需要的時間是T(i) 編寫一個程式,對這N個人使他們花費的時間總和最小,並求出這個時間。 例如有三個人a,b,c,用時分別是2,1,3 排隊順序為c,b,a的時候,c要等
C/C++ 演算法分析與設計:貪心(守望者的逃離)
題目描述 惡魔獵手尤迫安野心勃勃.他背叛了暗夜精靈,率深藏在海底的那加企圖叛變:守望者在與尤迪安的交鋒中遭遇了圍殺.被困在一個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去,到那時,刀上的所有人都會遇難:守望者的跑步速度,為17m/s, 以這樣的速度是無法逃離荒島的
演算法分析與設計第十四次作業(leetcode中Cherry Pickup題解)
題解正文 題目描述 問題分析 此題給出一個n乘n矩陣,矩陣中值可以是0/1/-1。 要求我們找出從(0,0)出發,到(n-1,n-1),然後回到(0,0)的路徑,要求往程只能向右向下,而返程只能向左向上走,並且路徑沒有經過值為-1的位置。 然後求出符合上述要求的路徑中,所經
演算法分析與設計(一)
一、演算法的定義 滿足五個條件:可行性、確定性、輸入、輸出、有窮性 滿足前四個條件為計算過程(OS) 二、演算法複雜性分析 時間複雜性:對該輸入需要產生的原子操作的步數(是輸入大小的函式) 空間複雜性:演算法所需要的儲存空間 三、計算複雜性函式的階 階:描述增長
演算法分析與設計第五次作業(leetcode 中 Majority Element 題解)
心得體會 這個題目有兩個版本Majority Element,和Majority Element II,解題的方法比較巧妙,有點想不到的感覺,並且證明過程也很有趣,所以就記錄下來(具體詳情見正文題解)。 題解正文 題目描述 問題分析 題目要求majority
C/C++ 演算法分析與設計:列舉(分數拆分)
題目描述 現在輸入一個正整數k,找到所有的正整數x>=y,使得1/k=1/x+1/y. 輸入 第一行輸入一個整數n,代表有n組測試資料。 接下來n行每行輸入一個正整數k 輸出 按順序輸出對應每行的k找到所有滿足條件1/k=1/x+1/y的組合 樣例輸入 2
C/C++ 演算法分析與設計:列舉(二倍的問題)
題目描述 給定2到15個不同的正整數,你的任務是計算這些數裡面有多少個數對滿足:數對中一個數是另一個數的兩倍。比如給定1 4 3 2 9 7 18 22,得到的答案是3,因為2是1的兩倍,4是2個兩倍,18是9的兩倍。 輸入 輸入包括n組測試資料。每組資料包括一行,給出
C/C++ 演算法分析與設計:貪心(搬運工)
題目描述 搬運工的工作非常辛苦,不僅是因為要費體力,而且幹活要有技巧,不能總是用蠻力。假設你是一名搬運工,給定一個最大載重量為M公斤的卡車和N種食品,有食鹽,白糖,大米等。已知第 i 種食品的擁有Wi 公斤,其商品價值為Vi元/公斤,程式設計確定一個裝貨方案,使得裝入卡車中
C/C++ 演算法分析與設計:貪心(等價交換)
題目描述 黑龍江的五常大米全國聞名,每年到了秋天,農民們把自己家的大米到集市上去買,但由於五常地區還是一個比較落後的地方,還實行物物交換,即農民用大米換白麵,可以用來蒸饅頭啊!每個集市上大米換白麵的比例並不相等,如何能用最少的大米換到最多的白麵呢?(單位是斤) 輸入 輸
C/C++ 演算法分析與設計:貪心(今年暑假不AC)
題目描述 “今年暑假不AC?” “是的。” “那你幹什麼呢?” “看世界盃呀,笨蛋!” “@#$%^&*%...” 確實如此,世界盃來了,球迷的節日也來了,估計很多ACMer也會拋開電腦,奔向電視了。 作為球迷,一定想看盡量多的完整的比賽,當然,作為新時代的好青年,
C/C++ 演算法分析與設計:遞迴(放蘋果)
題目描述 把M個同樣的蘋果放在N個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用K表示)5,1,1和1,5,1 是同一種分法。 輸入 第一行是測試資料的數目t(0 <= t <= 20)。以下每行均包含二個整數M和N,以空格分開。1<
輸出拓撲排序的所有可能結果(題目來源:演算法分析與設計及其案例教程第五章課後習題第五題)
這是我在csdn 的第②篇部落格 該篇為C++程式碼 原題問的是實現拓撲排序的方法,但答案給除了所有的拓撲排序的可能。 看到答案這麼寫我就在想如何才能輸出所有拓撲排序的結果?,但我一開始只能寫出輸出一種可能的拓撲排序結果的程式碼,經過一天的查詢資料後在CSDN