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

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

3
การใช้งานจริงของ Radix Sort
Radix จัดเรียงเป็นทฤษฎีอย่างรวดเร็วเมื่อคุณรู้ว่ากุญแจอยู่ในขอบเขต จำกัด บางอย่างบอกว่าค่าในช่วงตัวอย่างเช่น หากคุณเพิ่งแปลงค่าเป็นฐานซึ่งใช้เวลาเวลาให้ทำการจัดเรียงฐาน radix จากนั้นแปลงกลับเป็นฐานเดิมของคุณเพื่ออัลกอริทึมโดยรวมnnn[ 0 … nk- 1 ][0...nk-1][0\dots n^k -1]k &lt; lgnk&lt;LG⁡nk<\lg nnnnΘ ( n )Θ(n)\Theta(n)nnnΘ ( n k )Θ(nk)\Theta(nk) อย่างไรก็ตามฉันได้อ่านแล้วว่าโดยทั่วไปแล้วการเรียงลำดับของ Radix ในทางปฏิบัติจะช้ากว่าการทำ Quicksort แบบสุ่มมาก : สำหรับอาร์เรย์ขนาดใหญ่การเรียงลำดับแบบ Radix มีจำนวนการเรียนการสอนต่ำที่สุด แต่เนื่องจากประสิทธิภาพแคชค่อนข้างต่ำประสิทธิภาพโดยรวมจึงแย่กว่ารุ่นที่ผสานหน่วยความจำและการรวมแบบรวดเร็ว การจัดเรียงของ Radix เป็นเพียงแค่อัลกอริธึมทางทฤษฎีที่ดีหรือว่ามันมีประโยชน์ในทางปฏิบัติทั่วไปหรือไม่?

3
อัลกอริธึมการเรียงลำดับพื้นที่คงที่ที่มีประสิทธิภาพที่สุดคืออะไร?
ฉันกำลังมองหาอัลกอริธึมการเรียงลำดับสำหรับ int arrays ที่ไม่ได้จัดสรรไบต์ใด ๆ นอกจากขนาดของอาเรย์และ จำกัด เพียงสองคำสั่ง: SWAP: สลับดัชนีถัดไปกับดัชนีปัจจุบัน ย้าย: เลื่อนเคอร์เซอร์ไปที่ดัชนี +1 หรือ -1; นั่นคือคุณไม่สามารถสลับดัชนีเพื่อนบ้านไม่ใช่หรือสลับดัชนีหลังจากที่คุณเพียงแค่สลับดัชนี100 10อัลกอริธึมที่มีประสิทธิภาพมากที่สุดคืออะไรคือขั้นตอนที่ใช้การเคลื่อนไหวน้อยลง

3
อัลกอริธึมเชิงเส้นเวลาแบบกำหนดแน่นอนเพื่อตรวจสอบว่าหนึ่งอาเรย์เป็นเวอร์ชันที่เรียงลำดับของอีกอันหรือไม่
พิจารณาปัญหาต่อไปนี้: อินพุต:สองอาร์เรย์และของความยาวโดยที่อยู่ในลำดับที่เรียงAAABBBnnnBBB ค้นหา:ไม่และมีรายการเดียวกัน (กับหลายหลากของพวกเขา)?AAABBB อัลกอริทึมที่กำหนดได้เร็วที่สุดสำหรับปัญหานี้คืออะไร สามารถแก้ไขได้เร็วกว่าการเรียงลำดับหรือไม่ สามารถแก้ปัญหานี้ในเวลาเชิงเส้นที่กำหนดได้หรือไม่?

2
เรียงลำดับอาร์เรย์ของจำนวนเต็ม 5 จำนวนโดยเปรียบเทียบได้สูงสุด 7 รายการ
ฉันจะเรียงลำดับรายการจำนวนเต็ม 5 ตัวได้อย่างไรในกรณีที่แย่ที่สุดใช้เวลา 7 เปรียบเทียบ? ฉันไม่สนใจว่าจะมีการปฏิบัติการอื่นอีกกี่ครั้ง ฉันไม่รู้อะไรเป็นพิเศษเกี่ยวกับจำนวนเต็ม ฉันได้ลองวิธีการแบ่งและพิชิตที่แตกต่างกันสองสามข้อซึ่งทำให้ฉันเปรียบเทียบได้ 8 ข้อเช่นต่อไปนี้วิธีการผสานหรือผสานการผสานกับการใช้การค้นหาแบบไบนารีเพื่อค้นหาตำแหน่งการแทรก แต่ทุกครั้งที่ฉันจบด้วย 8 เปรียบเทียบกรณีที่เลวร้ายที่สุด . ตอนนี้ฉันแค่มองหาคำใบ้ไม่ใช่วิธีแก้ปัญหา

4
เหตุใด Quickized Quicksort จึงมีค่าใช้จ่ายรันไทม์ที่แย่ที่สุดในกรณี O (n log n)
การจัดเรียงแบบด่วนแบบสุ่มเป็นส่วนขยายของการเรียงแบบด่วนซึ่งองค์ประกอบของเดือยจะถูกเลือกแบบสุ่ม สิ่งที่สามารถซับซ้อนเวลากรณีที่เลวร้ายที่สุดของอัลกอริทึมนี้ ตามที่ผมมันควรจะเป็นO(n2)O(n2)O(n^2)เป็นกรณีที่เลวร้ายที่สุดที่เกิดขึ้นเมื่อหมุนสุ่มเลือกถูกเลือกในเรียงหรือเรียงย้อนกลับการสั่งซื้อ แต่ในบางตำรา [1] [2]ความซับซ้อนของเวลากรณีที่เลวร้ายที่สุดถูกเขียนเป็นO(nlogn)O(nlog⁡n)O(n\log{n}) ถูกต้องอะไร

2
ข้อได้เปรียบของ Randomized Quicksort คืออะไร
ในหนังสือของพวกเขาแบบสุ่มอัลกอริทึม , Motwani และ Raghavan เปิดการแนะนำที่มีคำอธิบายของฟังก์ชั่น RandQS ของพวกเขา - quicksort สุ่ม - ที่หมุนที่ใช้สำหรับการแบ่งชุดออกเป็นสองส่วนคือการสุ่มเลือก ฉันได้รับสมองของฉัน (ค่อนข้างอ่อนแอภายใต้การยอมรับ) ในช่วงเวลานี้ แต่ฉันไม่สามารถเห็นได้ว่าข้อดีของอัลกอริทึมนี้มีมากกว่าการเลือกพูดองค์ประกอบกลาง (ในดัชนีไม่ใช่ขนาด) ในแต่ละครั้ง ฉันคิดว่าสิ่งที่ฉันไม่เห็นคือ: ถ้าชุดเริ่มต้นอยู่ในลำดับสุ่มความแตกต่างระหว่างการเลือกองค์ประกอบที่ตำแหน่งสุ่มในชุดและเลือกองค์ประกอบที่ตำแหน่งคงที่คืออะไร ใครบางคนสามารถสอนฉันในแง่ที่ค่อนข้างง่าย?

4
ทำไมเราไม่ใช้การจัดเรียงอย่างรวดเร็วในรายการที่เชื่อมโยง?
อัลกอริทึมการเรียงลำดับด่วนสามารถแบ่งออกเป็นขั้นตอนต่อไปนี้ ระบุเดือย แบ่งพาร์ติชันรายการที่เชื่อมโยงตาม pivot แบ่งรายการที่เชื่อมโยงแบบวนซ้ำเป็น 2 ส่วน ตอนนี้ถ้าผมมักจะเลือกองค์ประกอบสุดท้ายเป็นเดือยแล้วระบุองค์ประกอบหมุน (ขั้นตอนที่ 1) ใช้เวลาเวลาO(n)O(n)\mathcal O(n) หลังจากระบุองค์ประกอบ pivot เราสามารถจัดเก็บข้อมูลและเปรียบเทียบกับองค์ประกอบอื่น ๆ ทั้งหมดเพื่อระบุจุดพาร์ติชันที่ถูกต้อง (ขั้นตอนที่ 2) เปรียบเทียบแต่ละคนจะใช้เวลาเวลาที่เราเก็บข้อมูลเดือยและแต่ละแลกเปลี่ยนใช้เวลาO ( 1 )เวลา ดังนั้นโดยรวมจะใช้เวลาO ( n )สำหรับองค์ประกอบnO(1)O(1)\mathcal O(1)O(1)O(1)\mathcal O(1)O(n)O(n)\mathcal O(n)nnn ดังนั้นความสัมพันธ์ที่เกิดซ้ำคือ: ซึ่งเป็น O ( n log n )ซึ่งเหมือนกับในการเรียงแบบผสานกับรายการที่เชื่อมโยงT(n)=2T(n/2)+nT(n)=2T(n/2)+nT(n) = 2T(n/2) + nO(nlogn)O(nlog⁡n)\mathcal O(n \log n) เหตุใดจึงต้องจัดเรียงผสานมากกว่าการจัดเรียงด่วนสำหรับรายการที่เชื่อมโยง

4
Quicksort อธิบายให้เด็ก ๆ ฟัง
ปีที่แล้วผมได้อ่านที่ยอดเยี่ยมบนกระดาษ“กลศาสตร์ควอนตัสำหรับอนุบาล” มันไม่ใช่กระดาษง่าย ๆ ตอนนี้ฉันสงสัยว่าจะอธิบายอย่างรวดเร็วด้วยคำพูดที่ง่ายที่สุดเท่าที่จะเป็นไปได้ ฉันจะพิสูจน์ (หรืออย่างน้อยก็ด้วยมือ) ว่าความซับซ้อนโดยเฉลี่ยคือและกรณีที่ดีที่สุดและเลวร้ายที่สุดคืออะไรกับชั้นอนุบาล หรืออย่างน้อยในโรงเรียนประถม?O ( n บันทึกn )O(nเข้าสู่ระบบ⁡n)O(n \log n)

2
แทรกลงในรายการอย่างมีประสิทธิภาพทำให้จำนวนผู้ลงโฆษณาน้อยที่สุด
สมมติว่ามีรายการที่เปรียบเทียบได้สองรายการ: u และ s ให้ INV (u) เป็นจำนวนผู้รุกรานใน u ฉันกำลังมองหาอัลกอริทึมที่มีประสิทธิภาพเพื่อแทรกรายการของ s ลงใน u ด้วยการเพิ่มขึ้นเล็กน้อยของ INV (u) โดยทั่วไปฉันต้องการแทรกวัตถุลงในรายการในขณะที่รักษา "เรียงเป็นที่สุด" ในขณะที่รักษาลำดับของรายการแรก ตัวอย่าง: u = [4,6,2,9,7] INV(u) = 3 ((4, 2), (6, 2) and (9, 7) s = [8,3,10] one optimal solution u' = [3, 4, 6, 2, 8, 9, 7, 10] INV(u') …

1
การเรียงลำดับของรายการสามารถตรวจสอบได้โดยไม่ต้องเปรียบเทียบกับเพื่อนบ้านหรือไม่?
nnnรายการ -Item สามารถตรวจสอบได้ว่าเป็นเรียงโดยเปรียบเทียบทุกรายการให้กับเพื่อนบ้าน ในใบสมัครของฉันฉันจะไม่สามารถเปรียบเทียบทุกรายการกับเพื่อนบ้าน: บางครั้งการเปรียบเทียบจะอยู่ระหว่างองค์ประกอบที่อยู่ห่างไกล เนื่องจากรายการมีมากกว่าสามรายการและการเปรียบเทียบเป็นเพียงการดำเนินการที่ได้รับการสนับสนุนเท่านั้นไม่เคยมี "เครือข่าย" ของการเปรียบเทียบที่จะพิสูจน์ว่ารายการนั้นเรียงลำดับ แต่ขาดหายไปอย่างน้อยหนึ่งโดยตรงกับเพื่อนบ้าน เปรียบเทียบ? อย่างเป็นทางการสำหรับการลำดับขององค์ประกอบeieie_iฉันมีชุดของคู่ของดัชนี(j,k)(j,k)(j,k)ซึ่งผมทราบว่าej&gt;ekej&gt;eke_j > e_k , ej=ekej=eke_j = e_kหรือej&lt;ekej&lt;eke_j < e_k k มีคู่(l,l+1)(l,l+1)(l,l+1)ที่หายไปจากชุดการเปรียบเทียบ เป็นไปได้ไหมที่จะพิสูจน์ว่ามีการเรียงลำดับหรือไม่
14 sorting 

4
จำเป็นต้องมีการโอนถ่ายสำหรับอัลกอริทึมการเรียงลำดับหรือไม่
เป็นไปได้หรือไม่ที่จะใช้อัลกอริธึมการจัดเรียงที่มีการเปรียบเทียบแบบไม่ใช้สกรรมกริยาและถ้าใช่ทำไมความไวแสงมีการระบุไว้เป็นข้อกำหนดสำหรับการเรียงลำดับการเปรียบเทียบ? พื้นหลัง: อัลกอริทึมการเรียงลำดับโดยทั่วไปเรียงลำดับองค์ประกอบของรายการตามฟังก์ชันตัวเปรียบเทียบ C (x, y) ด้วย C(x,y)=⎧⎩⎨−10+1if x≺yif x∼yif x≻yC(x,y)={−1if x≺y0if x∼y+1if x≻y\begin{array}{ll} C(x,y) = \begin{cases} -1 & {\text{if}}\ x\prec y \\ 0 & {\text{if}}\ x\sim y \\ +1 & {\text{if}}\ x\succ y \\ \end{cases} \end{array} ข้อกำหนดสำหรับเครื่องมือเปรียบเทียบนี้เท่าที่ฉันเข้าใจ: สะท้อนกลับ: ∀x:C(x,x)=0∀x:C(x,x)=0\forall x: C(x,x)=0 antisymmetric: ∀x,y:C(x,y)=−C(y,x)∀x,y:C(x,y)=−C(y,x)\forall x,y: C(x,y) = - C(y,x) สกรรมกริยา: …

1
ปัญหาที่น่าสนใจในการเรียงลำดับ
รับหลอดที่มีลูกหมายเลข (สุ่ม) หลอดมีรูสำหรับถอดลูกบอล พิจารณาขั้นตอนต่อไปนี้สำหรับการดำเนินการหนึ่ง: คุณสามารถเลือกหนึ่งลูกหรือมากกว่าจากหลุมและจดจำลำดับที่คุณเลือกลูกบอล คุณจำเป็นต้องเอียงท่อไปทางด้านซ้ายเพื่อให้ลูกบอลที่เหลืออยู่ในท่อเลื่อนไปทางซ้ายและใช้พื้นที่ว่างที่สร้างขึ้นโดยการเอาลูกบอลออก คุณไม่ควรเปลี่ยนลำดับที่คุณเลือกลูกบอลหมายเลขจากท่อ ตอนนี้คุณนำมันกลับมาอีกครั้งในท่อโดยใช้พื้นที่ว่างที่สร้างโดยการเคลื่อนที่ของลูกบอล ขั้นตอนที่ 1 ถึง 3 ถือเป็นการดำเนินการครั้งเดียว ค้นหาการดำเนินงานขั้นต่ำที่จำเป็นในการเรียงลำดับลูกบอลหมายเลขตามลำดับจากน้อยไปหามาก ตัวอย่างเช่น: ถ้าหลอดมี: [ 1 4 2 3 5 6 ] [1 4 2 3 5 6][1\ 4\ 2\ 3\ 5\ 6] จากนั้นเราสามารถนำ444และ555และ666และถ้าเราเอียงท่อไปทางซ้ายเราจะได้[ 1 2 3 ] [1 2 3][1\ 2\ 3]และเราแทรก( 4 5 6 ) (4 …

1
คาดว่าจำนวนของการแลกเปลี่ยนในการจัดเรียงฟอง
รับอาร์เรย์ของจำนวนเต็มองค์ประกอบในอาร์เรย์แต่ละคนสามารถเพิ่มขึ้นจำนวนคงที่กับบางส่วนน่าจะเป็น ,&lt;n ฉันต้องหาจำนวนสว็อปที่คาดว่าจะเกิดขึ้นเพื่อจัดเรียงอาเรย์โดยใช้การเรียงลำดับแบบบับเบิลN ขP [ ผม] 0 ≤ ฉัน&lt; nAAANNNbbbp[i]p[i]p[i]0≤i&lt;n0≤i&lt;n0 \leq i < n ฉันได้ลองทำสิ่งต่อไปนี้แล้ว: ความน่าจะเป็นขององค์ประกอบสำหรับสามารถคำนวณได้ง่ายจากความน่าจะเป็นที่กำหนดi &lt; jA[i]&gt;A[j]A[i]&gt;A[j]A[i] > A[j]i&lt;ji&lt;ji < j จากการใช้ข้างต้นฉันได้คำนวณจำนวน swaps ที่คาดไว้เป็น: double ans = 0.0; for ( int i = 0; i &lt; N-1; i++ ){ for ( int j = i+1; j &lt; N; j++ …

2
ขั้นตอน "หาร" ในการเรียงแบบผสานสามารถหลีกเลี่ยงได้หรือไม่
การเรียงลำดับผสานจึงเป็นอัลกอริธึมการแบ่งและพิชิต ขณะที่ฉันดูแผนภาพข้างต้นฉันคิดว่าถ้าเป็นไปได้ที่จะข้ามขั้นตอนหารทั้งหมด หากคุณวนซ้ำอาร์เรย์เดิมในขณะที่กระโดดสองครั้งคุณจะได้รับองค์ประกอบที่ index i และ i + 1 และใส่เข้าไปในอาร์เรย์ที่เรียงลำดับของตัวเอง เมื่อคุณมีอาร์เรย์ย่อยทั้งหมดเหล่านี้ ([7,14], [3,12], [9,11] และ [2,6] ดังที่แสดงในแผนภาพ) คุณสามารถดำเนินการตามปกติตามปกติเพื่อรับ อาร์เรย์ที่เรียงลำดับ วนซ้ำผ่านอาร์เรย์และสร้างอาร์เรย์ย่อยที่จำเป็นในทันทีมีประสิทธิภาพน้อยกว่าการดำเนินการตามขั้นตอนหารอย่างครบถ้วนหรือไม่

4
การประเมินความซับซ้อนของเวลาโดยเฉลี่ยของอัลกอริธึมการทำฟองอากาศที่กำหนด
พิจารณารหัสเทียมของ bubbleort แบบนี้: FOR i := 0 TO arraylength(list) STEP 1 switched := false FOR j := 0 TO arraylength(list)-(i+1) STEP 1 IF list[j] &gt; list[j + 1] THEN switch(list,j,j+1) switched := true ENDIF NEXT IF switched = false THEN break ENDIF NEXT อะไรคือแนวคิดพื้นฐานที่ฉันต้องจำไว้เพื่อประเมินความซับซ้อนของเวลาโดยเฉลี่ย ฉันได้ทำการคำนวณกรณีที่เลวร้ายที่สุดและดีที่สุดเรียบร้อยแล้ว แต่ฉันก็ตรึกตรองว่าจะประเมินความซับซ้อนเฉลี่ยของวงในเพื่อสร้างสมการ สมการที่แย่ที่สุดคือ: ∑i=0n(∑j=0n−(i+1)O(1)+O(1))=O(n22+n2)=O(n2)∑i=0n(∑j=0n−(i+1)O(1)+O(1))=O(n22+n2)=O(n2) \sum_{i=0}^n \left(\sum_{j=0}^{n …

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