อัลกอริทึมที่กำหนดได้ง่ายและปฏิบัติเวลาทำงานที่ซับซ้อน


18

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

เรามีตัวอย่างที่โดดเด่นที่กฎของหัวแม่มือนี้ล้มเหลวหรือไม่?

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

เรามีตัวอย่างของอัลกอริธึมที่กำหนดได้ง่ายและใช้งานได้จริงซึ่งง่ายต่อการติดตั้ง แต่มีการแสดงออกที่ซับซ้อนมากเหมือนกับเวลาที่ใช้ในการแสดงผลเชิงเส้นประสาทที่เลวร้ายที่สุด?

โปรดทราบคำหลัก "กำหนด" และ "กรณีที่เลวร้ายที่สุด"; การวิเคราะห์อัลกอริทึมแบบสุ่มง่าย ๆนำไปสู่การแสดงออกที่ซับซ้อนได้อย่างง่ายดาย

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


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


2
อัลกอริทึมการทดสอบแบบดั้งเดิมของ AKS มีคุณสมบัติเป็นคำตอบหรือไม่? ฉันลังเลใจเพราะ "ลำบาก" ของเวลาการทำงานของมันคือในความรู้สึกบางอย่างที่เป็นผลมาจาก pseudorandomness ของการกระจายของจำนวนเฉพาะที่ ...
Arnab

ความรู้สึกของฉันคือกรณีที่เลวร้ายที่สุดคือในกรณีส่วนใหญ่สิ่งที่ทำให้ "วิ่งข้ามทุกอย่าง" และทุกอย่างเป็นสิ่งที่เราวัดรันไทม์ดังนั้นโดยธรรมชาติอัลกอริธึมที่ง่ายมี WC-runtimes ง่าย Runtimes ที่ซับซ้อนเกิดขึ้นถ้าเราพยายามที่จะโกนหนวดนิดหน่อยด้วยเคล็ดลับ แต่คำถามของคุณน่าสนใจ แน่นอนฉันอยากรู้ว่าเห็นความรู้สึกของฉันถูกต้อง
Raphael

@arnab: ขอบคุณ AKS เป็นความคิดที่ดี แต่ฉันไม่แน่ใจว่าเราจะเรียกมันว่า "จริง" ได้ไหม?
Jukka Suomela

รูปแบบการส่งข้อความเช่นการเผยแพร่การสำรวจการเผยแพร่ข้อ จำกัด หรือลำดับ TRW นับเป็น "อัลกอริทึม" หรือไม่ ใช้งานง่ายรันไทม์ยากต่อการคาดเดา
Yaroslav Bulatov

โอ๊ะฉันชอบวิธีการแบบโพลลาร์ของพอลลาร์ดง่ายและใช้งานได้จริงและการวิเคราะห์นั้นยากมาก แต่การสุ่มอัลกอริธึมทำให้มันไม่มีเงื่อนไขเป็นคำตอบสำหรับโพสต์ ...
Hsien-Chih Chang 張顯之

คำตอบ:


20

ตัวอย่างที่ดีที่สุดที่ฉันคิดได้คืออัลกอริทึม (อธิบายไว้ด้านล่าง) เพื่อคำนวณระดับในการจัดเรียงของเส้นในระนาบนั่นคือเส้นรูปหลายเหลี่ยมที่เกิดขึ้นจากจุดที่มีเส้นตรงในแนวตั้ง นี่ไม่ใช่อัลกอริทึมที่มีประสิทธิภาพที่สุดที่ทราบสำหรับปัญหา มีอัลกอริธึมที่มีประสิทธิภาพมากกว่าพร้อมความซับซ้อนที่ง่ายกว่า แต่ฉันเชื่อว่านี่เป็นวิธีที่ใช้งานได้ดีกว่าส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) การวิเคราะห์อาจไม่แน่นเพราะใช้ความซับซ้อนของ level ซึ่งเป็นปัญหาเปิดที่มีชื่อเสียง (ฉันคิดว่าคำอื่น ๆ ทั้งหมดในการวิเคราะห์แน่น) แม้กระนั้นฉันสงสัยว่าการปรับปรุงขอบเขตสำหรับ level จะทำให้เวลาการทำงานง่ายขึ้นมาก ฉันจะถือว่าn k k k k = n / 2 nknkkkk=n/2เพื่อเขียนความซับซ้อนเป็นฟังก์ชันของเพียงอย่างเดียวn

อัลกอริทึมนั้นขึ้นอยู่กับกระบวนทัศน์การกวาดล้างเส้นและใช้สองการแข่งขันจลน์แบบจลน์เป็นลำดับความสำคัญจลน์ การแทรกและการลบจะดำเนินการเมื่อสายไปด้านบนหรือด้านล่างระดับย้ายบรรทัดจากการแข่งขันจลน์หนึ่งไปยังอีก ดังนั้นจึงมีการแทรกและลบ (ใช้การผูกของ Dey สำหรับความซับซ้อนระดับ) แต่ละเหตุการณ์ถูกประมวลผลในเวลาและมีเหตุการณ์ (มาจาก ความซับซ้อนของซองจดหมายด้านบนของการจัดเรียงของส่วนของบรรทัดในขณะที่มาจากความสูงของk O ( n 4 / 3 ) k O ( บันทึกn ) O ( n 4 / 3 α ( n ) เข้าสู่ระบบn /บันทึกบันทึกn ) α ( n ) เข้าสู่ระบบn /บันทึกบันทึกn ( บันทึกn )(logn)kO(n4/3)kO(logn)O(n4/3α(n)logn/loglogn)α(n)logn/loglogn(logn)ต้นไม้ต้น) เวลาทำงานทั้งหมดคือ

O(n4/3α(n)log2n/loglogn).

โปรดตรวจสอบต้นฉบับของ Timothy Chan http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gzสำหรับรายละเอียดเพิ่มเติมและข้อมูลอ้างอิง ปัจจัยที่สามารถถอดออกได้โดยใช้ไบนารี (Intead ของ -ary) การแข่งขันการเคลื่อนไหว แต่จริง ๆ แล้วมันเพิ่มความเร็วในคิวลำดับความสำคัญเกี่ยวกับการเคลื่อนไหวในการทดสอบที่ผมดำเนินการ ความซับซ้อนน่าจะเลวร้ายลงเล็กน้อยและแย่ลง (ในขณะที่อัลกอริทึมจะยังคงใช้งานได้จริง) หากมีการใช้ฮีปแบบ kinetic แทนการแข่งขันแบบ kinetic (aภายในสแควร์รูทควรปรากฏขึ้น)( log n ) บันทึก1/loglogn(logn)log


ตัวอย่างที่ยอดเยี่ยมขอบคุณ! นี่ไม่ใช่เรื่องง่ายที่จะเอาชนะ :)
Jukka Suomela

1
ขั้นตอนวิธีการนี้จะช้าในทางปฏิบัติกว่าขั้นตอนวิธีการสุ่มซึ่งจะสวยง่ายต่อการใช้ (เป็นคนที่ดำเนินการอย่างใดอย่างหนึ่งของขั้นตอนวิธีเหล่านี้ (ดูกระดาษของฉัน "การเดินในการจัดเรียงภาพถ่ายเป็น").
Sariel Har-Peled

ฉันยอมรับคำตอบนี้เนื่องจากมันใกล้เคียงกับที่ฉันคิดไว้มากที่สุด แต่ถ้าใครมีความคิดใหม่ ๆ ฉันก็ดีใจที่ได้ยิน!
Jukka Suomela

24

การดำเนินการโครงสร้างข้อมูลยูเนี่ยนหาดูเหมือนจะตรงตามเกณฑ์ของคุณ:

http://en.wikipedia.org/wiki/Disjoint-set_data_structure


2
ที่จริงฉันโพสต์คำตอบเดียวกัน แต่ลบออกหลังจากที่ฉันสังเกตเห็นว่าคุณเอาชนะฉันมัน :) อัลกอริธึมที่เรียบง่ายและสง่างามที่ผู้ที่ไม่ใช่นักทฤษฎีอาจค้นพบได้ แต่ Ackermann ตัดจำหน่ายความซับซ้อน
Warren Schudy

ทีนี้เวลาไม่ได้ดูว่า "ซับซ้อน" ถ้าคุณเปรียบเทียบกับในคำตอบของ Guilherme :)O ( n 4 / 3 α ( n ) เข้าสู่ระบบ2 n /บันทึกบันทึกn )O(α(n))O(n4/3α(n)log2n/loglogn)
Jukka Suomela

อัตราส่วนของความยาวอัลกอริทึมต่อความซับซ้อนในการพิสูจน์หายูเนี่ยนน่าจะไม่สามารถเอาชนะได้ - การดำเนินการทั้งสามนั้นเป็นอะไร
Neel Krishnaswami

1
ฉันไม่คิดว่าเป็นคำถามที่เกี่ยวกับขั้นตอนวิธีการที่ง่ายและปฏิบัติด้วยความซับซ้อนการวิเคราะห์ ฉันคิดว่าคำถามนั้นเกี่ยวกับอัลกอริทึมที่ง่ายและใช้งานได้จริงด้วยเวลาการทำงานที่ซับซ้อนนั่นคือการแสดงออกที่แท้จริงที่ได้จากขอบเขตบน
Guilherme D. da Fonseca

6

อัลกอริทึม Simplex ใช้งานง่ายและใช้งานได้อย่างยอดเยี่ยมในทางปฏิบัติ แต่เป็นระเบียบในการวิเคราะห์ทางทฤษฎี


ใช่มันยากที่จะวิเคราะห์ แต่มีการวิเคราะห์ที่สรุปว่าเวลาการทำงานของ Simplex ถูก จำกัด ด้วยฟังก์ชันที่ซับซ้อนของหรือไม่? n
Jukka Suomela

จริงๆแล้วซิมเพล็กเป็นที่รู้จักกันว่าใช้เวลาชี้แจงในกรณีที่เลวร้ายที่สุดผ่านการก่อสร้าง Klee-Minty ฉันไม่คิดว่าเป็นตัวอย่างของสิ่งที่ Jukka ถามเกี่ยวกับ
Suresh Venkat

1
บางทีฉันควรจะพูดวิธี simplex มากกว่า algorithm Simplex ลูกบาศก์ Klee-Minty และความแปรผันของมันทำงานได้กับกฎการหมุนวนของวานิลลา แต่ตัวอย่างเช่นกฎการหมุนรอบด้านแบบสุ่มนั้นมีขอบเขตแบบบ้าบิ่นและล่างสุด (ล่าสุด) Gil Kalai มีบล็อกที่ดีในผลลัพธ์ล่าสุด gilkalai.wordpress.com/2010/11/09/…
Mohit Singh

จุดดี Mohit ฉันก็สับสนเหมือนกัน
Suresh Venkat

2

ฉันไม่แน่ใจว่าคุณคิดว่า "ใช้งานได้จริง" แต่เป็นปัญหาแบบเปิดที่มีชื่อเสียง Paul Erdos กล่าวเกี่ยวกับการคาดคะเนของ Collatz:“ คณิตศาสตร์ยังไม่พร้อมสำหรับปัญหาดังกล่าว”

x=1


แล้วอัลกอริทึมนี้แก้ปัญหาอะไรได้บ้าง ... ?
Jukka Suomela

มันแนะนำให้มองหาเทคนิคการวิเคราะห์แบบรันไทม์ใหม่
Mohammad Al-Turkistany

2
จากนั้นคุณสามารถพูดได้ว่าการค้นหาสัตว์เดรัจฉานเพื่อพิสูจน์การคาดคะเนของโคลลาตซ์ยังเป็นแรงจูงใจให้กับ ในทั้งสองกรณีอัลกอริทึมเป็นเพียงการสำรวจขุด การคาดคะเนของโคลลาตซ์นั้นสนุก แต่ฉันไม่คิดว่านี่เป็นตัวอย่างที่น่าสนใจของ "อัลกอริทึม"
Niel de Beaudrap

2

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

http://en.wikipedia.org/wiki/Pancake_sorting

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

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