มีปัญหาใด ๆ ที่อัลกอริทึมที่รู้จักกันดีที่สุดมีรันไทม์


18

ฉันไม่เคยเห็นอัลกอริทึมที่มีการบันทึกในตัวส่วนมาก่อนและฉันสงสัยว่ามีอัลกอริทึมที่มีประโยชน์จริง ๆ กับแบบฟอร์มนี้หรือไม่?

ฉันเข้าใจหลายสิ่งหลายอย่างที่อาจทำให้ปัจจัยตัวคูณถูกคูณในเวลาทำงานเช่นการเรียงลำดับหรืออัลกอริธึมแบบทรี แต่สิ่งใดที่ทำให้คุณต้องหารด้วย log factor


24
mergesort กับf(n)=nlog2n n
Jeffε

12
@ Jɛ ff E snarky Mcsnarkster
Suresh Venkat

5
การจัดเรียง Radix - เป็นO(nlogn/logn)จริงๆ สิ่งที่เกิดขึ้นคือเนื่องจากการเข้าถึงแบบสุ่มคุณสามารถบันทึก log factor ....
Sariel Har-Peled

ฉันสงสัยว่าทฤษฎีบทลำดับชั้นของ DTIME สามารถใช้เป็นข้อโต้แย้งต่อการมีอยู่ของอัลกอริธึมได้หรือไม่เนื่องจากว่าเราสามารถทำเคล็ดลับการประหยัดพื้นที่ที่คล้ายกันในรุ่น RAM ได้
chazisop

คำตอบ:


41

คำตอบปกติของ "สิ่งที่ทำให้คุณแบ่งบันทึกเป็นอย่างไร" เป็นการรวมกันของสองสิ่ง:

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

ฉันคิดว่ามีหลายตัวอย่าง แต่ตัวอย่างคลาสสิกคืออัลกอริธึมสี่ประการของรัสเซีย สำหรับการเรียงลำดับทั่วไปที่ยาวที่สุด ฯลฯ จริง ๆ แล้วจบลงด้วยการเป็นเพราะมันใช้แนวคิดบรรจุบิต log factor โดยใช้แนวคิดอื่น: แทนที่บล็อกของการดำเนินการบิตO ( บันทึก2 n )ด้วยการค้นหาตารางเดี่ยวO(n2/log2n)O(log2n)


35

Cube ของ Rubik เป็นตัวอย่างที่เป็นธรรมชาติ (และสำหรับฉันโดยไม่คาดคิด) n×n×nลูกบาศก์ต้องΘ(n2/logn)ขั้นตอนในการแก้ปัญหา (โปรดทราบว่านี่คือสัญกรณ์ theta ดังนั้นมันจึงเป็นขอบเขตบนและล่างที่แคบ)

ดังแสดงในเอกสารนี้ [1]

มันอาจจะคุ้มค่าที่จะกล่าวถึงความซับซ้อนของการแก้ตัวอย่างเฉพาะของลูกบาศก์ของรูบิคที่เปิดอยู่ แต่คาดว่าจะเป็น NP-hard ( ยกตัวอย่างเช่นที่นี่ ) NP hard [2] Θ(n2/logn)ขั้นตอนวิธีการรับประกันวิธีการแก้ปัญหาและมันรับประกันว่าการแก้ปัญหาทั้งหมดเป็น asymptotically ดีที่สุด แต่ก็ไม่อาจแก้ปัญหากรณีที่เฉพาะเจาะจงได้อย่างดีที่สุด คำจำกัดความที่มีประโยชน์ของคุณอาจใช้หรือไม่ใช้ที่นี่เนื่องจากลูกบาศก์ของรูบิคโดยทั่วไปจะไม่ได้รับการแก้ไขด้วยอัลกอริทึมนี้ ( โดยทั่วไปอัลกอริทึมของ Kociembaจะใช้สำหรับคิวบ์ขนาดเล็ก

[1] Erik D. Demaine, Martin L. Demaine, Sarah Eisenstat, Anna Lubiw และ Andrew Winslow อัลกอริทึมสำหรับการแก้ลูกบาศก์ของรูบิค การดำเนินการประชุมวิชาการประจำปีของยุโรปครั้งที่ 19 เกี่ยวกับอัลกอริทึม (ESA 2011), 5-9 กันยายน 2011, หน้า 689–700

[2] Erik D. Demaine, Sarah Eisenstat และ Mikhail Rudoy การแก้ไข Cube ของ Rubik อย่างสมบูรณ์ที่สุดคือ NP-complete การประชุมวิชาการนานาชาติครั้งที่ 35 เรื่องวิทยาการคอมพิวเตอร์ (STACS 2018) ในระหว่างวันที่ 28 กุมภาพันธ์ - 3 มีนาคม 2561 หน้า 24: 1-24: 13


16

ตัวอย่างของปรากฏในส่วนที่ไม่มีเทคนิคการบรรจุบิตเป็นรายงานล่าสุดโดยAgarwal, Ben Avraham, Kaplan และ SharirในการคำนวณระยะทางFréchetโดยสิ้นเชิงระหว่างโซ่เหลี่ยมเหลี่ยมสองอันในเวลาO ( n 2 log log n / log n ) . ในขณะที่ฉันไม่คุ้นเคยกับรายละเอียดของอัลกอริทึมเคล็ดลับทั่วไปอย่างหนึ่งคือการแบ่งอินพุตเป็นชิ้นเล็ก ๆ แล้วรวมคำตอบอย่างชาญฉลาด (แน่นอนว่าเสียงนี้แบ่งและพิชิต แต่คุณไม่ได้รับ log n ในส่วนที่มีเทคนิคฉลาดบางอย่าง)lognO(n2loglogn/logn)


5
นี่เป็นตัวอย่างที่ซับซ้อนมากขึ้นของเทคนิค "สี่รัสเซีย" ที่อธิบายไว้ในคำตอบของเดวิด
Jeffε

13

ไม่ว่าคุณจะถามอะไร แต่สถานการณ์ "อยู่ในป่า" ซึ่งปัจจัยบันทึกปรากฏในตัวหารคือกระดาษ " กรวดและโปรแกรมการแตกแขนงสำหรับการประเมินต้นไม้ " โดยสตีเฟ่นคุกปิแอร์ McKenzie ดัสติน Wehr มาร์ค Braverman และ ราหุลสันทนัม

ปัญหาการประเมินผลต้นไม้ (TEP) คือ: ให้ต้นไม้ -ary ที่มีหมายเหตุประกอบด้วยค่าใน{ 1 , , k }บนใบไม้และฟังก์ชัน{ 1 , , k } d{ 1 , , k }บนโหนดภายใน ประเมินต้นไม้ ที่นี่แต่ละโหนดภายในได้รับค่าของฟังก์ชั่นคำอธิบายประกอบกับค่าของเด็ก ๆ นี่เป็นปัญหาง่ายและประเด็นก็คือแสดงให้เห็นว่ามันไม่สามารถแก้ไขได้ในพื้นที่ลอการิทึม (เมื่อความสูงของต้นไม้เป็นส่วนหนึ่งของอินพุต) ด้วยเหตุนี้เราจึงสนใจขนาดของโปรแกรมการแตกสาขาที่แก้ปัญหา TEPd{1,,k}{1,,k}d{1,,k}

ในส่วนที่ 5 ขอบเขตที่ จำกัด จะถูกนำเสนอสำหรับต้นไม้ที่มีความสูง 3 ทั้งสำหรับ TEP และสำหรับปัญหาที่เกี่ยวข้องกับ BEP ซึ่งผลลัพธ์จะถูกยุบไปที่ในทางใดทางหนึ่งโดยพลการ สำหรับ TEP ผูกพันเป็นΘ ( k 2 d - 1 )ในขณะที่สำหรับ BEP ผูกพันเป็นΘ ( k 2 d - 1 /บันทึกk )คือคุณจะได้รับการประหยัดของบันทึก k{0,1}Θ(k2d1)Θ(k2d1/logk)logk


12

แม้ว่ามันจะไม่เกี่ยวกับรันไทม์ แต่ฉันคิดว่ามันควรค่าแก่การกล่าวถึงผลการคลาสสิกของ Hopcroft, Paul และ Valiant: [1] เนื่องจากยังอยู่ใน จิตวิญญาณของ "สิ่งที่อาจทำให้คุณบันทึกปัจจัยบันทึก"TIME[t]SPACE[t/logt]

ที่ให้ตัวอย่างมากมายของปัญหาที่รู้จักกันดีบนขอบเขตความซับซ้อนของพื้นที่ที่มีการบันทึกในส่วน (ขึ้นอยู่กับมุมมองของคุณฉันจะคิดว่าอาจทำให้ตัวอย่างนี้น่าสนใจมาก - เป็นทฤษฎีบทที่น่าทึ่ง! - หรือไม่น่าสนใจมาก - มันอาจจะไม่ "มีประโยชน์จริง ๆ ")

[1] Hopcroft, Paul และ Valiant ในเวลาเมื่อเทียบกับพื้นที่ J. ACM 24 (2): 332-337, 1977



8

อัลกอริทึมที่รู้จักกันดีที่สุดสำหรับการคำนวณระยะทางแก้ไข (aka Levenshtein) ระหว่างสองสายของความยาวใช้เวลาO ( ( n / log n ) 2 )เวลา:nO((n/logn)2)

William J. Masek, Mike Paterson: การคำนวณระยะทางแบบอัลกอรึทึมที่เร็วกว่า เจคอมพิวเตอร์ Syst วิทย์ 20 (1): 18-31 (1980)


4
ฉันคิดว่านี่เป็นอีกรูปแบบหนึ่งของอัลกอริทึม Four Russians
David Eppstein

7

ปรากฏเป็นขอบเขตที่ถูกต้องสำหรับปัญหาที่พิจารณาโดย Greg และ Paul Valiant (ไม่มีการเชื่อมต่อกับเทคนิคบิต):Θ(n/logn)

Gregory Valiant และ Paul Valiant พลังของการประมาณเชิงเส้น 2011 ในงานประชุมวิชาการ IEEE Symposium ประจำปี 52 ครั้งที่ 52 บนรากฐานของวิทยาศาสตร์คอมพิวเตอร์ FOCS 2011


7

นี่เป็นอีกตัวอย่างของขอบเขตที่แน่นหนาที่มีปัจจัยบันทึก (นี่คือทฤษฎีบท 6.17 จากความซับซ้อนของฟังก์ชันบูลีน: ความก้าวหน้าและขอบเขตโดย Stasys Jukna)

ขนาดของสูตร (เหนือฐานไบนารีเต็มหรือพื้นฐานของเดมอร์แกน) ของปัญหาความแตกต่างขององค์ประกอบคือโดยที่nคือจำนวนบิตในอินพุตΘ(n2/logn)n

เหตุผลที่ปัจจัยบันทึกปรากฏในส่วนคือการแสดงจำนวนเต็มระหว่าง 1 และโพลี( m )ต้องการn : = O ( m log m )บิตรวมเนื่องจากแต่ละจำนวนเต็มต้องใช้บิตO ( log m ) ดังนั้นขอบเขตบนที่ดูเป็นธรรมชาติในรูปของmเช่นΘ ( m 2 log m )กลายเป็นΘ ( n 2 / log n )เมื่อแสดงในรูปของmpoly(m)n:=O(mlogm)O(logm)mΘ(m2logm)Θ(n2/logn)โดยที่ nคือจำนวนบิตในอินพุตnn


2

การค้นหาปัจจัยสำคัญของ n โดยการแบ่งการทดลองเมื่อมีการระบุรายการของจำนวนเฉพาะ มีช่วงเวลาที่น้อยกว่า n ดังนั้นหากช่วงเวลาเหล่านี้จะให้กับคุณแล้วส่วนการพิจารณาคดีของ n โดยแต่ละของพวกเขาจะใช้เวลาθ(nθ(nlog(n))เวลา (สมมติว่าการแบ่งเป็นการดำเนินการเวลาคงที่)θ(nlog(n))


3
2n/lognn

-2

O(f(n))O(f(n)logf(n)) DTIME, due to the time hierarchy theorem. so this applies to a linear DTIME algorithm that exists, f(n)=n, that runs impossibly in O(nlogn) DTIME.


2
on a TM, DTIME(n/logn) is trivial as it doesn't allow the machine to read the whole input. also, the DTIME notation makes the big-oh notation unnecessary.
Sasho Nikolov

?? there is still theory for sublinear time algorithms...
vzn

3
sublinear algorithms make sense in oracle & random access models. DTIME is standardly defined w.r.t. multitape TM, and that's the definition used in the hierarchy theorem for DTIME.
Sasho Nikolov

1
No, @SashoNikolov, DTIME(n/logn) is not trivial. Compare "Are the first n/lgn bits of the input all zeros?" with "Do the first n/lgn bits of the input encode a satisfiable boolean formula?"
Jeffε

5
@JɛffE: You cannot test “Are the first n/lgn bits of the input all zeros?” in O(n/logn) time on a TM, since you do not know what n is without first reading the whole input, which takes time n. It is a standard fact that if f(n)<n, then DTIME(f(n)) contains only languages the membership in which can be determined from the first k bits of input for a constant k (and therefore are computable in constant time).
Emil Jeřábek supports Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.