เป็นไปได้จริงหรือที่จะพิสูจน์ขอบเขตที่ต่ำกว่า?


24

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

ฉันได้พยายามค้นหาข้อมูลโดยเฉพาะเกี่ยวกับขอบเขตที่ต่ำกว่าและการพิสูจน์ของพวกเขาแล้ว แต่ฉันไม่สามารถหาข้อเสนอแนะใด ๆ ที่น่าสนใจเกี่ยวกับหนังสือ / เอกสาร / เว็บไซต์ในเรื่องนี้

คำตอบ:


19

เราสามารถพิสูจน์สิ่งเหล่านี้ได้อย่างแน่นอน

ปัญหาหลายคนมีขอบเขตที่ต่ำกว่าเล็กน้อยเช่นว่าการหาต่ำสุดของชุดของที่ตัวเลข (ที่ไม่ได้เรียง / โครงสร้างในทางใดทางหนึ่ง) ใช้เวลาอย่างน้อยเวลา การพิสูจน์นี้ง่ายมาก: อัลกอริธึมสมมุติที่รันในเวลาไม่สามารถตรวจสอบตัวเลขทั้งหมดในอินพุตได้ ดังนั้นหากเราใช้อัลกอริทึมกับอินพุตเราสามารถสังเกตได้ว่ามันไม่เคยตรวจสอบองค์ประกอบเฉพาะของอินพุต การเปลี่ยนองค์ประกอบนั้นให้น้อยที่สุดเราสามารถทำให้อัลกอริทึมล้มเหลวได้Ω ( n ) o ( n )nΩ(n)o(n)

ขอบเขตล่างที่ไม่สำคัญคือขอบเขตล่างสำหรับการเรียงลำดับในแบบจำลองการเปรียบเทียบ ข้อพิสูจน์สำหรับที่ไปตามบรรทัดต่อไปนี้: เนื่องจากอินพุตของตัวเลขมีเอาต์พุตที่เป็นไปได้ (อินพุตอาจเป็นการเรียงสับเปลี่ยนของรายการที่เรียงลำดับดังนั้นเอาต์พุตสามารถเป็นการเรียงสับเปลี่ยนของอินพุตได้) ถ้าเราถูก จำกัด ให้ทำการเปรียบเทียบเท่านั้นอัลกอริทึมของเรา (โดยเฉลี่ย) ต้องดำเนินการอย่างน้อยการเปรียบเทียบเพื่อให้สามารถให้เอาท์พุทที่แตกต่างกันn n ! log 2 ( n ! ) = Ω ( n log n ) n !Ω(nlogn)nn!log2(n!)=Ω(nlogn)n!

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

ได้รับฟังก์ชั่นมีอยู่ปัญหาการคำนวณที่สามารถแก้ไขได้ในเวลาแต่ไม่สามารถแก้ไขได้ในเวลาn})O ( f ( n ) ) o ( f ( n )fO(f(n))o(f(n)logn)

ดังนั้นโดยทั่วไปถ้าคุณนึกถึงฟังก์ชั่นมีปัญหาที่ต้องใช้เวลามากในการแก้ไขf

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


ขนาดของอินพุตหรือเอาต์พุตเป็นขอบเขตล่างที่พบได้บ่อยที่สุด
กราฟิลส์

14

ใช่มันเป็นไปได้ ตัวอย่างคลาสสิกเป็นความจริงที่ว่าขั้นตอนวิธีการเรียงลำดับใด ๆ การเปรียบเทียบตามต้องเปรียบเทียบกับเรียงลำดับรายชื่อของความยาวnnΩ(nlogn)n

อย่างไรก็ตามขอบเขตที่ต่ำกว่าดูเหมือนจะพิสูจน์ได้ยากกว่าขอบเขตบน เพื่อพิสูจน์ว่ามีอัลกอริทึมการเรียงลำดับที่ต้องการการเปรียบเทียบคุณเพียงแค่ต้องแสดงอัลกอริทึม (ผสานการจัดเรียง - voila !) แต่สำหรับขอบเขตล่างคุณต้องแสดงให้เห็นว่าไม่มีอัลกอริทึมในชั้นเรียนใดสามารถแก้ปัญหาของคุณ ความยากลำบากในการทำที่แสดงโดยข้อเท็จจริงที่ว่าเรารู้ว่า ถึงแม้เรารู้ว่าอย่างน้อยหนึ่งของการรวมเหล่านั้นเป็นที่เข้มงวด (โดยทฤษฎีบทลำดับชั้นพื้นที่) และคนส่วนใหญ่คิดว่าพวกเขามีทุกอย่างเข้มงวดLN LPN PP S P A C EO(nlogn)LP S P A C E

LNLPNPPSPACE,
LPSPACE

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


ฉันคิดว่านี่คือสิ่งที่ฉันตามหลัง ".. คุณต้องแสดงให้เห็นว่าไม่มีอัลกอริทึมในชั้นเรียนใดสามารถแก้ปัญหาของคุณได้" นี่เป็นส่วนที่ฉันรู้สึกสับสนเล็กน้อยเนื่องจากฉันไม่สามารถรู้ได้ว่าจะทำอย่างไร อย่างน้อยโดยทั่วไป @Tom van der Zanden ได้อธิบายถึงการหาจำนวนขั้นต่ำที่ฉันเข้าใจ แต่เป็นวิธีการทั่วไปหรือไม่ ฉันหมายถึงทั่วไปว่ามีการโต้เถียงแบบนั้นเมื่อสร้างบทพิสูจน์? ขอบคุณสำหรับลิงค์เช่นกัน
hsalin

1
@ user1288420 คุณไม่ได้อยู่คนเดียว หากใครก็ตามสามารถเห็นได้อย่างชัดเจนว่าจะพิสูจน์ได้อย่างไรว่าไม่มีอัลกอริทึมในชั้นเรียนใดสามารถแก้ไขปัญหาบางอย่างได้ โดยทั่วไปแล้วคุณต้องหาคุณสมบัติบางอย่างที่อัลกอริธึมในชั้นเรียนมีและแสดงว่าคุณสมบัตินั้นป้องกันปัญหาบางอย่างที่จะแก้ไข ตัวอย่างเช่นเครื่องทัวริงทุกเครื่องที่ทำงานในเวลาซับไลน์มีคุณสมบัติที่ไม่สามารถอ่านอินพุตทั้งหมดได้ นั่นหมายความว่ามันไม่สามารถแก้ปัญหาส่วนใหญ่ได้ นั่นเป็นเรื่องเล็กน้อย น่าเสียดายที่กรณีที่น่าสนใจดูเหมือนว่าจะเป็นไปไม่ได้
David Richerby

3

ในการยกตัวอย่างเล็กน้อยคุณไม่สามารถหาจำนวนที่มากที่สุดจากชุดของตัวเลขโดยไม่ตรวจสอบพวกเขาทั้งหมดซึ่งต้องใช้เวลาเชิงเส้น ไม่มีหลักฐานใหญ่ แต่มีอัลกอริทึมที่ไม่จำเป็นต้องอ่านข้อมูลทั้งหมดเสมอไป ตัวอย่างที่ดีคือการค้นหารูปแบบทั้งหมดในสตริงซึ่งอาจไม่จำเป็นต้องอ่านสตริงทั้งหมด (อัลกอริทึม Boyer-Moore) แต่ฉันไม่ควรทำซ้ำสิ่งที่ตอบไปแล้วอาจดีกว่าฉันn

อย่างไรก็ตามมีคำถามบางข้อที่เรียกร้องให้มีคำพูดเพิ่มเติมเกี่ยวกับขอบเขตล่าง (หรือขอบเขตความซับซ้อนโดยทั่วไป)

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

เช่นเดียวกับขนาดของข้อมูลที่ทำหน้าที่เป็นข้อมูลอ้างอิงในการประเมินราคาของการคำนวณ การใช้เลขจำนวนเต็มเดียวหรือสองจำนวนเต็มเป็นหน่วยของขนาดไม่แตกต่างกัน

อย่างไรก็ตามทั้งสองตัวเลือกจะต้องเกี่ยวข้องกัน

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

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


การค้นหาสิ่งที่เกิดขึ้นทั้งหมดของรูปแบบในสตริงนั้นจำเป็นต้องมีการอ่านสตริงทั้งหมด: ถ้ารูปแบบเป็น "a" คุณจะไม่สามารถค้นหาสิ่งที่เกิดขึ้นทั้งหมดโดยไม่ตรวจสอบว่าตัวละครทุกตัวของสตริง
David Richerby

1
@DavidRicherby จริง ๆ แล้วไม่ได้ อัลกอริทึม Boyer-Moore เริ่มต้นจากจุดสิ้นสุดของรูปแบบจึงกระโดดขึ้นในสาย หากการจับคู่พยายามล้มเหลวก็ไม่จำเป็นต้องอ่านจุดเริ่มต้นของสตริง และมันก็มีการปรับให้เหมาะสมคล้ายกับอัลกอริทึม Knuth-Morris-Pratt เพื่อข้ามความพยายามที่จะล้มเหลวเนื่องจากโครงสร้างของรูปแบบ แน่นอนว่ายังมีรูปแบบที่จำเป็นต้องอ่านสตริงทั้งหมด
babou

@DavidRicherby ทำไมคุณถามคุณรู้
babou

ฉันไม่เข้าใจความคิดเห็นที่สองของคุณ คำตอบเดิมของคุณมีการอ้างสิทธิ์ที่ไม่ถูกต้อง แน่นอนฉันรู้ว่ามันไม่ถูกต้องนั่นคือวิธีที่ฉันสามารถชี้ให้เห็น! คนอื่นอาจไม่รู้ว่ามันไม่ถูกต้องดังนั้นมันจึงสร้างความสับสนให้กับพวกเขาที่จะออกคำตอบเหมือนเดิม
David Richerby

1
@ DavidRicherby จุดของฉันคือคุณเข้าใจสิ่งที่ฉันหมายถึง ฉันควรจะได้กล่าวว่าอาจจะไม่มากกว่าไม่ได้ สิ่งนี้ไม่ได้เรียกสไตล์ความคิดเห็นที่ทำให้ผู้อ่านเชื่อว่าฉันกำลังพูดถึงเรื่องไร้สาระ และในขณะที่ทำเช่นนั้นคุณทำผิดพลาดแบบเดียวกันโดยระบุว่า "การค้นหาสิ่งที่เกิดขึ้นทั้งหมดในรูปแบบของสตริงจำเป็นต้องอ่านสตริงทั้งหมด " เมื่อคุณควรจะพูดว่า "การค้นหาสิ่งที่เกิดขึ้นทั้งหมดในรูปแบบอาจต้องใช้สตริงอ่านสตริงทั้งหมด ". ฉันตั้งใจจะระบุว่าการอ่านอินพุตอาจไม่จำเป็นเสมอไปเพื่อลดตัวอย่างก่อนหน้าของฉัน
babou
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.