สิ่งแรกที่ต้องเข้าใจคือPและNPจำแนกภาษาไม่ใช่ปัญหา เพื่อให้เข้าใจถึงความหมายนี้เราต้องมีคำจำกัดความอื่นก่อน
อักษรเป็นไม่ว่างเปล่าขอบเขตของสัญลักษณ์
{ 0
, 1
} เป็นตัวอักษรที่เป็นชุดอักขระ ASCII {} ไม่ใช่ตัวอักษรเพราะว่างเปล่า N (จำนวนเต็ม) ไม่ใช่ตัวอักษรเพราะไม่ จำกัด
ให้Σเป็นตัวอักษร concatenation สั่งจำนวน จำกัด ของสัญลักษณ์จากΣเรียกว่าคำมากกว่าΣ
สตริง101
เป็นคำที่อยู่เหนือตัวอักษร { 0
, 1
} คำที่ว่างเปล่า (เขียนบ่อยเท่าที่ε ) เป็นคำมากกว่าตัวอักษรใด ๆ สตริงpenguin
เป็นคำที่อยู่เหนือตัวอักษรที่มีอักขระ ASCII สัญกรณ์ทศนิยมของจำนวนπไม่ได้เป็นคำมากกว่าอักษร { .
, 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
} เพราะมันไม่ได้ จำกัด
ความยาวของคำWเขียนเป็น | w | คือจำนวนสัญลักษณ์ในนั้น
ตัวอย่างเช่น | hello
| = 5 และ | ε | = 0 สำหรับคำใด ๆw , | w | ∈ Nและดังนั้นจึง จำกัด
ให้Σเป็นตัวอักษร ชุดΣ *มีคำทั่วΣรวมทั้งε ชุดΣ +มีคำทั่วΣไม่รวมε สำหรับn ∈ N , Σ nคือชุดของคำพูดของความยาวn
ทุกตัวอักษรΣ , Σ *และΣ +ไม่มีที่สิ้นสุดเซตนับได้ สำหรับชุดอักขระ ASCII Σ ASCIIนิพจน์ทั่วไป.*
และ.+
แสดงว่าΣ ASCII *และΣ ASCII +ตามลำดับ
{ 0
, 1
} 7เป็นชุดของรหัส ASCII 7 บิต { 0000000
, 0000001
, ... , 1111111
} { 0
, 1
} 32คือชุดของค่าจำนวนเต็ม 32 บิต
ให้Σเป็นตัวอักษรและL ⊆ Σ * Lเรียกว่าภาษาเหนือΣ
สำหรับตัวอักษรΣชุดที่ว่างเปล่าและΣ *ภาษาที่น่ารำคาญมากกว่าΣ อดีตมักจะถูกเรียกว่าเป็นภาษาที่ว่างเปล่า ภาษาที่ว่างเปล่า {} และภาษาที่มีเฉพาะคำที่ว่าง { ε } นั้นแตกต่างกัน
เซ็ตย่อยของ { 0
, 1
} 32ที่สอดคล้องกับค่าจุดลอยตัวที่ไม่ใช่ NaN IEEE 754 เป็นภาษาที่แน่นอน
ภาษาสามารถมีจำนวนคำไม่ จำกัด แต่ทุกภาษาสามารถนับได้ ชุดของสตริง { 1
, 2
... } denoting จำนวนเต็มในสัญกรณ์ทศนิยมเป็นภาษาอนันต์มากกว่าตัวอักษร { 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
} ชุดที่ไม่มีที่สิ้นสุดของสตริง { 2
, 3
, 5
, 7
, 11
, 13
, ... } แสดงถึงตัวเลขที่สำคัญในสัญกรณ์ทศนิยมเป็นชุดย่อยที่เหมาะสมดังกล่าว ภาษาที่มีคำทั้งหมดที่ตรงกับการแสดงออกปกติ[+-]?\d+\.\d*([eE][+-]?\d+)?
เป็นภาษาเหนือชุดอักขระ ASCII (แสดงถึงชุดย่อยของการแสดงออกทศนิยมที่ถูกต้องตามที่กำหนดโดยภาษาการเขียนโปรแกรม C)
ไม่มีภาษาที่มีตัวเลขจริงทั้งหมด (ในสัญลักษณ์ใด ๆ ) เนื่องจากชุดของตัวเลขจริงไม่สามารถนับได้
ให้Σเป็นตัวอักษรและL ⊆ Σ * เครื่องD ตัดสินใจ Lถ้าสำหรับการป้อนข้อมูลทุกW ∈ Σ *มันคำนวณลักษณะการทำงาน χ L ( W ) ในเวลาที่ จำกัด ฟังก์ชั่นลักษณะถูกกำหนดให้เป็น
χ L : Σ * → {0, 1}
w ↦ 1, w ∈ L
0 มิฉะนั้น
เครื่องดังกล่าวจะเรียกว่าdeciderสำหรับL เราเขียน“ D ( w ) = x ” สำหรับ“ กำหนดw , Dเอาต์พุตx ”
มีหลายรุ่นให้เลือก คนทั่วไปส่วนใหญ่ที่อยู่ในการใช้งานจริงในวันนี้คือรูปแบบหนึ่งของเครื่องทัวริง เครื่องทัวริงมีหน่วยเก็บข้อมูลเชิงเส้นไม่ จำกัด กลุ่มในเซลล์ แต่ละเซลล์สามารถเก็บสัญลักษณ์หนึ่งตัวของตัวอักษรได้ทุกเวลา เครื่องทัวริงทำการคำนวณตามลำดับขั้นตอนการคำนวณ ในแต่ละขั้นตอนมันสามารถอ่านเซลล์หนึ่งอาจเขียนทับค่าของมันและย้ายหัวอ่าน / เขียนโดยตำแหน่งหนึ่งไปยังเซลล์ซ้ายหรือขวา การกระทำที่เครื่องจะดำเนินการจะถูกควบคุมโดยระบบออโตเมติก จำกัด
เครื่องเข้าถึงแบบสุ่มพร้อมชุดคำสั่งที่ จำกัด และพื้นที่เก็บข้อมูลไม่ จำกัด เป็นเครื่องรุ่นอื่นที่มีประสิทธิภาพเท่ากับรุ่นเครื่องจักรทัวริง
เพื่อประโยชน์ของการสนทนานี้เราจะไม่รบกวนเราด้วยแบบจำลองเครื่องจักรที่แม่นยำที่เราใช้ แต่ค่อนข้างเพียงพอที่จะบอกว่าเครื่องมีหน่วยควบคุมกำหนดแน่นอน จำกัด หน่วยเก็บข้อมูลไม่ จำกัด และทำการคำนวณตามลำดับขั้นตอนที่สามารถนับได้
เมื่อคุณใช้มันในคำถามของคุณฉันคิดว่าคุณคุ้นเคยกับสัญกรณ์“ big-O” อยู่แล้วดังนั้นนี่เป็นเพียงการทบทวนอย่างรวดเร็ว
ให้f : N →เป็นฟังก์ชั่น ชุดO ( f ) มีฟังก์ชั่นทั้งหมดg : N → Nซึ่งมีค่าคงที่n 0 ∈ Nและc ∈ Nเช่นนั้นสำหรับทุกn ∈ Nกับn > n 0มันเป็นความจริงที่g ( n ) f c f ( n )
ตอนนี้เราพร้อมที่จะเข้าใกล้คำถามจริง
คลาสPมีภาษาทั้งหมดLซึ่งมีเครื่องทัวริงDที่ตัดสินใจLและค่าคงที่k ∈ Nเช่นนั้นสำหรับทุกอินพุตw , Dหยุดหลังจากขั้นตอนT (| w |) ส่วนใหญ่สำหรับฟังก์ชันT ∈ O ( n ↦ n k )
เนื่องจากO ( n ↦ n k ) ในขณะที่ถูกต้องทางคณิตศาสตร์ไม่สะดวกในการเขียนและอ่านคนส่วนใหญ่ - จะซื่อสัตย์ทุกคนยกเว้นตัวเอง - มักจะเขียนเพียงO ( n k )
โปรดทราบว่าถูกผูกไว้ขึ้นอยู่กับความยาวของW ดังนั้นอาร์กิวเมนต์ที่คุณสร้างขึ้นสำหรับภาษาของจำนวนเฉพาะนั้นถูกต้องสำหรับตัวเลขในการเข้ารหัสแบบ unarayโดยที่การเข้ารหัสwของตัวเลขnความยาวของการเข้ารหัส | w | เป็นสัดส่วนกับn ไม่มีใครเคยใช้การเข้ารหัสเช่นนี้ในทางปฏิบัติ การใช้อัลกอริธึมขั้นสูงมากกว่าเพียงแค่พยายามใช้ปัจจัยที่เป็นไปได้ทั้งหมดก็สามารถแสดงให้เห็นได้ว่าภาษาของจำนวนเฉพาะยังคงอยู่ในPหากอินพุตถูกเข้ารหัสในรูปแบบไบนารี่ (หรือฐานอื่น ๆ ) (แม้จะมีความสนใจอย่างมากสิ่งนี้สามารถพิสูจน์ได้โดยManindra Agrawal, Neeraj Kayal และ Nitin Saxena ในกระดาษที่ได้รับรางวัลในปี 2004 ดังนั้นคุณสามารถเดาได้ว่าอัลกอริทึมนั้นไม่ง่ายมาก)
ภาษาเล็กน้อย {} และΣ *และภาษาที่ไม่น่ารำคาญ { ε } จะเห็นได้ชัดในP (สำหรับตัวอักษรใด ๆΣ ) คุณสามารถเขียนฟังก์ชั่นในภาษาการเขียนโปรแกรมที่คุณชื่นชอบซึ่งใช้สตริงเป็นอินพุตและส่งกลับบูลีนเพื่อบอกว่าสตริงนั้นเป็นคำที่มาจากภาษาสำหรับแต่ละภาษาเหล่านี้หรือไม่และพิสูจน์ว่าฟังก์ชันของคุณมีความซับซ้อน
ทุกปกติภาษา (ภาษาอธิบายโดยการแสดงออกปกติ) อยู่ในP
ให้Σเป็นตัวอักษรและL ⊆ Σ * เครื่องVที่ใช้ tuple ที่เข้ารหัสของคำสองคำW , ค ∈ Σ *และผล 0 หรือ 1 หลังจำนวน จำกัด ของขั้นตอนคือการตรวจสอบสำหรับLถ้ามันมีคุณสมบัติดังต่อไปนี้
- ที่กำหนด ( W , C ), Vเอาท์พุท 1 เท่านั้นหากW ∈ L
- ทุกW ∈ Lมีอยู่ค ∈ Σ *เช่นว่าV ( W , C ) = 1
คในความหมายดังกล่าวข้างต้นจะเรียกว่าเป็นพยาน (หรือใบรับรอง )
ตรวจสอบที่ได้รับอนุญาตเพื่อให้เชิงลบเท็จพยานผิดแม้ว่าWเป็นจริงในL อย่างไรก็ตามมันไม่ได้รับอนุญาตให้ทำการบวกปลอม มันเป็นสิ่งจำเป็นสำหรับแต่ละคำในภาษานั้นมีพยานอย่างน้อยหนึ่งคน
สำหรับภาษา COMPOSITE ที่มีการเข้ารหัสทศนิยมของจำนวนเต็มทั้งหมดที่ไม่ได้เป็นเอกสิทธิ์พยานอาจเป็นตัวประกอบ ตัวอย่างเช่น(659, 709)
เป็นพยานสำหรับ467231
∈ COMPOSITE คุณสามารถตรวจสอบได้อย่างง่ายดายว่าบนกระดาษหนึ่งแผ่นโดยที่ไม่มีพยานให้การพิสูจน์ว่า 467231 นั้นไม่ยากเลยถ้าไม่ใช้คอมพิวเตอร์
เราไม่ได้พูดอะไรเกี่ยวกับวิธีการพบพยานที่เหมาะสม นี่คือส่วนที่ไม่ได้กำหนด
คลาสNPประกอบด้วยภาษาทั้งหมดLซึ่งมีเครื่องทัวริงVที่ตรวจสอบLและค่าคงที่k ∈ Nเช่นนั้นสำหรับทุกอินพุต ( w , c ), Vหยุดทำงานหลังจากขั้นตอนT (| w |) ส่วนใหญ่สำหรับฟังก์ชั่นT ∈ O ( n ↦ n k )
โปรดทราบว่านิยามข้างต้นแสดงให้เห็นว่าแต่ละW ∈ Lมีอยู่เป็นพยานคกับ | c | ≤ T (| w |) (เครื่องทัวริงไม่สามารถมองสัญลักษณ์ของพยานได้มากกว่านี้)
NPเป็นชุดของP (ทำไม?) มันไม่ได้เป็นที่รู้จักกันว่ามีอยู่ภาษาที่อยู่ในNPแต่ไม่ได้อยู่ในP
การแยกตัวประกอบจำนวนเต็มไม่ใช่ภาษาต่อ se อย่างไรก็ตามเราสามารถสร้างภาษาที่แสดงถึงปัญหาการตัดสินใจที่เกี่ยวข้อง นั่นคือภาษาที่มีอันดับทั้งหมด ( n , ม. ) เช่นที่nมีปัจจัยdกับd ≤ เมตร ให้เราเรียกแฟคเตอร์ภาษานี้ หากคุณมีอัลกอริทึมในการตัดสินใจ FACTOR คุณสามารถใช้เพื่อคำนวณการแยกตัวประกอบแบบเต็มด้วยค่าใช้จ่ายแบบพหุนามเท่านั้นโดยทำการค้นหาไบนารีแบบเรียกซ้ำสำหรับแต่ละตัวประกอบ
มันเป็นเรื่องง่ายที่จะแสดงให้เห็นว่าปัจจัยที่อยู่ในNP พยานที่เหมาะสมจะเป็นเพียงปัจจัยdเท่านั้นและผู้ตรวจสอบทั้งหมดจะต้องทำคือตรวจสอบว่าd ≤ mและn mod d = 0 ทั้งหมดนี้สามารถทำได้ในเวลาพหุนาม (โปรดจำไว้ว่ามันคือความยาวของการเข้ารหัสที่นับและนั่นคือลอการิทึมในn )
หากคุณสามารถแสดงให้เห็นว่าปัจจัยยังอยู่ในPคุณสามารถมั่นใจได้ว่าจะได้รับรางวัลยอดเยี่ยมมากมาย (และคุณได้ทำลายส่วนสำคัญของการเข้ารหัสของวันนี้)
สำหรับภาษาในทุกNPมีอัลกอริทึมแรงเดรัจฉานที่ตัดสินใจมัน deterministically เพียงทำการค้นหาพยานอย่างละเอียดถี่ถ้วน (โปรดทราบว่าความยาวสูงสุดของพยานถูก จำกัด โดยพหุนาม) ดังนั้นอัลกอริทึมของคุณในการตัดสินใจ PRIMES จึงเป็นอัลกอริทึมที่ดุร้ายกำลังตัดสินใจคอมโพสิต
เพื่อรับมือกับคำถามสุดท้ายของคุณเราต้องแนะนำลดลง การลดลงเป็นแนวคิดที่มีประสิทธิภาพมากของวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี การลดปัญหาหนึ่งไปยังอีกปัญหาหนึ่งโดยทั่วไปหมายถึงการแก้ปัญหาหนึ่งโดยวิธีการแก้ปัญหาอื่น
ให้Σเป็นตัวอักษรและและBเป็นภาษาเหนือΣ เป็นพหุนามเวลาหลายหนึ่งซึ้งปรับปรุงเพื่อBถ้ามีฟังก์ชั่นF : Σ * →การΣ *มีคุณสมบัติดังต่อไปนี้
- W ∈ ⇔ ฉ ( W ) ∈ B สำหรับทุกW ∈ Σ *
- ฟังก์ชันfสามารถคำนวณได้โดยเครื่องทัวริงสำหรับทุกอินพุตwในจำนวนขั้นตอนที่ล้อมรอบด้วยพหุนามใน w |
ในกรณีนี้เราเขียน≤ P B
ตัวอย่างเช่นให้Aเป็นภาษาที่มีกราฟทั้งหมด (เข้ารหัสเป็นเมทริกซ์ adjacency) ที่มีรูปสามเหลี่ยม (สามเหลี่ยมเป็นวัฏจักรของความยาว 3) ปล่อยให้Bเป็นภาษาที่มีเมทริกซ์ทั้งหมดที่มีการติดตามที่ไม่เป็นศูนย์ (ร่องรอยของเมทริกซ์คือผลรวมขององค์ประกอบแนวทแยงหลัก.) จากนั้นเป็นพหุนามเวลาหลายหนึ่งออกซิเจนB เพื่อพิสูจน์นี้เราต้องไปหาที่เหมาะสมฟังก์ชั่นการเปลี่ยนแปลงฉ ในกรณีนี้เราสามารถตั้งค่าFเพื่อคำนวณ 3 ถอำนาจของเมทริกซ์ถ้อยคำ สิ่งนี้ต้องการผลิตภัณฑ์เมทริกซ์สองตัวซึ่งแต่ละตัวมีความซับซ้อนพหุนาม
มันเป็นความจริงนิดว่าL ≤ P L (คุณสามารถพิสูจน์ได้อย่างเป็นทางการหรือไม่)
เราจะนำสิ่งนี้ไปใช้กับNPทันที
ภาษาLคือNP -hardถ้าหากว่าL '≤ P LสำหรับทุกภาษาL ' ∈ NP
NPภาษา -hard อาจจะหรืออาจจะไม่อยู่ในNPตัวเอง
ภาษาLคือNP-สมบูรณ์ถ้าหากว่าเท่านั้น
ที่มีชื่อเสียงที่สุดNPภาษาที่สมบูรณ์คือ SAT มันมีสูตรบูลีนทั้งหมดที่สามารถทำให้พอใจ ตัวอย่างเช่น ( a ∨ b ) ∧ (¬ a ∨¬ b ) ∈ SAT พยานที่ถูกต้องคือ { a = 1, b = 0} สูตร ( a ∨ b ) ∧ (¬ a ∨ b ) ∧¬ b ∉ SAT (คุณจะพิสูจน์ได้อย่างไร)
มันไม่ได้เป็นเรื่องยากที่จะแสดงให้เห็นว่า SAT ∈ NP เพื่อแสดงNP -hardness ของ SAT คือการทำงานบางอย่าง แต่มันก็ทำในปี 1971 โดยสตีเฟ่นคุก
เมื่อที่หนึ่งNPภาษาที่สมบูรณ์เป็นที่รู้จักกันมันก็ค่อนข้างง่ายที่จะแสดงNP -completeness ภาษาอื่น ๆ ผ่านทางลดลง หากภาษาAเป็นNP -hard แสดงว่าA ≤ p Bแสดงว่าBคือNP -hard เช่นกัน (ผ่านการส่งผ่านของ "≤ p ") ในปี 1972 Richard Karpตีพิมพ์รายชื่อ 21 ภาษาที่เขาสามารถแสดงได้คือNP- ลดขนาดผ่าน (transitive) ของ SAT (นี่เป็นบทความเดียวในคำตอบนี้ที่ฉันแนะนำให้คุณอ่านจริง ๆ แล้วมันไม่ยากที่จะเข้าใจและให้แนวคิดที่ดีว่าการพิสูจน์ความสมบูรณ์ของNPผ่านการลดขนาดไหน)
สุดท้ายสรุปสั้น ๆ เราจะใช้สัญลักษณ์NPHและNPCเพื่อแสดงคลาสของNP -hard และNP -complete language ตามลำดับ
- P ⊆ NP
- NPC ⊂ NPและNPC ⊂ NPHจริงๆแล้วNPC = NP ∩ NPHตามคำจำกัดความ
- ( A ∈ NP ) ∧ ( B ∈ NPH ) ⇒ A ≤ p B
โปรดทราบว่าการรวมNPC ⊂ NPเหมาะสมแม้ในกรณีที่P = NP หากต้องการดูนี้ทำให้ตัวเองชัดเจนว่าไม่มีภาษาที่ไม่น่ารำคาญสามารถลดลงไปเล็กน้อยหนึ่งและมีภาษาที่น่ารำคาญในPเช่นเดียวกับภาษาที่ไม่น่ารำคาญในNP นี่เป็นมุมตัวพิมพ์เล็ก (ไม่น่าสนใจมาก)
ภาคผนวก
แหล่งที่มาหลักของความสับสนดูเหมือนว่าคุณกำลังคิดถึง“ n ” ใน“ O ( n ↦ f ( n ))” เป็นการตีความการป้อนข้อมูลของอัลกอริทึมเมื่อมันหมายถึงความยาวของอินพุต นี่คือความแตกต่างที่สำคัญเพราะมันหมายถึงความซับซ้อนของซีมโทติคขึ้นอยู่กับการเข้ารหัสที่ใช้สำหรับอินพุต
สัปดาห์นี้สถิติใหม่สำหรับMersenne prime ที่รู้จักกันดีที่สุดนั้นประสบความสำเร็จ จำนวนเฉพาะที่รู้จักมากที่สุดในปัจจุบันคือ 2 74 207 281 - 1 หมายเลขนี้ใหญ่มากจนทำให้ฉันปวดหัวดังนั้นฉันจะใช้เลขที่เล็กกว่าในตัวอย่างต่อไปนี้: 2 31 - 1 = 2 147 483 647 มันสามารถ ถูกเข้ารหัสในรูปแบบที่แตกต่างกัน
- โดยเลขชี้กำลัง Mersenne เป็นเลขทศนิยม:
31
(2 ไบต์)
- เป็นเลขทศนิยม:
2147483647
(10 ไบต์)
- หมายเลข unary:
11111…11
โดยที่…
จะถูกแทนที่ด้วย 2 147 483 640 1
s เพิ่มเติม(เกือบ 2 GiB)
สตริงทั้งหมดเหล่านี้เข้ารหัสหมายเลขเดียวกันและเมื่อได้รับสิ่งเหล่านี้เราสามารถสร้างการเข้ารหัสอื่น ๆ ที่มีหมายเลขเดียวกันได้อย่างง่ายดาย (คุณสามารถแทนที่การเข้ารหัสทศนิยมด้วยเลขฐานสองฐานแปดหรือฐานสิบหกหากคุณต้องการมันจะเปลี่ยนความยาวโดยปัจจัยคงที่เท่านั้น)
อัลกอริทึมไร้เดียงสาสำหรับการทดสอบแบบดั้งเดิมนั้นเป็นพหุนามสำหรับการเข้ารหัสแบบเอกนารีเท่านั้น การทดสอบแบบดั้งเดิมของ AKSนั้นเป็นพหุนามสำหรับทศนิยม (หรือเบสอื่น ๆb ≥ 2) การทดสอบแบบดั้งเดิมของ Lucas-Lehmerเป็นอัลกอริธึมที่รู้จักกันดีที่สุดสำหรับ Mersenne primes M pด้วยpไพรม์คี่ แต่มันยังคงเป็นเลขชี้กำลังในความยาวของการเข้ารหัสเลขฐานสองของ Mersenne exponent p (พหุนามในp )
หากเราต้องการพูดคุยเกี่ยวกับความซับซ้อนของอัลกอริธึมมันสำคัญมากที่เราจะต้องชัดเจนว่าเราใช้ตัวแทนอะไร โดยทั่วไปเราสามารถสันนิษฐานได้ว่าใช้การเข้ารหัสที่มีประสิทธิภาพที่สุด นั่นคือไบนารีสำหรับจำนวนเต็ม (โปรดทราบว่าไม่ใช่ทุกหมายเลขเฉพาะเป็น Mersenne prime ดังนั้นการใช้เลขชี้กำลัง Mersenne ไม่ใช่รูปแบบการเข้ารหัสทั่วไป)
ในการเข้ารหัสเชิงทฤษฎีอัลกอริทึมจำนวนมากผ่านสตริงที่ไม่มีประโยชน์อย่างสมบูรณ์ของk 1
s เป็นพารามิเตอร์แรก อัลกอริทึมไม่เคยดูพารามิเตอร์นี้ แต่อนุญาตให้เป็นพหุนามอย่างเป็นทางการในkซึ่งเป็นพารามิเตอร์ความปลอดภัยที่ใช้ในการปรับความปลอดภัยของกระบวนการ
สำหรับปัญหาบางอย่างที่ภาษาการตัดสินใจในการเข้ารหัสไบนารีNPสมบูรณ์ภาษาการตัดสินใจที่จะไม่NPสมบูรณ์ถ้าการเข้ารหัสของตัวเลขที่ฝังตัวจะเปลี่ยนเป็นเอก ภาษาการตัดสินใจสำหรับปัญหาอื่น ๆ ยังคงเป็นปัญหาที่สมบูรณ์ หลังถูกเรียกว่าขอNPสมบูรณ์ ตัวอย่างที่รู้จักกันดีที่สุดคือการบรรจุถัง
นอกจากนี้ยังเป็น (และอาจจะมากกว่า) ที่น่าสนใจเพื่อดูวิธีการซับซ้อนของการเปลี่ยนแปลงขั้นตอนวิธีถ้าใส่ถูกบีบอัด สำหรับตัวอย่างของ Mersenne primes เราได้เห็นการเข้ารหัสสามตัวซึ่งแต่ละตัวถูกบีบอัดแบบลอการิทึมมากกว่ารุ่นก่อน
ในปี 1983, Hana Galperin และ Avi Wigdersonได้เขียนบทความที่น่าสนใจเกี่ยวกับความซับซ้อนของอัลกอริธึมกราฟทั่วไปเมื่อการเข้ารหัสอินพุตของกราฟถูกบีบอัดแบบลอการิทึม สำหรับปัจจัยการผลิตเหล่านี้ภาษาของกราฟที่มีรูปสามเหลี่ยมจากข้างต้น (ที่มันเห็นได้ชัดว่าในส่วนP ) ก็จะกลายเป็นปัญหาที่สมบูรณ์
และนั่นเป็นเพราะการเรียนภาษาเช่นPและNPมีการกำหนดไว้สำหรับภาษาไม่ได้สำหรับปัญหาที่เกิดขึ้น