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

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

3
Big O: ซ้อนกันสำหรับวนรอบกับการพึ่งพา
ฉันได้รับการบ้านด้วย Big O. ฉันติดอยู่กับรังซ้อนสำหรับลูปที่ขึ้นอยู่กับลูปก่อนหน้านี้ นี่คือคำถามการทำการบ้านของฉันเนื่องจากฉันต้องการที่จะเข้าใจจริงๆ: sum = 0; for (i = 0; i < n; i++ for (j = 0; j < i; j++) sum++; ส่วนที่ขว้างฉันไปคือj < iส่วนหนึ่ง ดูเหมือนว่ามันจะดำเนินการเหมือนแฟคทอเรียล แต่มีการเพิ่มเติม คำแนะนำใด ๆ ที่จะได้รับการชื่นชมจริงๆ

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
หากคุณมีอัลกอริทึมการเรียงลำดับอย่างรวดเร็วและคุณเลือกองค์ประกอบที่เล็กที่สุด (หรือใหญ่ที่สุด) เป็นเดือยของคุณ ฉันถูกสมมติว่าถ้าคุณให้ชุดข้อมูลที่เรียงแล้วคุณจะได้รับประสิทธิภาพกรณีที่เลวร้ายที่สุดโดยไม่คำนึงว่ารายการ 'เรียงแล้ว' ของคุณอยู่ในลำดับขึ้นหรือลง ความคิดของฉันคือถ้าคุณเลือกองค์ประกอบที่เล็กที่สุดสำหรับเดือยของคุณไม่ว่าอินพุต 'เรียงแล้ว' ของคุณจะถูกเรียงลำดับจากน้อยไปมากหรือจากมากไปหาน้อยไม่สำคัญเพราะเซตย่อยที่เลือกให้เรียงกับเดือยของคุณจะเป็น ขนาดเดียวกัน?

1
ทำไมความซับซ้อนของการลบรอบการลบ
เราต้องการแก้ปัญหาการไหลของต้นทุนที่น้อยที่สุดด้วยอัลกอริทึมการยกเลิกเชิงลบทั่วไป นั่นคือเราเริ่มต้นด้วยการไหลที่ถูกต้องแบบสุ่มและจากนั้นเราจะไม่เลือกวัฏจักรเชิงลบ "ดี" ใด ๆ เช่นรอบต้นทุนเฉลี่ยขั้นต่ำสุด แต่ใช้ Bellman-Ford เพื่อค้นหารอบที่น้อยที่สุดและเพิ่มตามรอบการค้นพบ Letเป็นจำนวนโหนดในกราฟจำนวนขอบความจุสูงสุดของขอบในกราฟและVVVAAAยูยูUWWWค่าใช้จ่ายสูงสุดของขอบในกราฟ จากนั้นสื่อการเรียนรู้ของฉันอ้างสิทธิ์: ค่าใช้จ่ายสูงสุดที่จุดเริ่มต้นต้องไม่เกิน UWAยูWAUW การเพิ่มไปตามวัฏจักรลบหนึ่งครั้งจะช่วยลดต้นทุนได้อย่างน้อยหนึ่งหน่วย ขอบล่างสำหรับต้นทุนต่ำสุดคือ 0 เพราะเราไม่อนุญาตให้มีค่าใช้จ่ายติดลบ แต่ละรอบการลบสามารถพบได้ใน O ( Vก)O(VA)O(VA) และพวกเขาก็ทำตามความซับซ้อนของอัลกอริทึม O(V2UW)O(V2AยูW)O(V^2AUW). ฉันเข้าใจเหตุผลที่อยู่เบื้องหลังการอ้างสิทธิ์แต่ละข้อ แต่คิดว่าความซับซ้อนนั้นแตกต่างกัน โดยเฉพาะจำนวนสูงสุดของการเพิ่มจะได้รับจากหนึ่งหน่วยของการไหลต่อการเสริมการใช้ค่าใช้จ่ายจากUWAยูWAUW ถึงศูนย์ทำให้เราได้มากที่สุด UWAยูWAUWaugmentations เราจำเป็นต้องค้นพบวัฏจักรเชิงลบสำหรับแต่ละดังนั้นเราจึงเพิ่มจำนวนสูงสุดของการขยายเวลาที่จำเป็นในการค้นพบรอบ (VAVAVA) และมาถึงที่ โอ(A2VยูW)O(A2VยูW)O(A^2VUW) สำหรับอัลกอริทึม นี่อาจเป็นข้อผิดพลาดในสื่อการเรียนรู้ (นี่เป็นข้อความที่อาจารย์ให้ไว้ไม่ใช่จากบันทึกของนักเรียนจากหลักสูตร) ​​หรือเหตุผลของฉันผิด?

4
ระยะทางที่สั้นที่สุดระหว่างจุดใน A และจุดใน B
ให้สองเซตและแต่ละอันมีจุดเชื่อมต่อจุดบนเครื่องบินคำนวณระยะทางที่สั้นที่สุดระหว่างจุดหนึ่งในและจุดหนึ่งในคือ\}AAABBBnnnAAABBBmin { dist(p,q) | p∈A∧q∈B }min { dist(p,q) | p∈A∧q∈B }\min \space \{\mbox{ } \text{dist}(p, q) \mbox{ } | \mbox{ } p \in A \land q \in B \space \} ฉันไม่แน่ใจว่าฉันถูกหรือไม่ แต่ปัญหานี้คล้ายกับปัญหาที่สามารถแก้ไขได้โดยการเขียนโปรแกรมเชิงเส้นในเรขาคณิตเชิงคำนวณ อย่างไรก็ตามการลดลงของ LP ไม่ตรงไปตรงมา นอกจากนี้ปัญหาของฉันยังเกี่ยวข้องกับการค้นหาสเปคที่บางที่สุดระหว่างจุดสองชุดซึ่ง LP สามารถแก้ไขได้อย่างชัดเจนในO(n)O(n)O(n)ในพื้นที่สองมิติ

1
กำลังมองหาอัลกอริทึมการจัดอันดับที่โปรดปรานรายการใหม่
ฉันกำลังทำงานกับระบบการจัดอันดับที่จะจัดอันดับรายการตามคะแนนเสียงที่ได้รับในช่วงระยะเวลาหนึ่ง ฉันกำลังมองหาอัลกอริทึมที่จะคำนวณคะแนนที่ค่อนข้างดีโดยเฉลี่ยอย่างไรก็ตามฉันต้องการให้คะแนนใหม่มากกว่าคะแนนที่เก่ากว่า ฉันกำลังคิดถึงบางสิ่งตามแนว: s c o r e1+ 2 ⋅ s c o r e2 + ⋯ + n ⋅ s c o r en1 + 2 + ⋯ + nsคโอRอี1+ 2⋅sคโอRอี2 + ⋯+ n⋅sคโอRอีn1+2+⋯+n\frac{\mathrm{score}_1 +\ 2\cdot \mathrm{score}_2\ +\ \dots +\ n\cdot \mathrm{score}_n}{1 + 2 + \dots + n} ฉันสงสัยว่ามีอัลกอริทึมอื่นที่มักใช้กับสถานการณ์เช่นนี้หรือไม่และถ้าเป็นเช่นนั้นคุณช่วยอธิบายพวกเขาได้ไหม

1
ครอบคลุมสี่เหลี่ยมผืนผ้าโดยสายการกวาด
ฉันได้รับแบบฝึกหัดโชคไม่ดีที่ฉันไม่ประสบความสำเร็จ มีชุดของรูปสี่เหลี่ยมเป็นและสี่เหลี่ยมผืนผ้า{0} การใช้อัลกอริธึมการกวาดล้างบนเครื่องบินกำหนดว่าครอบคลุมโดยชุดหรือไม่R1. .RnR1..RnR_{1}..R_{n}R0R0R_{0}R0R0R_{0}R1. .RnR1..RnR_{1}..R_{n} สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับหลักการของอัลกอริทึมบรรทัดกวาดดูที่นี่ ให้เริ่มต้นจากจุดเริ่มต้น. เริ่มแรกเรารู้จักอัลกอริทึมการกวาดบรรทัดเป็นอัลกอริทึมสำหรับการค้นหาจุดตัดเซกเมนต์ของบรรทัดที่ต้องการโครงสร้างข้อมูลสองแบบ: ชุดของคะแนนเหตุการณ์ (จัดเก็บจุดสิ้นสุดของส่วนและจุดแยก)QQQ สถานะ (โครงสร้างแบบไดนามิกสำหรับชุดเซกเมนต์ของเส้นการกวาดที่ตัดกัน)TTT แนวคิดทั่วไป:สมมติว่าบรรทัดการกวาดเป็นเส้นแนวตั้งที่เริ่มเข้าใกล้ชุดของสี่เหลี่ยมจากด้านซ้าย ทั้งหมดเรียงพิกัดของรูปสี่เหลี่ยมและเก็บไว้ในในการเพิ่มการสั่งซื้อ - ควรใช้เวลาn) เริ่มต้นจากจุดเหตุการณ์แรกสำหรับทุก ๆ จุดกำหนดชุดของรูปสี่เหลี่ยมที่ตัดกันที่พิกัดกำหนดระบุส่วนต่อเนื่องของรูปสี่เหลี่ยมผืนผ้าแยกและตรวจสอบว่าพวกเขาครอบคลุมที่พิกัดปัจจุบันทั้งหมดหรือไม่ ด้วยเป็นต้นไม้ไบนารีมันจะใช้เวลาn) หากส่วนใดส่วนหนึ่งของยังคงเปิดอยู่ล.llxxxQQQO ( n บันทึกn )O(nlog⁡n)O(n\log n)xxxR0R0R_{0}xxxTTTO ( บันทึกn )O(log⁡n)O(\log n)R0R0R_{0}R0R0R_{0}ไม่ได้ครอบคลุมอย่างสมบูรณ์ รายละเอียด:แนวคิดของอัลกอริทึมการตัดเซกเมนต์คือเซ็กเมนต์ที่อยู่ติดกันตัดกัน จากข้อเท็จจริงนี้เราได้สร้างสถานะและดูแลรักษาตลอดขั้นตอนวิธี ฉันพยายามค้นหาความคิดที่คล้ายกันในกรณีนี้และจนถึงขณะนี้โดยไม่ประสบความสำเร็จสิ่งเดียวที่ฉันสามารถพูดได้ก็คือสี่เหลี่ยมสองรูปตัดกันถ้าพิกัดและตรงกันของพวกเขาทับซ้อนกันTTTxxxYyy ปัญหาคือวิธีการสร้างและดูแลรักษาและความซับซ้อนของการสร้างและดูแลรักษาคืออะไร ฉันคิดว่าต้นไม้ Rมีประโยชน์อย่างมากในกรณีนี้ แต่เนื่องจากฉันพบว่ามันยากมากที่จะกำหนดสี่เหลี่ยมผืนผ้าขอบเขตขั้นต่ำโดยใช้ต้นไม้ RTTTTTT คุณมีความคิดเกี่ยวกับวิธีการแก้ปัญหานี้และโดยเฉพาะอย่างยิ่งวิธีการสร้างหรือไม่?TTT

1
ปัญหาบุรุษไปรษณีย์จีน: การค้นหาการเชื่อมต่อที่ดีที่สุดระหว่างโหนดคี่องศา
ฉันกำลังเขียนโปรแกรมแก้ปัญหาบุรุษไปรษณีย์จีน (หรือที่เรียกว่าปัญหาการตรวจสอบเส้นทาง) ใน draph ที่ไม่ได้ใช้เส้นทางและกำลังเผชิญปัญหาเพื่อค้นหาขอบเพิ่มเติมที่ดีที่สุดในการเชื่อมต่อโหนดที่มีระดับคี่ดังนั้นฉันจึงสามารถคำนวณวงจร Eulerian อาจมี (พิจารณาขนาดของกราฟที่ต้องการแก้ไข) การรวมกันของขนาดมหึมาซึ่งจำเป็นต้องคำนวณและประเมินผล ตัวอย่างเช่นมีแปลกองศาโหนดH ชุดค่าผสมที่ดีที่สุดอาจเป็น:A , B , C, D , E, F, G , HA,B,C,D,E,F,G,HA, B, C, D, E, F, G, H BABAB , , ,คDCDCDEFEFEFG HGHGH CACAC , ,B DBDBDEHEHEH, FGFGFG DADAD, B CBCBC, EGEGEG, FHFHFH EAEAE .... ที่ไหน BABAB หมายถึง "edge …

1
การแก้ไขการเกิดซ้ำผ่านพหุนามลักษณะด้วยรากแบบจินตภาพ
ในการวิเคราะห์อัลกอริทึมคุณมักจะต้องแก้ปัญหาซ้ำ นอกเหนือไปจากโททฤษฎีบททดแทนและซ้ำวิธีการมีหนึ่งโดยใช้ชื่อที่ประกอบด้วยหลายลักษณะ บอกว่าฉันได้ข้อสรุปว่าพหุนามลักษณะ x2- 2 x + 2x2−2x+2x^2 - 2x + 2มีรากในจินตนาการคือx1= 1 + ix1=1+ix_1 = 1+i และ x2= 1 - ix2=1−ix_2 =1-i. ถ้าอย่างนั้นฉันก็ใช้ไม่ได้ ค1⋅xn1+ค2⋅xn2c1⋅x1n+c2⋅x2n\qquad c_1\cdot x_1^n + c_2\cdot x_2^n ได้รับการแก้ปัญหาใช่มั้ย ฉันควรดำเนินการอย่างไรในกรณีนี้

1
แสดงการเปลี่ยนแปลงโดยพลการเป็นลำดับของการดำเนินการ (แทรกย้ายลบ)
สมมติว่าฉันมีสองสาย โทรหาพวกเขาAAA และ BBB. ไม่มีสตริงที่มีอักขระซ้ำ ๆ กัน ฉันจะค้นหาลำดับการแทรกย้ายและลบที่สั้นที่สุดที่เปลี่ยนไปได้อย่างไร AAA เข้าไป BBBที่ไหน: insert(char, offset)แทรกcharที่กำหนดoffsetในสตริง move(from_offset, to_offset)ย้ายอักขระปัจจุบันที่ออฟเซ็ตfrom_offsetไปยังตำแหน่งใหม่เพื่อให้ออฟเซ็ตto_offset delete(offset) ลบอักขระที่ offset แอปพลิเคชันตัวอย่าง: คุณทำการสืบค้นฐานข้อมูลและแสดงผลลัพธ์บนเว็บไซต์ของคุณ ในภายหลังคุณรันการสืบค้นฐานข้อมูลอีกครั้งและค้นพบว่าผลลัพธ์มีการเปลี่ยนแปลง คุณต้องการเปลี่ยนสิ่งที่อยู่บนหน้าเพื่อให้ตรงกับสิ่งที่อยู่ในฐานข้อมูลโดยใช้การดำเนินการ DOM ขั้นต่ำ มีสองเหตุผลที่คุณต้องการให้ลำดับการทำงานสั้นที่สุด ครั้งแรกที่มีประสิทธิภาพ เมื่อมีการเปลี่ยนแปลงระเบียนเพียงไม่กี่คุณต้องการให้แน่ใจว่าคุณทำO (1)O(1)\mathcal{O}(1) ค่อนข้างมากกว่า O (n)O(n)\mathcal{O}(n)การทำงานของ DOM เนื่องจากมีราคาแพง ประการที่สองความถูกต้อง หากรายการถูกย้ายจากตำแหน่งหนึ่งไปอีกตำแหน่งหนึ่งคุณต้องการย้ายโหนด DOM ที่เกี่ยวข้องในการดำเนินการครั้งเดียวโดยไม่ต้องทำลายและสร้างใหม่อีกครั้ง มิฉะนั้นคุณจะสูญเสียสถานะโฟกัสเนื้อหาของ<input>องค์ประกอบและอื่น ๆ

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

3
ความซับซ้อนของเวลาลอการิทึมเทียบกับลอการิทึม
ในการใช้งานจริงจะมีประโยชน์อย่างชัดเจนเมื่อใช้งาน O (บันทึก( บันทึก( n ) )O(log⁡(log⁡(n))\mathcal{O}(\log(\log(n)) แทน O (บันทึก( n ) )O(log⁡(n))\mathcal{O}(\log(n)) อัลกอริทึม? นี่เป็นกรณีที่เมื่อมีการใช้งานหนึ่งต้นสำหรับต้นไม้ Van Emde Boas แทนที่จะเป็นการใช้งานแบบต้นไม้ค้นหาแบบทวิภาค แต่ตัวอย่างเช่นถ้าเราใช้n &lt;106n&lt;106n < 10^6 ในกรณีที่ดีที่สุดอัลกอริธึมลอการิทึมสองครั้งจะมีประสิทธิภาพเหนือกว่าลอการิทึมหนึ่งโดย (โดยประมาณ) ปัจจัยของ 555. และโดยทั่วไปแล้วการใช้งานนั้นยุ่งยากและซับซ้อนมากขึ้น เนื่องจากฉันชอบ BST ส่วนตัวมากกว่าต้นไม้ VEB คุณคิดอย่างไร? หนึ่งสามารถแสดงให้เห็นว่า: ∀ n &lt;106. เข้าสู่ระบบnเข้าสู่ระบบ( บันทึก( n ) )&lt; 5.26146∀n&lt;106. log⁡nlog⁡(log⁡(n))&lt;5.26146\qquad \displaystyle \forall n < 10^6.\ \frac{\log …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.