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

5
อัลกอริทึมการแบ่งและพิชิต - ทำไมไม่แยกส่วนมากกว่าสอง
ในขั้นตอนวิธีแบ่งแยกและเอาชนะเช่น quicksort และ mergesort ใส่มักจะ (อย่างน้อยในตำราเบื้องต้น) แยกเป็นสองและทั้งสองมีขนาดเล็กชุดข้อมูลจะได้รับไพ่แล้วด้วยซ้ำ มันสมเหตุสมผลสำหรับฉันว่าสิ่งนี้ทำให้การแก้ไขปัญหาได้เร็วขึ้นหากทั้งสองส่วนใช้เวลาน้อยกว่าครึ่งในการจัดการกับชุดข้อมูลทั้งหมด แต่ทำไมไม่แยกชุดข้อมูลออกเป็นสามส่วน? สี่? n ? ฉันเดาว่างานของการแบ่งข้อมูลในชุดย่อยหลายชุดทำให้ไม่คุ้มค่า แต่ฉันขาดสัญชาตญาณเพื่อดูว่าควรหยุดที่สองชุดย่อย ฉันยังได้เห็นการอ้างอิงจำนวนมากถึง QuickSort 3 ทาง เมื่อไหร่จะเร็วกว่านี้? สิ่งที่ใช้ในการปฏิบัติ?

4
เมื่อพูดฉันจะพูดได้อย่างไรว่าลำดับความซับซ้อนของเวลาของอัลกอริทึมคือ O (N log N)
คำใดที่ฉันสามารถใช้เพื่ออธิบายบางสิ่งบางอย่างที่มีความซับซ้อน O (N log N) ตัวอย่างเช่น: O (1): คงที่ O (บันทึก N): ลอการิทึม O (N): เป็นเส้นตรง O (N log N): ?????? O (N 2 ): กำลังสอง O (N 3 ): ลูกบาศก์

5
อัลกอริทึม: ฉันจะรวม O (n) และ O (nlog (n)) เข้าด้วยกันได้อย่างไร
ฉันมีอัลกอริทึมติดตามซึ่งพบการซ้ำและลบออก: public static int numDuplicatesB(int[] arr) { Sort.mergesort(arr); int numDups = 0; for (int i = 1; i < arr.length; i++) { if (arr[i] == arr[i - 1]) { numDups++; } } return numDups; } ฉันกำลังพยายามค้นหาเวลาที่ซับซ้อนที่สุดในกรณีนี้ ฉันรู้ว่าเป็น mergesort nlog(n)และในของฉันสำหรับห่วงฉัน iterating nกว่าชุดข้อมูลทั้งหมดเพื่อที่จะนับเป็น ฉันไม่แน่ใจว่าจะทำอย่างไรกับตัวเลขเหล่านี้ ฉันควรรวมพวกเขาเข้าด้วยกันไหม? ถ้าฉันจะทำอย่างนั้นฉันจะทำอย่างไร

8
ทำไมการค้นหาแบบไบนารี่ซึ่งต้องการข้อมูลที่เรียงลำดับถือว่าดีกว่าการค้นหาแบบเชิงเส้น
ฉันเคยได้ยินเสมอว่าการค้นหาเชิงเส้นเป็นวิธีที่ไร้เดียงสาและการค้นหาแบบไบนารี่นั้นดีกว่าในด้านประสิทธิภาพเนื่องจากความซับซ้อนเชิงซีมโทติคที่ดีขึ้น แต่ฉันไม่เคยเข้าใจว่าทำไมมันดีกว่าการค้นหาเชิงเส้นเมื่อจำเป็นต้องมีการเรียงลำดับก่อนการค้นหาแบบไบนารี ค้นหาเชิงเส้นและการค้นหาไบนารีO(n) O(log n)นั่นน่าจะเป็นพื้นฐานของการบอกว่าการค้นหาแบบไบนารี่นั้นดีกว่า แต่การค้นหาแบบไบนารี่จำเป็นต้องใช้การเรียงลำดับซึ่งเป็นO(n log n)วิธีที่ดีที่สุด ดังนั้นการค้นหาแบบไบนารี่จึงไม่ควรเร็วขึ้นตามที่ต้องการ ฉันกำลังอ่าน CLRS ซึ่งผู้เขียนบอกเป็นนัยว่าในการเรียงลำดับการแทรกแทนที่จะใช้วิธีการค้นหาเชิงเส้นแบบไร้เดียงสาจะเป็นการดีกว่าถ้าใช้การค้นหาแบบไบนารีในการค้นหาสถานที่ที่จะต้องใส่รายการ ในกรณีนี้สิ่งนี้ดูเหมือนว่าจะเป็นธรรมในการวนซ้ำแต่ละครั้งจะมีรายการเรียงลำดับซึ่งสามารถใช้การค้นหาแบบไบนารีได้ แต่ในกรณีทั่วไปที่ไม่มีการรับประกันเกี่ยวกับชุดข้อมูลที่เราต้องการค้นหาไม่ได้ใช้การค้นหาแบบไบนารีที่แย่กว่าการค้นหาแบบเชิงเส้นเนื่องจากความต้องการในการเรียงลำดับ? มีการพิจารณาในทางปฏิบัติใดบ้างที่ฉันมองเห็นซึ่งทำให้การค้นหาแบบไบนารีดีกว่าการค้นหาแบบเชิงเส้น หรือการค้นหาแบบไบนารี่ถือว่าดีกว่าการค้นหาแบบเชิงเส้นโดยไม่คำนึงถึงเวลาการคำนวณที่จำเป็นสำหรับการเรียงลำดับ?

2
พยายามเข้าใจ 2N lnN เปรียบเทียบกับ quicksort
ฉันกำลังทำการวิเคราะห์ quicksort ในหนังสือ Algorithms ของ Sedgewick เขาสร้างความสัมพันธ์ที่เกิดซ้ำต่อไปนี้สำหรับจำนวนการเปรียบเทียบใน quicksort ขณะที่เรียงลำดับอาร์เรย์ของรายการ N ที่แตกต่างกัน ฉันมีช่วงเวลาที่ยากลำบากในการทำความเข้าใจสิ่งนี้ ... ฉันรู้ว่าต้องใช้ความน่าจะเป็น 1 / N สำหรับองค์ประกอบใด ๆ ที่จะกลายเป็นเดือยและถ้าหาก k กลายเป็นเดือยย่อยย่อยด้านซ้ายจะมีองค์ประกอบ k-1 และย่อยขวา อาร์เรย์จะมีองค์ประกอบ Nk 1. ค่าใช้จ่ายในการแบ่งพาร์ติชันกลายเป็น N + 1 อย่างไร ต้องใช้ N + 1 เปรียบเทียบกับการแบ่งพาร์ติชันหรือไม่ 2.Sedgewick กล่าวว่าสำหรับแต่ละค่าของ k ถ้าคุณบวกมันความน่าจะเป็นที่องค์ประกอบแบ่งเป็น k + ค่าใช้จ่ายสำหรับสองอาร์เรย์ย่อยที่คุณได้รับสมการข้างต้น ใครสามารถอธิบายสิ่งนี้เพื่อให้ผู้ที่มีความรู้ทางคณิตศาสตร์น้อยลง (ฉัน) สามารถเข้าใจได้? คุณจะหาคำที่สองในสมการได้อย่างไร คำนั้นหมายถึงอะไรกันแน่?

7
สัญกรณ์บิ๊กโอ้ไม่ได้พูดถึงค่าคงที่
ฉันเป็นโปรแกรมเมอร์และเพิ่งเริ่มอ่านอัลกอริทึม ฉันไม่มั่นใจอย่างสมบูรณ์กับสัญลักษณ์คือ Bog Oh, Big Omega และ Big Theta เหตุผลก็คือโดยนิยามของบิ๊กโอ้มันระบุว่าควรมีฟังก์ชั่น g (x) เพื่อให้มันมากกว่าหรือเท่ากับ f (x) เสมอ หรือ f (x) <= cn สำหรับค่าทั้งหมดของ n> n0 ทำไมเราไม่พูดถึงค่าคงที่ในคำนิยาม? ตัวอย่างเช่นสมมุติว่าฟังก์ชัน 6n + 4 เราแสดงว่าเป็น O (n) แต่มันไม่เป็นความจริงที่คำจำกัดความนั้นดีสำหรับค่าคงที่ทั้งหมด สิ่งนี้จะถือว่าดีเมื่อ c> = 10 และ n> = 1 สำหรับค่าที่น้อยกว่าของ c มากกว่า 6 ค่าของ n0 จะเพิ่มขึ้น ดังนั้นทำไมเราไม่พูดถึงค่าคงที่เป็นส่วนหนึ่งของคำนิยาม?

2
ความซับซ้อนของเวลา 2 ^ sqrt (n)
ฉันกำลังแก้ไขคำถามอัลกอริทึมและการวิเคราะห์ของฉันคือมันจะทำงานบน O (2 ^ sqrt (n)) มันใหญ่แค่ไหน? มันเท่ากับ O (2 ^ n) หรือไม่? มันยังเป็นเวลาที่ไม่ใช่พหุนามหรือไม่?

1
เป็นไปได้ที่การปรับปรุง Damerau-Levenshtein
ฉันเพิ่งใช้อัลกอริทึมระยะทาง Damerau-Levenshtein จาก pseudocode บน Wikipedia ฉันไม่สามารถหาคำอธิบายใด ๆ ว่าวิธีการทำงานและชื่อตัวแปรใช้ pseudocode uninformative สมบูรณ์เช่นDA, DB, i1และj1ที่เหลือฉันเกาหัวของฉัน นี่คือการใช้งานของฉันใน Python: https://gist.github.com/badocelot/5327337 การติดตั้ง Python ช่วยให้ฉันเดินผ่านโปรแกรมและค้นหาสิ่งที่เกิดขึ้นเปลี่ยนชื่อตัวแปรเป็นชื่อที่มีประโยชน์มากขึ้น ฉันคุ้นเคยกับแนวทางของ Wagner-Fischer มากพอที่จะคำนวณระยะทางของ Levenshtein ที่ฉันมีกรอบอ้างอิง ด้วยความเสี่ยงที่จะมีความยาวมากเกินไปนี่เป็นวิธีที่ฉันเข้าใจ Damerau-Levenshtein: ตัวแปรลึกลับ: DA( last_rowในรหัสของฉัน) เป็นแผนที่ชนิดหนึ่งที่ถือแถวสุดท้ายที่แต่ละองค์ประกอบถูกเห็น ในรหัสของฉันมันเป็นพจนานุกรม Python ที่แท้จริง DB( last_match_col) เก็บคอลัมน์สุดท้ายที่ตัวอักษรbตรงกับตัวอักษรในaแถวปัจจุบัน i1( last_matching_row) คือหมายเลขแถวจากDAสำหรับตัวอักษรปัจจุบันในb j1เป็นเพียงสำเนาของDB/ last_match_colก่อนที่จะอัปเดต ในรหัสของฉันฉันเพิ่งย้ายที่last_match_colมีการปรับปรุงและกำจัดตัวแปรนี้ ค่าขนย้าย: H[i1][j1] + (i-i1-1) + 1 + …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.