คำถามติดแท็ก sorting

ปัญหาอัลกอริทึมของการสั่งซื้อชุดองค์ประกอบที่เกี่ยวกับความสัมพันธ์ในการสั่งซื้อบางส่วน

5
ความถี่ของคำที่มีการสั่งซื้อในความซับซ้อน O (n)
ในระหว่างการสัมภาษณ์ตำแหน่งนักพัฒนา Java ฉันถูกถามต่อไปนี้: เขียนฟังก์ชั่นที่ใช้สองพารามิเตอร์: String แสดงเอกสารข้อความและ จำนวนเต็มซึ่งระบุจำนวนรายการที่จะส่งคืน ใช้ฟังก์ชั่นเพื่อส่งคืนรายการ Strings เรียงลำดับตามความถี่ของคำซึ่งเป็นคำที่เกิดขึ้นบ่อยที่สุดก่อน โซลูชันของคุณควรทำงานในเวลาโดยที่คือจำนวนอักขระในเอกสารO(n)O(n)O(n)nnn ต่อไปนี้เป็นสิ่งที่ฉันตอบ (ใน pseudocode) ไม่ใช่แต่ค่อนข้างเวลาเนื่องจากการเรียงลำดับ ฉันไม่สามารถคิดออกว่าจะทำมันเวลา O(n)O(n)O(n)O(nlogn)O(nเข้าสู่ระบบ⁡n)O(n \log n)O(n)O(n)O(n) wordFrequencyMap = new HashMap<String, Integer>(); words = inputString.split(' '); for (String word : words) { count = wordFrequencyMap.get(word); count = (count == null) ? 1 : ++count; wordFrequencyMap.put(word, count); } return …

2
ชื่อของปัญหาการเรียงลำดับใหม่ / การเรียงลำดับ?
คุณจะได้รับอาร์เรย์ของความยาวnแต่ละองค์ประกอบของอาเรย์เป็นของหนึ่งในคลาสคุณควรจะจัดเรียงอาร์เรย์ใหม่โดยใช้จำนวนการสลับขั้นต่ำเพื่อให้องค์ประกอบทั้งหมดจากคลาสเดียวกันถูกจัดกลุ่มเข้าด้วยกันเสมอ ตัวอย่างเช่น: ยังมีข้อตกลงที่ใช้ได้อีกสามข้อที่เหลืออยู่nnnKKK[2,1,3,3,2,2]⟶[2,2,2,1,3,3], or[2,1,3,3,2,2]⟶[1,2,2,2,3,3], or[2,1,3,3,2,2]⟶[3,3,2,2,2,1].[2,1,3,3,2,2]⟶[2,2,2,1,3,3], or[2,1,3,3,2,2]⟶[1,2,2,2,3,3], or[2,1,3,3,2,2]⟶[3,3,2,2,2,1]. \begin{align*} &[2, 1, 3, 3, 2, 2] \longrightarrow [2, 2, 2, 1, 3, 3], \text{ or} \\ &[2, 1, 3, 3, 2, 2] \longrightarrow [1, 2, 2, 2, 3, 3], \text{ or} \\ &[2, 1, 3, 3, 2, 2] \longrightarrow [3, 3, 2, …

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

1
เหตุใด introsort จึงใช้ heapsort แทนที่จะรวมกัน
เป็นส่วนหนึ่งของการบ้านที่ครอบคลุมการใช้งานIntrosortฉันถูกถามว่าทำไมใช้ heapsort มากกว่าการรวม (หรืออื่น ๆO ( n บันทึก( n ) )O(nเข้าสู่ระบบ⁡(n))O(n\log(n)) อัลกอริทึมสำหรับเรื่องนั้น) Introsort เป็นอัลกอริธึมการเรียงลำดับแบบไฮบริดที่ให้ทั้งประสิทธิภาพเฉลี่ยที่รวดเร็วและ (asymptotically) ประสิทธิภาพที่ดีที่สุดสำหรับกรณีที่เลวร้ายที่สุด มันเริ่มต้นด้วย quicksort และสลับไปที่ heapsort เมื่อความลึกของการเรียกซ้ำเกินกว่าระดับตาม (ลอการิทึมของ) จำนวนองค์ประกอบที่เรียงลำดับ ( Wikipedia , ดึงข้อมูล 2014 - May-06) เหตุผลเดียวที่ฉันคิดได้ก็คือฮีปพอร์ตคือ "ในที่" ... แต่ฉันไม่เข้าใจจริงๆว่าทำไมเรื่องนี้ถึงมีความสำคัญ

1
การวัดความผิดปกติแบบใดที่จะใช้เมื่อวิเคราะห์ Quicksort
ฉันพยายามที่จะเข้าใจว่าเพราะเหตุใด quicksort โดยใช้พาร์ติชัน Lomuto และเดือยที่ตายตัวกำลังทำงานอย่างผิดปกติ ฉันคิดว่าถึงแม้ว่าอินพุตจะถูกสร้างแบบสุ่ม แต่ก็อาจมีลำดับต่อเนื่องกันมากมาย แต่ฉันไม่แน่ใจว่าจะวัดระดับความผิดปกติในลำดับอย่างไร ฉันคิดถึงการใช้จำนวนผู้รุกราน แต่ฉันเห็นจากคำถามอื่นฉันถามว่านั่นไม่ใช่วิธีที่ดีในกรณีนี้ เหตุผลที่ฉันสงสัยว่าลำดับแบบสุ่มของฉันมี "คำสั่งซื้อ" มากมายสำหรับพวกเขานั่นก็คือการใช้การสุ่ม pivot ช่วยแก้ปัญหาประสิทธิภาพการทำงาน แต่ในทางทฤษฎีแล้วก็ไม่ควรมีปัญหาเรื่องประสิทธิภาพใด ๆ กับลำดับการป้อนข้อมูลแบบ "สุ่ม" ที่ควรจะเป็น

2
มีอัลกอริทึม "การเรียงลำดับ" ซึ่งส่งกลับค่าการสุ่มเมื่อใช้ตัวเปรียบเทียบแบบพลิกเหรียญหรือไม่?
แรงบันดาลใจจากคำถามนี้ที่ผู้ถามต้องการทราบว่าเวลาทำงานเปลี่ยนไปเมื่อตัวเปรียบเทียบที่ใช้ในอัลกอริธึมการค้นหามาตรฐานถูกแทนที่ด้วยการพลิกเหรียญอย่างยุติธรรมและความล้มเหลวที่โดดเด่นของ Microsoft ในการเขียนเครื่องกำเนิดการเปลี่ยนแปลงแบบสม่ำเสมอ : มีอัลกอริทึมการเรียงลำดับแบบอิงซึ่งจะขึ้นอยู่กับการนำไปใช้ของตัวเปรียบเทียบ: คืนองค์ประกอบในลำดับที่เรียงเมื่อใช้ตัวเปรียบเทียบที่แท้จริง (นั่นคือการเปรียบเทียบทำตามที่เราคาดหวังในอัลกอริทึมการเรียงลำดับมาตรฐาน) ส่งคืนการเปลี่ยนแปลงการสุ่มอย่างสม่ำเสมอขององค์ประกอบเมื่อตัวเปรียบเทียบถูกแทนที่ด้วยการพลิกเหรียญอย่างยุติธรรม (นั่นคือกลับx < y = trueด้วยความน่าจะเป็น 1/2 โดยไม่คำนึงถึงค่าของ x และ y) รหัสสำหรับอัลกอริทึมการเรียงลำดับจะต้องเหมือนกัน มันเป็นเพียงรหัสในการเปรียบเทียบ "กล่องดำ" ที่ได้รับอนุญาตให้เปลี่ยน

1
การลบรายการที่ซ้ำกันได้อย่างมีประสิทธิภาพและมีค่าใช้จ่ายหน่วยความจำเหลือน้อย
ฉันต้องการกรองรายการจำนวนเต็มอย่างมีประสิทธิภาพสำหรับรายการที่ซ้ำกันในแบบที่ต้องเก็บชุดผลลัพธ์เท่านั้น วิธีนี้สามารถเห็นได้: เรามีช่วงของจำนวนเต็ม S={1,…,N}S={1,…,N}S = \{1, \dots{}, N\} กับ NNN ใหญ่ (พูด 2402402^{40}) เรามีฟังก์ชั่น f:S→Sf:S→Sf : S \to S มีการชนหลายครั้ง (ภาพมีการกระจายอย่างสม่ำเสมอ SSS) เราต้องไปเก็บของ f[S]f[S]f[S], นั่นคือ {f(x)|x∈S}{f(x)|x∈S}\{f(x) | x \in S\} ฉันมีการประมาณความแม่นยำ (ความน่าจะเป็น) ของสิ่งที่ |f[S]||f[S]||f[S]| คือและสามารถจัดสรรโครงสร้างข้อมูลล่วงหน้าได้ (พูด |f[S]|≈230|f[S]|≈230|f[S]| \approx 2^{30}) ฉันมีความคิดเล็กน้อย แต่ฉันไม่แน่ใจว่าอะไรจะเป็นวิธีที่ดีที่สุด: บิตเซตไม่อยู่ในคำถามเนื่องจากชุดอินพุตไม่พอดีกับหน่วยความจำ ตารางแฮช แต่ (1) ต้องการหน่วยความจำโอเวอร์เฮดประมาณ 150% |f[S]||f[S]||f[S]| และ (2) …

3
Quicksort มีรันไทม์สมการกำลังสองเสมอหรือไม่ถ้าคุณเลือกองค์ประกอบสูงสุดเป็น pivot
หากคุณมีอัลกอริทึมการเรียงลำดับอย่างรวดเร็วและคุณเลือกองค์ประกอบที่เล็กที่สุด (หรือใหญ่ที่สุด) เป็นเดือยของคุณ ฉันถูกสมมติว่าถ้าคุณให้ชุดข้อมูลที่เรียงแล้วคุณจะได้รับประสิทธิภาพกรณีที่เลวร้ายที่สุดโดยไม่คำนึงว่ารายการ 'เรียงแล้ว' ของคุณอยู่ในลำดับขึ้นหรือลง ความคิดของฉันคือถ้าคุณเลือกองค์ประกอบที่เล็กที่สุดสำหรับเดือยของคุณไม่ว่าอินพุต 'เรียงแล้ว' ของคุณจะถูกเรียงลำดับจากน้อยไปมากหรือจากมากไปหาน้อยไม่สำคัญเพราะเซตย่อยที่เลือกให้เรียงกับเดือยของคุณจะเป็น ขนาดเดียวกัน?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.