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

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

1
การนับคู่ผกผัน
แอปพลิเคชั่นการแบ่งและพิชิตแบบคลาสสิกคือการแก้ปัญหาต่อไปนี้: รับอาร์เรย์ของที่แตกต่างกัน, องค์ประกอบเทียบเคียงนับจำนวนของคู่ผกผันในอาร์เรย์: คู่เช่นว่าและเจa[1…n]a[1…n]a[1\dots n](i,j)(i,j)(i,j)a[i]>a[j]a[i]>a[j]a[i] \gt a[j]i<ji<ji \lt j วิธีการหนึ่งในการทำเช่นนี้คือผสาน Merge Sort แต่ยังนับจำนวนคู่ผกผันในปัญหาย่อยด้วย ในระหว่างขั้นตอนการผสานเราจะนับจำนวนคู่ผกผันที่ครอบคลุมปัญหาย่อย (สอง) และเพิ่มเข้าไปในการนับของปัญหาย่อย ขณะนี้เป็นสิ่งที่ดีและให้อัลกอริทึมเวลาสิ่งนี้ทำให้เกิดความสับสนO(nlogn)O(nlog⁡n)O(n\log n) หากเรามีข้อ จำกัด เพิ่มเติมที่อาเรย์เป็นแบบอ่านอย่างเดียวเราสามารถทำสำเนาและจัดการกับการคัดลอกหรือใช้โครงสร้างข้อมูลเพิ่มเติมเช่นสถิติการสั่งซื้อแบบต้นไม้ไบนารีที่สมดุลเพื่อทำการนับซึ่งทั้งสองอย่างใช้พื้นที่Θ(n)Θ(n)\Theta(n) คำถามปัจจุบันคือพยายามพื้นที่ให้ดีขึ้นโดยไม่กระทบต่อเวลาใช้งาน กล่าวคือ มีอัลกอริธึมเวลาเพื่อนับจำนวนคู่ผกผันซึ่งทำงานบนอาเรย์แบบอ่านอย่างเดียวและใช้พื้นที่ย่อยเชิงเส้น (เช่น ) หรือไม่O(nlogn)O(nlog⁡n)O(n\log n)o(n)o(n)o(n) สมมติรูปแบบ RAM ค่าใช้จ่ายสม่ำเสมอและองค์ประกอบที่ใช้เวลาพื้นที่และการเปรียบเทียบระหว่างพวกเขาคือ(1)O(1)O(1)O(1)O(1)O(1)O(1) การอ้างอิงจะทำ แต่คำอธิบายจะดีกว่า :-) ฉันพยายามค้นหาเว็บ แต่ไม่พบคำตอบที่เป็นบวก / ลบสำหรับสิ่งนี้ ฉันคิดว่านี่เป็นเพียงความอยากรู้อยากเห็น

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++ …

1
ปัญหาความครอบคลุม (ตัวส่งและตัวรับ)
ฉันพยายามที่จะแก้ปัญหาความคุ้มครองต่อไปนี้ มีตัวส่งสัญญาณพร้อมพื้นที่ครอบคลุม 1 กม. และตัวรับสัญญาณตัดสินใจในที่ตัวรับสัญญาณทั้งหมดได้รับการคุ้มครองโดยตัวส่งสัญญาณใด ๆ ผู้เปิดเผยและเครื่องส่งสัญญาณทั้งหมดจะถูกแทนด้วยพิกัดและของพวกเขาnnnnnnO(nlogn)O(nlog⁡n)O(n\log n)xxxyyy วิธีการแก้ปัญหาที่ทันสมัยที่สุดที่ฉันจะมาพร้อมกับใช้เวลาlog) สำหรับตัวรับสัญญาณทุกตัวเรียงลำดับตัวส่งทั้งหมดตามระยะทางถึงตัวรับสัญญาณปัจจุบันจากนั้นนำตัวส่งสัญญาณด้วยระยะทางที่สั้นที่สุดและระยะทางที่สั้นที่สุดนี้ควรอยู่ภายใน 0.5 กม.O(n2logn)O(n2log⁡n)O(n^2\log n) แต่วิธีการที่มีลักษณะไร้เดียงสาชอบมากดีขึ้นในเวลาซับซ้อน2) เพียงคำนวณระยะทางทั้งหมดระหว่างเครื่องส่งสัญญาณและตัวรับสัญญาณทุกคู่O(n2)O(n2)O(n^2) ฉันไม่แน่ใจว่าฉันสามารถใช้อัลกอริธึมการค้นหาระยะในปัญหานี้ได้ไหม ตัวอย่างเช่น kd-trees ทำให้เราสามารถค้นหาช่วงดังกล่าวได้ แต่ฉันไม่เคยเห็นตัวอย่างและฉันไม่แน่ใจว่ามีการค้นหาแบบวงกลมสำหรับแวดวงหรือไม่ ความซับซ้อนที่ได้รับถือว่าวิธีการแก้ปัญหาควรคล้ายกับการเรียงลำดับO(nlogn)O(nlog⁡n)O(n\log n)

3
กำหนดหมายเลขที่ขาดหายไปในสตรีมข้อมูล
เราได้รับกระแสของn−1n−1n-1ตัวเลขที่แตกต่างจากจำนวนจากชุด{1,…,n}{1,…,n}\left\{1,\dots,n\right\} } ฉันจะกำหนดจำนวนที่ขาดหายไปด้วยอัลกอริทึมที่อ่านกระแสข้อมูลหนึ่งครั้งและใช้หน่วยความจำของบิตเท่านั้น( ล็อก2 n ) ได้O(log2n)O(log2⁡n)O(\log_2 n)อย่างไร

1
เลือกค่ามัธยฐานและองค์ประกอบทางซ้ายและขวาอย่างมีประสิทธิภาพ
สมมติว่าเรามีชุดของNโคดS={a1,a2,a3,…,aN}S={a1,a2,a3,…,aN}S = \{ a_1,a_2,a_3,\ldots , a_N \}NNN โคเดอร์แต่ละตัวมีเรตและจำนวนเหรียญทองE iพวกเขาชนะมาแล้วRiRiR_iEiEiE_i บริษัท ซอฟต์แวร์ต้องการจ้างผู้เขียนโค้ดสามคนเพื่อพัฒนาแอปพลิเคชัน สำหรับการจ้างนักเขียนโค้ดสามคนพวกเขาพัฒนากลยุทธ์ต่อไปนี้: พวกเขาจัดเรียงโคเดอร์ตามลำดับของการจัดอันดับและเรียงจากมากไปน้อยของเหรียญทอง จากรายการที่จัดเรียงนี้พวกเขาเลือกตัวเข้ารหัสกลางสามตัว เช่นถ้ารายการจัดเป็นพวกเขาเลือก( 2 , 3 , 1 )โคด(a5,a2,a3,a1,a4)(a5,a2,a3,a1,a4)(a_5,a_2,a_3,a_1,a_4)(a2,a3,a1)(a2,a3,a1)(a_2,a_3,a_1) ตอนนี้เราต้องช่วย บริษัท ด้วยการเขียนโปรแกรมสำหรับงานนี้ การป้อนข้อมูล: บรรทัดแรกมีคือจำนวนของโคเดอร์NNN จากนั้นบรรทัดที่สองจะมีเรตติ้งของi th coderRiRiR_iiii บรรทัดที่สามมีจำนวนเหรียญทองที่ใส่ถุงโดย th coderiii เอาท์พุท: แสดงเพียงหนึ่งบรรทัดที่มีผลรวมของเหรียญทองที่ได้รับจากโคเดอร์ทั้งสามที่ บริษัท จะเลือก

1
การเลือกแบบสุ่ม
อัลกอริทึมการเลือกแบบสุ่มมีดังต่อไปนี้: อินพุต: อาร์เรย์ของn (แตกต่างกันเพื่อความง่าย) ตัวเลขและตัวเลขk ∈ [ n ]AAAnnnk∈[n]k∈[n]k\in [n] เอาท์พุท: "อันดับองค์ประกอบ" ของA (กล่าวคือหนึ่งในตำแหน่งkถ้าAถูกจัดเรียง)kkkAAAkkkAAA วิธี: หากมีองค์ประกอบหนึ่งในให้ส่งคืนAAA เลือกองค์ประกอบ ("pivot") อย่างสม่ำเสมอโดยการสุ่มppp คำนวณชุดและR = { a ∈ A : a &gt; p }L={a∈A:a&lt;p}L={a∈A:a&lt;p}L = \{a\in A : a < p\}R={a∈A:a&gt;p}R={a∈A:a&gt;p}R = \{a\in A : a > p\} ถ้ากลับยศkองค์ประกอบของL|L|≥k|L|≥k|L| \ge kkkkLLL มิฉะนั้นส่งคืนอันดับองค์ประกอบของRk−|L|k−|L|k - |L|RRR …

2
ความซับซ้อนของพลังการคำนวณเมทริกซ์
ฉันสนใจในการคำนวณ 'พลังของ TH n × nเมทริกซ์ สมมติว่าเรามีขั้นตอนวิธีการคูณเมทริกซ์ซึ่งทำงานในO ( M ( n ) )เวลา จากนั้นหนึ่งสามารถคำนวณA nในเวลาO ( M ( n ) log ( n ) )ได้อย่างง่ายดาย เป็นไปได้หรือไม่ที่จะแก้ปัญหานี้โดยใช้เวลาน้อยลงnnnn×nn×nn\times nAAAO(M(n))O(M(n))\mathcal{O}(M(n))AnAnA^nO(M(n)log(n))O(M(n)log⁡(n))\mathcal{O}(M(n)\log(n)) โดยทั่วไปรายการเมทริกซ์สามารถมาจาก semiring แต่คุณสามารถใช้โครงสร้างเพิ่มเติมได้หากมันช่วยได้ หมายเหตุ: ฉันเข้าใจว่าในการคำนวณทั่วไปในเวลาo ( M ( n ) log ( m ) )จะให้อัลกอริทึมo ( log m )สำหรับการยกกำลัง แต่ปัญหาที่น่าสนใจจำนวนหนึ่งลดลงเป็นกรณีพิเศษของการยกกำลังเมทริกซ์โดยที่ m = O …

1
งานวิจัยเกี่ยวกับการประเมินประสิทธิภาพของการลืมแคชในทางปฏิบัติ
อัลกอริทึมแคชและโครงสร้างข้อมูลที่ลืมเลือนเป็นสิ่งที่ค่อนข้างใหม่แนะนำโดย Frigo et al ในขั้นตอนวิธีการแคชลบเลือน 1999 วิทยานิพนธ์ของ Prokop ในปีเดียวกันนั้นได้เสนอแนวคิดเบื้องต้นเช่นกัน กระดาษโดย Frigo และคณะ นำเสนอผลการทดลองแสดงให้เห็นถึงศักยภาพของทฤษฎีและอัลกอริธึมที่ขาดการแคชและโครงสร้างข้อมูล โครงสร้างข้อมูลที่ลืมแคชจำนวนมากขึ้นอยู่กับโครงสร้างการค้นหาแบบสแตติก วิธีการจัดเก็บและสำรวจต้นไม้เหล่านี้ได้รับการพัฒนามาไม่มากนักโดยเฉพาะอย่างยิ่ง Bender et al และโดย Brodal และคณะ Demaine ให้ดีภาพรวม งานทดลองของการตรวจสอบพฤติกรรมแคชในทางปฏิบัติได้ทำอย่างน้อยโดย Ladner และคณะ ในการเปรียบเทียบแคชรอบรู้และ Cache ลบเลือนคงค้นหาต้นไม้โดยใช้โปรแกรม Instrumentation 2002 Ladner และคณะ เปรียบเทียบพฤติกรรมแคชของอัลกอริทึมในการแก้ปัญหาการค้นหาแบบไบนารีโดยใช้อัลกอริธึมแบบคลาสสิกอัลกอริธึมที่ลืมแคชและอัลกอริธึมที่รับรู้แคช อัลกอริทึมแต่ละตัวถูกเปรียบเทียบกับวิธีการนำทางทั้งทางตรงและทางอ้อม นอกจากนี้วิทยานิพนธ์ของRønn, 2003 ได้วิเคราะห์อัลกอริธึมเดียวกันให้มีรายละเอียดค่อนข้างสูงและยังทำการทดสอบอัลกอริทึมเดียวกันกับ Ladner และคณะ คำถามของฉันคือ มีการวิจัยใหม่ ๆ เกี่ยวกับการเปรียบเทียบพฤติกรรมแคชของอัลกอริธึมการลืมแคชในทางปฏิบัติตั้งแต่นั้นมาหรือไม่? ฉันสนใจโดยเฉพาะอย่างยิ่งในประสิทธิภาพของแผนภูมิการค้นหาแบบคงที่ แต่ฉันก็จะมีความสุขกับอัลกอริทึมและโครงสร้างข้อมูลที่ลืมแคชอื่น ๆ

6
ตัวอย่างของอัลกอริทึมแบบเรียกซ้ำที่ซับซ้อน
ผมได้อธิบายที่มีชื่อเสียงกำหนดขั้นตอนวิธีการเลือกเส้นเวลา (ค่ามัธยฐานของอัลกอริทึมมีเดีย) ให้เพื่อน การเรียกซ้ำในอัลกอริทึมนี้ (ในขณะที่เรียบง่ายมาก) นั้นค่อนข้างซับซ้อน มีการเรียกซ้ำสองครั้งแต่ละครั้งมีพารามิเตอร์แตกต่างกัน ฉันพยายามค้นหาตัวอย่างอื่น ๆ ของอัลกอริทึมแบบเรียกซ้ำที่น่าสนใจ แต่ไม่สามารถหาได้ อัลกอริธึมการเรียกซ้ำทั้งหมดที่ฉันสามารถทำได้คือการเรียกซ้ำแบบง่าย ๆ หรือการแบ่งและพิชิตอย่างง่าย คุณช่วยยกตัวอย่างการเรียกซ้ำที่ซับซ้อนได้ไหม

1
ขั้นตอนที่รับประกันว่าจะออกจากเขาวงกต
ให้เขาวงกตแบบสองมิติซึ่งคุณสามารถให้คำสั่ง 4 คำสั่ง "เลื่อนขึ้น / ลง / ขวา / ซ้าย" การรู้จักเขาวงกต แต่ไม่ใช่ตำแหน่งของบุคคลเราจะค้นหาลำดับขั้นต่ำของคำสั่งที่รับประกันการออกจากเขาวงกตได้อย่างไร ฉันกำลังมองหาชุดคำสั่งลำดับเดียวที่จะทำงานไม่ว่าคุณจะเริ่มจากเขาวงกตที่ไหน สมมติว่าหากพันธมิตรของเราได้รับคำสั่ง "ย้ายไปทางขวา" เมื่อมีกำแพงอยู่ด้านขวาเขาจะอยู่ในที่ที่เขาอยู่ กล่าวอีกนัยหนึ่งเราจะได้รับเขาวงกตและเราจะต้องเลือกลำดับของคำสั่ง จากนั้นพันธมิตรของเราจะถูกวางไว้ที่ไหนสักแห่งในเขาวงกตและจะทำตามลำดับของคำสั่งที่เราเลือกไว้ล่วงหน้า เราต้องการลำดับนี้เพื่อให้แน่ใจว่าพันธมิตรของเราจะหลบหนีไม่ว่าพันธมิตรของเราจะวางไว้ที่ไหน โปรดทราบว่าคำสั่งที่อนุญาตไม่มีคำสั่งแบบมีเงื่อนไขใด ๆ ดังนั้นจึงไม่สามารถทำตามลำดับที่แตกต่างกันขึ้นอยู่กับคู่ของคุณ มีวิธีคิดแบบพหุนามเวลาในการสร้างลำดับดังกล่าวให้คำอธิบายของเขาวงกตหรือไม่? Yuval Filmus กล่าวถึงกรณีนี้เป็นกรณีพิเศษของปัญหาการซิงโครไนซ์คำและอาจเกี่ยวข้องกับลำดับการข้ามผ่านสากล ฉันยังพบกระดาษที่ดูเหมือนว่าเกี่ยวข้อง: ปัญหาพร้อมกันเขาวงกตแก้ Stefan Funke, André Nusser, Sabine Storandt AAAI 2017 น่าเสียดายสำหรับกราฟทั่วไปนี่ดูเหมือนจะเป็นปัญหาที่ยังไม่แก้ แต่ฉันสงสัยว่าอาจมีอัลกอริทึมที่ดีสำหรับกรณีเฉพาะนี้หรือไม่ ฉันมาพร้อมกับวิธีการของผู้สมัคร: ติดป้ายทุกตำแหน่งด้วยจำนวนขั้นต่ำที่ต้องการออกและติดตามทุกตัวแทนในเขาวงกต อาจเป็นไปได้ที่จะทำการค้นหาด้วยวิธีนี้

2
กราฟที่เหลือในการไหลสูงสุด
ฉันกำลังอ่านเกี่ยวกับปัญหาการไหลสูงสุดที่นี่ ฉันไม่สามารถเข้าใจสัญชาตญาณที่อยู่เบื้องหลังกราฟส่วนที่เหลือ เหตุใดเราจึงพิจารณาด้านหลังขณะคำนวณการไหล ทุกคนสามารถช่วยฉันเข้าใจแนวคิดของกราฟที่เหลือได้หรือไม่ อัลกอริทึมเปลี่ยนไปอย่างไรในกราฟที่ไม่ได้บอกทิศทาง

2
ความถูกต้อง - พิสูจน์ความโลภ - อัลกอริธึมสำหรับจุดสุดยอดขั้นต่ำของต้นไม้
มีอัลกอริทึมโลภสำหรับการค้นหาจุดสุดยอดขั้นต่ำของต้นไม้ซึ่งใช้ DFS traversal สำหรับแต่ละใบไม้ของต้นไม้ให้เลือกพาเรนต์ของมัน (เช่นพาเรนต์อยู่ในฝาครอบจุดต่ำสุด) สำหรับแต่ละโหนดภายใน: หากไม่มีโหนดย่อยใด ๆ ให้เลือกโหนดนี้ ฉันจะพิสูจน์ได้อย่างไรว่ากลยุทธ์โลภนี้ให้คำตอบที่ดีที่สุด? มีจุดยอดที่เล็กกว่าขนาดที่อัลกอริธึมข้างต้นสร้างขึ้นหรือไม่?

2
การค้นหาเส้นทางที่สั้นและยาวที่สุดระหว่างจุดยอดสองจุดใน DAG
ให้ DAG ที่ไม่มีน้ำหนัก (กำกับด้วยกราฟ acyclic)และสองจุดยอดและเป็นไปได้ไหมที่จะหาเส้นทางที่สั้นและยาวที่สุดจากถึงในเวลาพหุนาม ความยาวเส้นทางวัดจากจำนวนขอบD=(V,A)D=(V,A)D = (V,A)ssstttsssttt ฉันสนใจที่จะหาช่วงของความยาวเส้นทางที่เป็นไปได้ในเวลาพหุนาม Ps. คำถามนี้เป็นซ้ำของ StackOverflow คำถามเส้นทางที่ยาวที่สุดใน DAG

3
อัลกอริทึมนี้ยังสามารถใช้เป็นอัลกอริทึมการค้นหาแบบไบนารี่ได้หรือไม่?
ในขณะที่ทำรหัสกะตะที่สอง(ซึ่งขอให้คุณใช้อัลกอริทึมการค้นหาแบบไบนารีห้าครั้งแต่ละครั้งด้วยวิธีการที่แตกต่างกัน) ฉันได้มากับโซลูชันที่แตกต่างกันเล็กน้อยซึ่งทำงานดังนี้: หากฉันมีอาร์เรย์ที่เรียงลำดับความยาว 100 และฉันเห็นว่าเขตข้อมูลเริ่มต้นมีหมายเลข 200 และเขตข้อมูลสิ้นสุดประกอบด้วยหมายเลข 400 ฉันในฐานะคณิตศาสตร์ที่เรียนรู้มนุษย์น่าจะเริ่มค้นหารอบ ๆ เขต 35 ถ้าฉันกำลังค้นหา หมายเลข 270 และไม่ใช่ฟิลด์ 50 เหมือนในอัลกอริธึมการค้นหาไบนารีปกติ จากนั้นถ้าตัวเลขในฟิลด์ 35 ของอาร์เรย์คือ 270, 35 คือดัชนีที่ฉันค้นหา หากไม่ใช่กรณีที่ฉันสามารถเปรียบเทียบจำนวนที่ฉันได้รับ (พูด 280) และทำซ้ำการดำเนินการโดยใช้ส่วนล่างของอาร์เรย์ (ดังนั้นฉันจึงมี 35 ฟิลด์กับเขตข้อมูลเริ่มต้นที่มี 200 และเขตสิ้นสุดที่มี 280) ถ้า จำนวนที่ฉันค้นพบมีค่ามากกว่าสิ่งที่ฉันค้นหาหรือส่วนบนของอาร์เรย์ (บอกว่าฉันได้ 260: ตอนนี้ฉันมีดัชนี 65 ตัว, อันแรกที่มี 260 และอันสุดท้ายที่มี 400 ในแนวตั้งฉันจะมุ่งหน้าแบบ Torward ดัชนี 4 ของอาร์เรย์ย่อยนี้ซึ่งเป็นดัชนี …

1
ต้นไม้ Spanning ขั้นต่ำของ MST เข้าถึงได้ทั้งหมดโดย Kruskal และ Prim หรือไม่
ฉันเชื่อว่านี่เป็นความจริง แต่ก็ไม่สามารถพิสูจน์ได้อย่างเป็นทางการเช่นกัน แต่มันเป็นความจริงหรือไม่ที่ต้นไม้สแปนนิ่งขั้นต่ำสามารถเข้าถึงได้โดยใช้อัลกอริทึมของ Kruskal? ในทำนองเดียวกันนี่เป็นความจริงสำหรับอัลกอริทึมของ Prim หรือไม่ แก้ไข: เพื่อให้แม่นยำยิ่งขึ้นฉันต้องการทราบว่าได้รับ MST สำหรับกราฟน้ำหนักที่เชื่อมต่อและไม่ระบุทิศทางหรือไม่รับประกันว่ามีลำดับขั้นตอนโดยใช้ Kruskal หรือ Prim ซึ่งสร้าง MST นี้ เช่นมีตัวเลือกต่าง ๆ สำหรับ Kruskal เมื่อมีหลายขอบที่มีน้ำหนักเท่ากัน เช่นเดียวกันกับ Prim

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