ทำไมไม่ลองแสดงตัวเลขในอัลกอริธึมเชิงตัวเลข?


15

อัลกอริธึมเวลาแบบหลอกเทียมคืออัลกอริธึมที่มีเวลาทำงานพหุนามกับค่าอินพุต (ขนาด) แต่เวลาทำงานแบบเอ็กซ์โพเนนเชียลตามขนาดอินพุต (จำนวนบิต)

ตัวอย่างเช่นการทดสอบว่าตัวเลขnเป็นจำนวนเฉพาะหรือไม่ต้องการวนซ้ำผ่านตัวเลขตั้งแต่ 2 ถึงn1และตรวจสอบว่าn mod iเป็นศูนย์หรือไม่ หากตัวดัดแปลงใช้เวลา O (1) ความซับซ้อนของเวลาโดยรวมจะเป็น O (n)

แต่ถ้าเราปล่อยให้xเป็นจำนวนบิตที่ต้องการในการเขียนอินพุตดังนั้นx=logn (ไบนารี) ดังนั้นn=2xและเวลาการทำงานของปัญหาจะเป็น O ( 2x ) ซึ่งเป็นเลขชี้กำลัง

คำถามของฉันคือถ้าเราพิจารณาการเป็นตัวแทนของอินพุตn , ดังนั้นเสมอแล้วเวลาx=nหลอก - พหุนามจะเท่ากับความซับซ้อนของเวลาพหุนาม เหตุใดเราจึงไม่ทำเช่นนี้

ยิ่งไปกว่านั้นเนื่องจากมีอัลกอริธึมเวลาหลอกเทียมสำหรับเป้โดยใช้x=n , เป้จะเป็นพหุนามเป็นผลลัพธ์ P = NP


3
ที่จริงแล้วเราทำเช่นนี้ไม่บ่อยนัก ด้วยเหตุผลเดียวกันเรามักจะไม่จัดการกับภาษาที่แตกต่างกัน แต่มีผลลัพธ์ที่น่าสนใจมากมายที่เกี่ยวข้องกับสัตว์ร้ายเหล่านี้ คุณเคยดูหรือไม่
André Souza Lemos

2
ใช่ถ้าคุณแยกความแตกต่างระหว่างขนาดและขนาดคุณจะสูญเสียแนวคิดทั้งหมดที่บอกกล่าวกับความแตกต่างนั้น
André Souza Lemos

7
เพราะมันทำให้อสูรใส่ชุดที่ดี มันไม่ได้ทำให้อะไรเร็วขึ้นเพียง แต่ทำให้ "ความซับซ้อนของเวลาทำงาน" ไม่มีความหมาย
กราฟิลส์

4
@Drupalist ปัญหาเป้ unary ไม่จริงเป็นที่รู้จักกันว่า NP- สมบูรณ์เพราะการลดลงตามปกติปัญหาเป้ถือว่าเป็นตัวเลขที่เขียนออกมาในไบนารี หากคุณลองทำการลดขนาดมาตรฐาน แต่เขียนตัวเลขเป็นเอกฐานการลดจะไม่สามารถคำนวณได้ในเวลาพหุนาม เป็นผลให้ปัญหาเป้ unary ถูกแก้ไขได้ในเวลาพหุนามจะไม่ได้หมายความว่า P = NP
templatetypedef

2
คุณอาจต้องการที่จะตรวจสอบคำตอบอื่น ๆ ที่ติดแท็กหลอกพหุนามโดยเฉพาะอย่างยิ่งคนนี้
กราฟิลส์

คำตอบ:


17

สิ่งนี้หมายความว่าเป้นนารีที่เป็นเอกภาพในพีมันไม่ได้หมายความว่าเป้ (ด้วยตัวเลขที่เข้ารหัสด้วยเลขฐานสอง) อยู่ในพี

เป้เป็นที่รู้จักกันว่าเป็น NP- สมบูรณ์ หากคุณแสดงว่าเป้อยู่ใน P นั่นจะแสดงว่า P = NP

แต่คุณยังไม่ได้แสดงให้เห็นว่าเป้เป้น P คุณได้แสดงให้เห็นว่าเป้นนารีที่อยู่ในเป้น P อย่างไรก็ตามไม่ทราบว่าเป้นนารีที่ไม่สมบูรณ์นั้นเป็น NP-Complete (แท้จริงแล้วความสงสัยมาตรฐานก็คือ ) ดังนั้นการใส่เป้หลัง unary ใน P ไม่ได้หมายความว่า P = NP


ดังนั้นปัญหาใดบ้างที่เราควรใส่ใจเพิ่มเติมเกี่ยวกับเป้สะพายหลังหรือเป้หลังเอกนารี? หากแรงจูงใจของคุณขึ้นอยู่กับข้อกังวลในทางปฏิบัติคำตอบนั้นจะขึ้นอยู่กับขนาดของตัวเลขที่คุณต้องการแก้ปัญหาเครื่องหลัง: หากพวกเขามีขนาดใหญ่คุณต้องใส่ใจมากขึ้นเกี่ยวกับเครื่องหลังเครื่องหลัง หากแรงจูงใจของคุณขึ้นอยู่กับข้อกังวลทางทฤษฎีแล้วเป้น่าสนใจมากขึ้นเพราะมันช่วยให้เราได้รับความเข้าใจที่ลึกซึ้งยิ่งขึ้น - มันช่วยให้เราสามารถแยกความแตกต่างระหว่างขนาดเทียบกับขนาด - ในขณะที่เป้ unary ทำให้เราแตกต่าง


เพื่อตอบคำถามติดตามผลเกี่ยวกับอัลกอริธึมการเขียนโปรแกรมแบบไดนามิกสำหรับปัญหาเป้:

ใช่อัลกอริทึมการเขียนโปรแกรมแบบไดนามิกเดียวกันสามารถนำไปใช้กับทั้งเป้และเป้หลัง unary เวลาทำงานของมันคือพหุนามในขนาดของตัวเลข แต่เป็นเลขชี้กำลัง (ไม่ใช่พหุนาม) ในความยาวของตัวเลขเมื่อเข้ารหัสในไบนารี ดังนั้นเวลาทำงานของมันคือพหุนามในความยาวของอินพุตเมื่ออินพุตถูกเข้ารหัสในเอกภาพ แต่ไม่ใช่พหุนามในความยาวของอินพุตเมื่ออินพุตถูกเข้ารหัสในไบนารี ที่ว่าทำไมเราไม่พิจารณาขั้นตอนวิธีการเขียนโปรแกรมแบบไดนามิกนี้จะเป็นขั้นตอนวิธีการพหุนามเวลาสำหรับเป้เอก แต่ไม่คิดว่ามันจะเป็นขั้นตอนวิธีการพหุนามเวลาสำหรับ (ไบนารีเข้ารหัส) เป้

จำได้ว่าเราบอกว่าอัลกอริทึมวิ่งในเวลาพหุนามถ้าเวลาทำงานของมันคือที่มากที่สุดบางพหุนามของความยาวของการป้อนข้อมูลในบิต


1
ขอบคุณมากฉันไม่ทราบว่าระดับความซับซ้อนของเอกภาพและไม่ใช่เอกภาพของอัลกอริทึมเดียวกันอาจแตกต่างกัน เหตุใดโซลูชันการเขียนโปรแกรมแบบไดนามิกของเป้มาตรฐานไม่สามารถใช้กับเป้ข้างเดียวและนำไปสู่ระดับความซับซ้อนที่แตกต่างกันได้อย่างไร ฉันกำลังมีปัญหากับการทำความเข้าใจกับปัญหาที่เกิดขึ้นโดยไม่ทราบสาเหตุ
M ama D

@Drupalist ฉันได้แก้ไขคำตอบของฉันเพื่อเพิ่มสองย่อหน้าในตอนท้ายเพื่อตอบคำถามนั้น
DW

x=n

x=n

1
@NikosM. ตกลงเข้าใจแล้ว ขอบคุณสำหรับความคิดเห็น. โดยส่วนตัวฉันไม่เชื่อว่าคำสั่งนั้นไม่ถูกต้องดังนั้นฉันจะปล่อยมันตามที่เป็นอยู่ (เหตุผลของฉัน: ความยาวของอินพุตขึ้นอยู่กับตัวเลือกของการเป็นตัวแทนดังนั้นฉันไม่เชื่อว่ามันขัดแย้งกับสิ่งที่คุณเขียน) อย่างไรก็ตามเป็นไปได้ว่ามุมมองของฉันอาจแคบเกินไปหรือคำอธิบายหรือคำอธิบายที่ละเอียดมากขึ้นจาก มุมมองที่แตกต่างอาจเพิ่มมูลค่า อย่าลังเลที่จะเขียนคำตอบเพิ่มเติมหรือแนะนำการแก้ไขหากคุณรู้สึกว่าประเด็นนี้ชัดเจนขึ้น
DW

6

ฉันจะเพิ่มสิ่งเล็ก ๆ ลงในคำตอบของ DW:

ฉันเคยเห็นคนที่คิดว่าเพราะ unary Knapsack อยู่ใน P ดังนั้นเราจึงสามารถใช้มันแทน Knapsack ซึ่งอัลกอริทึมที่ดีที่สุดในปัจจุบันมีเวลาชี้แจง

W={w1,,wn}kO(nk)

O(nk)

หากคุณสนใจปัญหาในการแยกคุณสามารถทำได้ จริงๆแล้วนั่นคือสิ่งที่คนในอัลกอริทึมมักจะทำ ความซับซ้อนของอัลกอริธึมกราฟมักแสดงในรูปของจุดยอดของจำนวนและจำนวนของขอบไม่ใช่ขนาดของสตริงที่กำหนดรหัส

แต่นี่เป็นเพียงเมื่อเราจัดการกับปัญหาที่แยกได้ ไม่มีประโยชน์เมื่อเราจัดการกับปัญหากับอินพุตที่แตกต่างกัน สำหรับกราฟเราสามารถพูดคุยเกี่ยวกับเวลาที่ใช้ในการเขียนกับจำนวนของจุดยอดและขอบ สำหรับเป้เราสามารถพูดคุยเกี่ยวกับจำนวนรายการและขนาดของเป้ แต่ถ้าเราต้องการพูดถึงทั้งคู่ เช่นเมื่อเราต้องการลดปัญหาหรืออภิปรายระดับของปัญหาที่มีปัญหาตามอำเภอใจไม่ใช่เฉพาะปัญหาที่มีกราฟเป็นข้อมูลป้อนเข้า เราต้องการพารามิเตอร์สากลของอินพุต อินพุตโดยทั่วไปเป็นเพียงสตริงเราคือผู้ตีความสัญลักษณ์ของมันเป็นตัวเลขที่ไม่เป็นเอกภาพเลขฐานสองกราฟและอื่น ๆ เพื่อพัฒนาทฤษฎีทั่วไปของความซับซ้อนของอัลกอริทึมและปัญหาที่เราต้องการพารามิเตอร์ทั่วไปของอินพุต ขนาดของอินพุตเป็นตัวเลือกที่ชัดเจนและมีความแข็งแกร่งเพียงพอที่เราจะสามารถสร้างทฤษฎีที่สมเหตุสมผลได้ มันไม่ใช่ความเป็นไปได้เท่านั้น สำหรับสิ่งประดิษฐ์เราสามารถสร้างทฤษฎีตาม2

k100100k21001kk21001

nnp(n)kp(n)k2p(n)1kk

nk


ขอบคุณมากอีกหนึ่งคำถามด้วยการแปลงอินพุตให้เป็นเอกภาพของสิ่งที่จะเกิดขึ้นกับปัญหาในการพิจารณาว่าตัวเลขนั้นดีหรือไม่? ปัญหานี้คือพหุนามขึ้นอยู่กับขนาดอินพุต แต่เอกซ์โพเนนเชียลอ้างอิงจากบิตอินพุต (ดังที่ฉันได้กล่าวถึงในคำถาม) การแปลงนี้จะทำให้ดีขึ้นหรือไม่
M ama D

nO(n)nb=210241210241210241
Kaveh

ชี้แจงชัดเจน แต่ดูความคิดเห็นของฉันภายใต้คำตอบของ DW ซึ่งเกี่ยวข้องกับบทความนี้
Nikos M.

2

ในระยะสั้นและเรียบง่ายฉันจะแสดงให้คุณเห็นว่าทำไม

Tally

x = input integer

factors = [];

for i in range(1, x + 1):
    if x % i == 0:
     factors.append(i)

 print(factors)

xxO(2n)

Tally/UnaryO(n)x

x = input tallies

factors = [];

for i in range(1, x + 1):
    if x % i == 0:
     factors.append(i)

 print(factors)

การแทนค่าอินพุตไม่ทำให้โค้ดทำงานเร็วขึ้น แม้ว่าอัลกอริธึมที่ 2 จะเป็นโพลีเวลาจริง มันไม่ค่อยมีประโยชน์ในการค้นหาปัจจัยสำหรับ RSA


เป็นตัวอย่างที่ดีขอบคุณ
M ama D
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.