คำถามติดแท็ก runtime-analysis

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

1
กำลังแรงเดรัจฉาน Delaunay triangulation อัลกอริธึมที่ซับซ้อน
ในหนังสือ"เรขาคณิตการคำนวณ: อัลกอริธึมและการประยุกต์ใช้"โดย Mark de Berg และคณะมีอัลกอริทึมแรงเดรัจฉานที่ง่ายมากสำหรับการคำนวณสามเหลี่ยมเดอลูเนย์ อัลกอริทึมใช้ความคิดของขอบผิดกฎหมาย - ขอบที่อาจไม่ปรากฏในสมการ Delaunay ที่ถูกต้องและต้องถูกแทนที่ด้วยขอบอื่น ๆ ในแต่ละขั้นตอนอัลกอริทึมจะค้นหาขอบที่ผิดกฎหมายเหล่านี้และทำการกระจัดที่ต้องการ (เรียกว่าการพลิกขอบ ) จนกระทั่งไม่มีขอบที่ผิดกฎหมาย อัลกอริทึมการบีบอัดทางกฎหมาย ( TTT ) อินพุต บางสมTTTของจุดที่ตั้งPเอาท์พุต สมการทางกฎหมายของPPPP PPP ในขณะที่ มีขอบที่ผิดกฎหมายp i p j doTTTpipjpipjp_ip_j \quadให้และP ฉันพีเจพีลิตรเป็นรูปสามเหลี่ยมสองรูปที่อยู่ติดกับหน้าฉันพีเจpipjpkpipjpkp_i p_j p_kpipjplpipjplp_i p_j p_lpipjpipjp_ip_j \quadลบจากTและเพิ่มp k p lแทน ผลตอบแทน Tpipjpipjp_ip_jTTTpkplpkplp_kp_l TTT ฉันได้ยินมาว่าอัลกอริทึมนี้ทำงานในเวลาในกรณีที่แย่ที่สุด; อย่างไรก็ตามมันไม่ชัดเจนสำหรับฉันว่าข้อความนี้ถูกต้องหรือไม่ ถ้าใช่จะพิสูจน์ได้อย่างไรว่าขอบเขตบนนี้O(n2)O(n2)O(n^2)

3
อัลกอริทึมของ Brzozowski สำหรับการลด DFA
อัลกอริทึมการลดขนาด DFA ของ Brzozowski สร้าง DFA ขั้นต่ำสำหรับ DFA GGGโดย: การกลับขอบทั้งหมดในGGGทำให้สถานะเริ่มต้นเป็นสถานะยอมรับและยอมรับสถานะเริ่มต้นเพื่อรับ NFA ยังไม่มีข้อความ'N′N'สำหรับภาษาย้อนกลับ ใช้การสร้าง powerset เพื่อรับG'G′G'สำหรับภาษาย้อนกลับ ย้อนกลับขอบ (และเริ่มต้นยอมรับสลับ) ในG'G′G'ที่จะได้รับ NFA ยังไม่มีข้อความNNสำหรับภาษาต้นฉบับและ GนาทีGminG_{\min} แน่นอนเนื่องจาก DFA บางตัวมี DFA ใหญ่แบบย้อนกลับแบบทวีคูณอัลกอริทึมนี้จะทำงานในเวลาเอ็กซ์โพเนนเชียลในกรณีที่เลวร้ายที่สุดในแง่ของขนาดของอินพุตดังนั้นให้ติดตามขนาดของ DFA ย้อนกลับ ถ้าคือขนาดของอินพุต DFA,คือขนาดของ DFA ที่น้อยที่สุดและที่มีขนาดของ DFA ย้อนกลับน้อยที่สุดดังนั้นเวลารันไทม์ของอัลกอริทึมของ Brzozowski ในแง่ของ ,และคืออะไร?ยังไม่มีข้อความยังไม่มีข้อความNnnnม.ม.mn เมตรยังไม่มีข้อความยังไม่มีข้อความNnnnม.ม.m โดยเฉพาะอย่างยิ่งภายใต้ความสัมพันธ์ระหว่างและอัลกอริทึมของ Brzozowski มีประสิทธิภาพเหนือกว่าอัลกอริทึมของ Hopcroft หรือ Moore หรือไม่มnnnม.ม.m ฉันเคยได้ยินว่าในตัวอย่างทั่วไปในทางปฏิบัติ / แอปพลิเคชันอัลกอริทึมของ Brzozowski มีประสิทธิภาพเหนือกว่าผู้อื่น …

4
มีอัลกอริทึมหรือโครงสร้างข้อมูลที่ต้องการค้นหาค่ามัธยฐานของชุดหรือไม่?
ฉันได้อ่านหนังสือเล่มนี้สำหรับอัลกอริธึมแบบสุ่ม ในหนังสือเล่มนี้โดยเฉพาะมีทั้งส่วนที่ทุ่มเทให้กับการหาค่ามัธยฐานของอาร์เรย์โดยใช้การเลือกแบบสุ่มซึ่งนำไปสู่อัลกอริทึมที่มีประสิทธิภาพมากขึ้น ตอนนี้ฉันอยากรู้ว่ามีการใช้งานจริงของอัลกอริทึมนี้ในโดเมนของวิทยาศาสตร์คอมพิวเตอร์นอกเหนือจากการปรับปรุงทางทฤษฎี มีอัลกอริธึมหรือโครงสร้างข้อมูลที่ต้องการหาค่ามัธยฐานของอาร์เรย์หรือไม่?

2
การวิเคราะห์เวลาอัลกอริทึม“ ขนาดอินพุต” กับ“ องค์ประกอบอินพุต”
ฉันยังสับสนอยู่บ้างกับคำว่า "ความยาวขาเข้า" และ "ขนาดอินพุต" เมื่อใช้ในการวิเคราะห์และอธิบายขอบเขตบนที่ไม่มีอาการสำหรับอัลกอริทึม ดูเหมือนว่าความยาวของอัลกอริทึมนั้นขึ้นอยู่กับชนิดของข้อมูลจำนวนมากและอัลกอริทึมที่คุณกำลังพูดถึง ผู้เขียนบางคนอ้างถึงความยาวอินพุตกับขนาดของอักขระที่ต้องใช้เพื่อแสดงอินพุตดังนั้น "abcde" หากใช้เป็นชุดอินพุตในอัลกอริทึมจะมี "ความยาวอินพุต" 6 ตัว หากแทนที่จะเป็นตัวอักษรเรามีจำนวน (เช่นจำนวนเต็ม) บางครั้งการแทนแบบไบนารี่จะใช้แทนตัวอักษรดังนั้น "ความยาวอินพุต" จะถูกคำนวณเป็น (เป็น L เป็นจำนวนสูงสุดในชุดอินพุต)ยังไม่มีข้อความ∗ l o g( L )N∗log(L)N*log(L) มีปัญหาอื่น ๆ ที่แม้ว่าชุดอินพุตเป็นตัวเลข แต่พวกเขาอธิบาย "ความยาวอินพุต" เป็น "ตัวแปรการตัดสินใจ" ดังนั้นสำหรับชุดอินพุตความยาว N ที่มีตัวเลขในช่วงความยาวอินพุตนั้นคือ เพียงแค่ N (ผลรวมย่อยเช่น) หรือยิ่งซับซ้อนจำนวนของค่าสถานที่ไบนารีที่ใช้ในการระบุปัญหา (สิ่งที่ฉันเชื่อว่าเป็นเพียงเช่นเดียวกับ ) N ∗ l o g ( L )0 - …

1
เหตุใดอัลกอริธึมการคูณเชิงเส้นเชิงเวลาของ Knuth จึงไม่“ นับ”
หน้าวิกิพีเดียในขั้นตอนวิธีการคูณกล่าวหนึ่งที่น่าสนใจโดยโดนัลด์ Knuth โดยพื้นฐานแล้วมันเกี่ยวข้องกับการรวมการคูณการแปลงฟูริเยร์กับตารางที่คำนวณล่วงหน้าของการคูณขนาดลอการิทึม มันทำงานในเวลาเชิงเส้น บทความทำหน้าที่เหมือนอัลกอริทึมนี้ แต่อย่างใดไม่นับเป็นอัลกอริทึมการคูณ "จริง" ที่สำคัญกว่านั้นก็ถือว่าเป็นคำถามเปิดว่าการคูณสามารถทำได้ในO(n lg n)เวลา! รายละเอียดของอัลกอริทึมนี้ตัดสิทธิ์จากการนับเป็นอัลกอริทึมการคูณ "จริง" หรือไม่ การเดาของฉันคือ: การคำนวณล่วงหน้าของตารางใช้เวลามากกว่าเชิงเส้น ในทางกลับกันก็สามารถทำได้ในn lg nเวลาเพื่อที่จะยังคงน่าประทับใจ การเข้าถึงแบบสุ่มไม่ได้รับอนุญาต แต่ทำไมอัลกอริธึมอื่น ๆ สามารถใช้สิ่งต่าง ๆ เช่นตารางแฮชและพอยน์เตอร์ได้ มันจะปรับขนาดผิดเมื่อคุณเพิ่มขนาดคำของเครื่องเช่นถ้าคุณมีเครื่อง 256 บิตที่ทำหน้าที่ 256 บิตในการเรียนการสอนเพียงครั้งเดียวดังนั้นจึงไม่มีทางชี้ไปที่อัลกอริทึมนี้จนกว่าคุณจะมีองค์ประกอบมากกว่า 2 ^ 256 ในทางกลับกันเรากังวลกับปัจจัยผกผัน - ackermann ในการค้นหาสหภาพ "มีอัลกอริทึมการคูณเวลาเชิงเส้นหรือไม่" คำถามนั้นเป็นความลับในแง่ของเครื่องจักรที่อ่อนแอกว่า แต่มีเพียงนัยที่

2
เปรียบเทียบระหว่างอัลกอริทึม Aho-Corasick และอัลกอริทึม Rabin-Karp
ฉันกำลังทำงานกับอัลกอริธึมการค้นหาสตริงที่สนับสนุนการค้นหาหลายรูปแบบ ผมพบว่าทั้งสองขั้นตอนวิธีการที่ดูเหมือนผู้สมัครที่แข็งแกร่งที่สุดในแง่ของเวลาการทำงานคือAho-Corasickและราบิน-คาร์พ อย่างไรก็ตามฉันไม่พบการเปรียบเทียบแบบครอบคลุมระหว่างอัลกอริธึมทั้งสอง อัลกอริทึมใดที่มีประสิทธิภาพมากกว่า นอกจากนี้อันไหนที่เหมาะกว่าสำหรับการคำนวณแบบขนานและการค้นหาหลายรูปแบบ? ในที่สุดใครจะใช้ทรัพยากรฮาร์ดแวร์น้อย? สำหรับอัลกอริทึม AC ระยะการค้นหาใช้เวลาในขณะที่เป็น RK อย่างไรก็ตามเวลาทำงานสำหรับ RK คือซึ่งทำให้คล้ายกับ AC ข้อสรุปเบื้องต้นของฉันคือ RK ดูดีกว่าเพราะไม่ต้องการหน่วยความจำมากเท่ากับ AC ถูกต้องหรือไม่O(n+m)O(n+m)O(n+m)O(nm)O(nm)O(nm)O(n+m)O(n+m)O(n+m)

2
ลดความซับซ้อนของ n multichoose k
ฉันมีอัลกอริทึมแบบเรียกซ้ำที่มีความซับซ้อนของเวลาเทียบเท่ากับการเลือกองค์ประกอบ k จาก n ด้วยการทำซ้ำและฉันสงสัยว่าฉันจะได้รับนิพจน์โอใหญ่ที่ง่ายขึ้นหรือไม่ ในกรณีของฉันอาจมากกว่าและพวกมันเติบโตอย่างอิสระkkknnn โดยเฉพาะฉันคาดหวังว่าจะมีการแสดงออกที่ชัดเจนบางอย่าง สิ่งที่ดีที่สุดที่ฉันพบได้ก็คือการประมาณดังนั้นฉันจึงสามารถใช้มันได้ แต่ฉันสงสัยว่าฉันจะได้อะไรที่ดีกว่าO ( n ! ) ≈ O ( ( n / 2 )n)O(n!)≈O((n/2)n)O(n!) \approx O((n/2)^n) O ( ( n + k - 1k) )=O(?)O((n+k-1k))=O(?)O\left({{n+k-1}\choose{k}}\right) = O(?)

2
การแฮชใช้การค้นหาต้นไม้แทนรายการ
ฉันกำลังดิ้นรนกับวัสดุการแฮ็กและการค้นหาแบบไบนารี และฉันอ่านว่าแทนที่จะใช้รายการสำหรับจัดเก็บรายการที่มีค่าแฮชเดียวกันมันเป็นไปได้ที่จะใช้แผนภูมิการค้นหาแบบไบนารี่ และฉันพยายามที่จะเข้าใจว่ากรณีที่เลวร้ายที่สุดและเวลาเฉลี่ยในการดำเนินการสำหรับกรณีใด insert, find และ delete มีคุณค่า กรณีเฉลี่ย พวกเขาปรับปรุงด้วยความเคารพในรายการ?

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

2
การคูณใน
ฉันกำลังดูที่นี่และฉันสังเกตเห็นว่า runtime ที่ดีที่สุดสำหรับการคูณจำนวนสองบิตคือO ( n ⋅ log n ⋅ 2 O ( log ∗ n )แต่ฉันสามารถสังเกตเห็นอัลกอริธึมที่ทำงานในO ( n ⋅ )ได้อย่างง่ายดายเข้าสู่ระบบn )nnnO ( n ⋅ บันทึกn ⋅ 2O ( บันทึก* * * *n )O(n⋅log⁡n⋅2O(log∗⁡n)O(n\cdot \log n \cdot 2^{O(\log^* n)}O ( n ⋅ บันทึกn )O(n⋅log⁡n)O(n\cdot \log n) ท้ายที่สุดเรารู้วิธีคูณสองชื่อพหุนามจากดีกรีในรันไทม์O ( n log n …

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

1
ความซับซ้อนของอัลกอริทึมที่ไร้เดียงสาในการค้นหาสตริงย่อย Fibonacci ที่ยาวที่สุด
เมื่อได้รับสองสัญลักษณ์และbให้นิยามสตริงk -th Fibonacci ดังนี้aa\text{a}bb\text{b}kkk F(k)=⎧⎩⎨baF(k−1)⋆F(k−2)if k=0if k=1elseF(k)={bif k=0aif k=1F(k−1)⋆F(k−2)else F(k) = \begin{cases} \text{b} &\mbox{if } k = 0 \\ \text{a} &\mbox{if } k = 1 \\ F(k-1) \star F(k-2) &\mbox{else} \end{cases} ด้วย denoting string concatenation⋆⋆\star ดังนั้นเราจะมี: F(0)=bF(0)=bF(0) = \text{b} F(1)=aF(1)=aF(1) = \text{a} F(2)=F(1)⋆F(0)=abF(2)=F(1)⋆F(0)=abF(2) = F(1) \star F(0) = \text{ab} F(3)=F(2)⋆F(1)=abaF(3)=F(2)⋆F(1)=abaF(3) …

1
ฟังก์ชั่นที่มีศักยภาพไบนารีกองสกัดสูงสุด O (1)
ฉันต้องการความช่วยเหลือในการหาฟังก์ชั่นที่มีศักยภาพสำหรับ heap สูงสุดเพื่อให้แยก max เสร็จสมบูรณ์ในเวลาตัดจำหน่าย ฉันควรเพิ่มว่าฉันไม่มีความเข้าใจในวิธีการที่เป็นไปได้O( 1 )O(1)O(1) ฉันรู้ว่าฟังก์ชั่นการแทรกควร "จ่าย" มากขึ้นเพื่อลดค่าใช้จ่ายในการสกัดและสิ่งนี้จะต้องเกี่ยวกับความสูงของกอง (ถ้าให้ความสูงของกองควร ส่วนแทรกเป็น2 บันทึก( n )หรือ∑ n k = 1 2 บันทึก( k ) )⌊ บันทึก( n ) ⌋⌊เข้าสู่ระบบ⁡(n)⌋ \lfloor \log(n) \rfloor 2 บันทึก( n )2เข้าสู่ระบบ⁡(n)2\log(n)Σnk = 12 บันทึก( k )Σk=1n2เข้าสู่ระบบ⁡(k) \sum_{k=1}^n 2\log(k)

3
ปัญหาฮีป d-ary จาก CLRS
ฉันสับสนในขณะที่แก้ปัญหาต่อไปนี้ (คำถาม 1-3) คำถาม dกอง -ary เป็นเหมือนกองไบนารี แต่ (ยกเว้นที่เป็นไปได้อย่างใดอย่างหนึ่ง) โหนดที่ไม่ใช่ใบมีdเด็กแทนเด็ก 2 คุณจะเป็นตัวแทนของกองd -ary ในอาร์เรย์ได้อย่างไร? ความสูงของคืออะไรdกอง -ary ของnองค์ประกอบในแง่ของnและd ? ให้การใช้งาน EXTRACT-MAX อย่างมีประสิทธิภาพในd -ary max-heap วิเคราะห์เวลาในการทำงานในแง่ของdและn นำ INSERT ไปใช้อย่างมีประสิทธิภาพด้วยd -ary max-heap วิเคราะห์เวลาในการทำงานในแง่ของdและn ให้การนำไปใช้อย่างมีประสิทธิภาพของ INCREASE-KEY ( A , i , k ) ซึ่งทำเครื่องหมายข้อผิดพลาดหากk <A [i] = k จากนั้นอัพเดตโครงสร้างd -ary matrix heap อย่างเหมาะสม วิเคราะห์เวลาในการทำงานในแง่ของdและn …

1
การพิสูจน์ความซับซ้อนของเวลาสำหรับการนำทรีเซ็กเมนต์ของปัญหาผลรวมระยะไกล
ผมเข้าใจว่าต้นไม้ส่วนที่สามารถใช้ในการหาผลรวมของอาร์เรย์ย่อยของ และที่สามารถทำในนี้เวลาตามกวดวิชาที่นี่AAAO (บันทึกn )O(log⁡n)\mathcal{O}(\log n) แต่ฉันไม่สามารถพิสูจน์ได้ว่าเวลาสอบถามย่อมเป็นn) ลิงค์นี้ (และอื่น ๆ อีกมากมาย) บอกว่าเราสามารถพิสูจน์ได้ว่าในแต่ละระดับจำนวนสูงสุดของโหนดประมวลผลเป็นและอื่น ๆn)O (บันทึกn )O(เข้าสู่ระบบ⁡n)\mathcal{O}(\log n)444O (4บันทึกn ) = O ( บันทึกn )O(4เข้าสู่ระบบ⁡n)=O(เข้าสู่ระบบ⁡n)\mathcal{O}(4 \log n) = \mathcal{O}(\log n) แต่เราจะพิสูจน์เรื่องนี้ได้อย่างไรโดยความขัดแย้ง? และถ้าเป็นเช่นนั้นถ้าเราจะใช้เซกเมนต์ต้นไม้เพื่อหาผลรวมของอาร์เรย์มิติที่สูงขึ้นการพิสูจน์จะขยายออกไปได้อย่างไร? ตัวอย่างเช่นฉันสามารถคิดถึงการหาผลรวมย่อยของเมทริกซ์ย่อยโดยแบ่งเมทริกซ์ดั้งเดิมออกเป็น 4 ส่วน (คล้ายกับช่วงเวลาแบ่งครึ่งในอาร์เรย์เชิงเส้น) สร้างต้นไม้เซ็กเมนต์ Quadrant แต่หลักฐานพิสูจน์ฉัน

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