ฟังก์ชั่นที่มีการเติบโตช้ากว่า Ackermann ผกผันปรากฏในขอบเขตรันไทม์หรือไม่?


20

อัลกอริธึมที่ซับซ้อนบางอย่าง ( ยูเนี่ยน - พบ ) มีฟังก์ชัน Ackermann ผกผันเกือบคงที่ที่ปรากฏในความซับซ้อนของเวลาแบบอะซิมโทติคและเป็นเวลาที่เลวร้ายที่สุดกรณีที่เหมาะสมที่สุดถ้าเทอม Ackermann ผกผันเกือบคงที่

มีตัวอย่างของอัลกอริธึมที่ทราบพร้อมเวลาทำงานที่เกี่ยวข้องกับฟังก์ชันที่เติบโตช้ากว่า Invermann หรือไม่ (เช่นผู้บุกรุกฟังก์ชันที่ไม่เทียบเท่า Ackermann ภายใต้พหุนามหรือเอกซ์โปเนนเชียล ฯลฯ ) ที่ให้เวลากรณีเลวร้ายที่สุด ซับซ้อนในการแก้ปัญหาพื้นฐานหรือไม่


2
O(1)อัลกอริธึมเวลา? คุณกำลังถามเกี่ยวกับปัญหาที่ทราบซึ่งอัลกอริทึมที่รู้จักกันดีคือและ ? ก่อนอื่นคุณต้องค้นหาฟังก์ชั่นที่กำลังเติบโต "เร็วกว่า" โดยพื้นฐานกว่าเช่น TREEจากนั้นจึงใช้อินเวอร์สแล้วค้นหาปัญหาที่เหมาะกับมัน! ω(1)โอ(α(n))A(n)(n)
Pål GD

1
มีอัลกอริทึมที่ออกแบบมาโดยพลการสร้างขึ้นจากลำดับชั้น
TH

2
@vzn:ใด ๆ ไม่ใช่เวลาที่สร้างได้ (ซึ่งรวมถึง ) ดังนั้นทฤษฎีบทลำดับชั้นเวลาจึงไม่สามารถใช้ที่นี่ได้ (n)=โอ(n)α(n)
mdxn

@ mdx มีคนดีใจที่ชี้ให้เห็นว่าเพียงแค่ทดสอบคุณขยิบตา เมื่อเร็ว ๆ นี้มีการคิดว่าอาจจะมีลักษณะทั่วไปของลำดับชั้นเวลา thm สำหรับฟังก์ชั่นย่อยแต่อย่างไรก็ตามขีด จำกัดเป็นเพราะเวลาที่สร้างได้ TM ต้องอ่านอินพุตทั้งหมด แต่เรากำลังพูดถึงอัลกอริธึมอื่น ๆ เหล่านี้เช่นความซับซ้อนของเวลา Invermann ที่ตรงกันข้ามหรือไม่? มีปัญหาในการแสดงภาพนี้! รู้สึกว่าคำถามมีมากขึ้นเกี่ยวกับการมีอยู่ของภาษาย่อย .... อาจมีแบบสำรวจหรือคำอธิบายบางแห่งที่ไหนสักแห่ง ....โอ(n)โอ(n)โอ(n)
vzn

1
@ vzn: OP ต้องการอธิบายอย่างชัดเจนถึงรูปแบบการคำนวณที่พวกเขามีอยู่ในใจ DLOGTIMEและLHจำเป็นต้องได้รับการกำหนดบนการเข้าถึงแบบสุ่ม TM (หรือเทียบเท่า) เมื่อระบุกลไกของเราเราอาจเพิ่มพลังมากเกินไปโดยไม่ตั้งใจ อาจถึงขั้นที่ความคิดเกี่ยวกับความซับซ้อนในการคำนวณไม่เกิดผล ในแง่พื้นฐานที่สุดเราจะต้องเปลี่ยนความคิดของเวลาซับซ้อน (ซึ่งเป็นสิ่งที่รันไทม์ตัดจำหน่าย) กับความเสี่ยงที่คำจำกัดความดังกล่าวอาจกลายเป็น contrived มาก (ไปเดียวกันสำหรับรูปแบบของการคำนวณ)
mdxn

คำตอบ:


8

เซท Pettie ขึ้นมาด้วยอัลกอริธึมสำหรับการคำนวณความไวของต้นไม้ที่ทอดยาวในเวลาการปรับปรุงอัลกอริธึมของ Tarjanซึ่งคำนวณในเวลาเดียวกันn)) (เปรียบเทียบสิ่งนี้กับอัลกอริทึม Chazelle ของสำหรับการคำนวณทรี spanning ต่ำสุดของตัวเอง) ปัญหาความไวขอให้คำนวณสำหรับกราฟที่กำหนดและทรีสแปนนิ่งขั้นต่ำที่กำหนด สามารถเปลี่ยนแปลงได้โดยไม่ต้องเปลี่ยนแผนผัง spanning ขั้นต่ำO(ม.เข้าสู่ระบบα(ม.,n))O(ม.α(ม.,n))O(ม.α(ม.,n))

(ขอบคุณ Tsvi Kopelowitz สำหรับการอ้างอิงนี้)


1
ฉันไม่ทราบว่า Ackermann แบบผกผันบันทึกนั้น "ช้ากว่าเดิม" มากกว่า Ackermann แบบผกผันหรือไม่ แต่ฉันพบว่าเวลาทำงานประเภทนี้น่าประหลาดใจ
Yuval Filmus

4

ฟังก์ชั่นมากที่สุดตลกช้าเติบโตที่ฉันเคยเห็นอย่างจริงจังใช้ในกระดาษเป็นจำนวนครั้งที่คุณต้องใช้ Ackermann ผกผันจะลดลงnจะคงที่คงที่บาง มันถูกใช้ในบทความนี้ในการคาดเดา deque บนต้นไม้สเปรย์α* * * *(n)n


-1

เมื่ออลันทัวริงค้นพบคอมพิวเตอร์มีหลายรุ่นสำหรับคอมพิวเตอร์ที่เสนอ ทัวริงพิสูจน์ว่า (3) โมเดลเหล่านี้สามารถจำลองซึ่งกันและกันและคำนวณฟังก์ชัน Ackermann ในขณะที่โมเดลอื่น ๆ สามารถจำลองซึ่งกันและกัน แต่ไม่ใช่ฟังก์ชัน Ackermann (ดังนั้นจึงไม่สามารถจำลอง 3) ดังนั้นทั้งสามรุ่น (Turing Machine, von Neumann และอีกอันที่ฉันไม่รู้) จึงถูกเลือกให้เป็นสถาปัตยกรรมสำหรับคอมพิวเตอร์ นี่ไม่ได้หมายความว่าฟังก์ชั่น Ackermann นั้นมีขีด จำกัด ของคอมพิวเตอร์ แต่ฉันคิดว่ามันเป็นวิทยาศาสตร์ที่ยาก ฉันไม่ทราบถึงฟังก์ชันที่คำนวณใด ๆ ที่เติบโตเร็วกว่าฟังก์ชัน Ackermann

ตอนนี้ฉันไม่คิดว่ามีปัญหาจริงที่ตรงกับคำถามของคุณ แต่บางทีเราสามารถสร้างได้ เราจำเป็นต้องใส่ข้อ จำกัด ในการป้อนข้อมูลแม้ว่า เนื่องจากเราไม่สามารถใช้ O (n) ได้เราจึงไม่สามารถตรวจสอบอินพุตทั้งหมดได้ ในความเป็นจริงเราไม่สามารถตรวจสอบความยาวของอินพุตได้เช่นเดียวกับ O (log n) ดังนั้นเราต้องเป็นพารามิเตอร์แรกที่แสดงถึงความยาวของส่วนที่เหลือของอินพุทเช่น c เช่นนั้น Ackermann (c) คือความยาวของอินพุท เนื่องจากสิ่งนี้ยังไม่เหมาะสมเราจึงต้องการค่าแรกในอินพุตพารามิเตอร์ c ของเราเช่น bb (c) นั้นเกี่ยวกับความยาวของอินพุตซึ่ง bb คือฟังก์ชันบีเวอร์ที่ยุ่ง ฟังก์ชั่นนี้ไม่สามารถคำนวณได้ แต่มี bb (c) อยู่แน่นอน จากนั้นอัลกอริทึมจะเป็นดังนี้:

for (int i=0; i<c; i++) {
    if (input[i] == null) {
        return false;
    }
}
return true;

วัตถุประสงค์ของอัลกอริทึมคือการตรวจสอบว่าถ้า c เป็นค่าผกผันของ bb หากความยาวอินพุตนั้นมากกว่า bb (c)

หากมีฟังก์ชันที่คำนวณได้ที่เติบโตเร็วกว่าฟังก์ชัน Ackermann ฉันคิดว่าเราสามารถใช้ฟังก์ชันผกผันเพื่อสร้างอัลกอริทึมที่ตอบคำถามของคุณในอินพุตใดก็ได้


มีฟังก์ชั่นที่มีอยู่ซึ่งเติบโตเร็วกว่าฟังก์ชั่น Ackermann ตามที่ระบุไว้ในความคิดเห็น (TREE (n)) ส่วนที่ยุ่งยากของคำถามคือสร้างอัลกอริทึมที่มีขอบเขตเวลาทำงานของอินเวอร์สของฟังก์ชันนั้น เครื่องดังกล่าวมีเวลาไม่เพียงพอที่จะคำนวณค่าผกผันของฟังก์ชันในตอนแรกดังนั้นการสร้าง TM ที่ประสบความสำเร็จจะไม่ได้ตรงไปข้างหน้า
mdxn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.