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

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

1
อัลกอริทึมโลภสามารถแก้ไขปัญหาการเปลี่ยนเหรียญได้เมื่อใด
ให้ชุดเหรียญที่มีค่าแตกต่างกันและค่า v คุณต้องการค้นหาจำนวนเหรียญที่น้อยที่สุดที่จำเป็นในการแทนค่า vc1,...,cnc1,...,cnc1, ... , cn เช่นสำหรับชุดเหรียญ 1,5,10,20 สิ่งนี้ให้ 2 เหรียญสำหรับผลรวม 6 และ 6 เหรียญสำหรับผลรวม 19 คำถามหลักของฉันคือเมื่อสามารถใช้กลยุทธ์โลภเพื่อแก้ปัญหานี้ได้อย่างไร คะแนนโบนัส: ข้อความนี้ไม่ถูกต้องธรรมดาหรือไม่ (จาก: จะทราบได้อย่างไรว่าอัลกอริทึมโลภเพียงพอสำหรับปัญหาการเปลี่ยนเหรียญขั้นต่ำหรือไม่ ) อย่างไรก็ตามบทความนี้มีข้อพิสูจน์ว่าหากอัลกอริทึมโลภใช้ได้กับค่า denom ที่ใหญ่ที่สุด + ค่า denom ที่ใหญ่เป็นอันดับสองมันก็ใช้ได้กับมันทั้งหมดและมันแสดงให้เห็นเพียงแค่ใช้อัลกอริธึมโลภเทียบกับอัลกอริธึม DP ที่เหมาะสมที่สุด http://www.cs.cornell.edu/~kozen/papers/change.pdf ps โปรดทราบว่าคำตอบในหัวข้อนั้นพังอย่างไม่น่าเชื่อ - นั่นคือเหตุผลที่ฉันถามคำถามใหม่

3
อัลกอริธึมที่เร็วที่สุดสำหรับการค้นหาเส้นทางที่สั้นที่สุดทั้งหมดในกราฟคืออะไร?
ในกราฟที่ไม่มีการถ่วงน้ำหนักและไม่มีทิศทางด้วย vertices และ edge เช่นวิธีใดที่เร็วที่สุดในการค้นหาเส้นทางที่สั้นที่สุดทั้งหมดในกราฟ สามารถทำได้เร็วกว่า Floyd-Warshall ซึ่งเป็นแต่เร็วมากต่อการทำซ้ำหรือไม่?VVVEEE2V>E2V>E2V \gt EO(V3)O(V3)O(V^3) ถ้ากราฟนั้นถูกถ่วงน้ำหนักล่ะ?

1
จัดเรียงเป็นโปรแกรมเชิงเส้น
ปัญหาที่น่าประหลาดใจมีจำนวนลดลงอย่างเป็นธรรมชาติถึงการเขียนโปรแกรมเชิงเส้น (LP) ดูบทที่ 7จาก [1] สำหรับตัวอย่างเช่นการไหลของเครือข่ายการจับคู่แบบสองทางเกมแบบรวมศูนย์เส้นทางที่สั้นที่สุดรูปแบบของการถดถอยเชิงเส้นและการประเมินวงจร! เนื่องจากการประเมินวงจรลดการโปรแกรมเชิงเส้นปัญหาใด ๆ ในจะต้องมีสูตรการเขียนโปรแกรมเชิงเส้น ดังนั้นเราจึงมีอัลกอริทึมการเรียงลำดับ "ใหม่" ผ่านการลดขนาดให้เป็นโปรแกรมเชิงเส้น ดังนั้นคำถามของฉันคือPPP โปรแกรมเชิงเส้นคืออะไรที่จะเรียงลำดับของจำนวนจริง ?nnn เวลาในการทำงานของอัลกอริธึมการเรียงลำดับการลดและการแก้ปัญหาคืออะไร อัลกอริทึมโดย S. Dasgupta, C. Papadimitriou และ U. Vazirani (2006)

3
การดึงเส้นทางที่สั้นที่สุดของกราฟแบบไดนามิก
ฉันกำลังศึกษาเส้นทางที่สั้นที่สุดในกราฟกำกับ มีอัลกอริธึมที่มีประสิทธิภาพมากมายสำหรับการค้นหาเส้นทางที่สั้นที่สุดในเครือข่ายเช่น dijkstra's หรือ bellman-ford's แต่ถ้ากราฟเป็นไดนามิก? โดยการพูดแบบไดนามิกฉันหมายความว่าเราสามารถแทรกหรือลบจุดยอดในระหว่างการดำเนินการของโปรแกรม ฉันพยายามที่จะหาขั้นตอนวิธีการที่มีประสิทธิภาพสำหรับการปรับปรุงเส้นทางที่สั้นที่สุดจากจุดสุดยอดทุกจุดสุดยอดอื่น ๆUหลังจากการใส่ขอบอีโดยไม่จำเป็นต้องเรียกใช้อัลกอริทึมเส้นทางที่สั้นที่สุดในกราฟใหม่อีกครั้ง ฉันจะทำสิ่งนี้ได้อย่างไร ขอบคุณล่วงหน้า.vvvuuueee หมายเหตุ:การเปลี่ยนแปลงสามารถทำได้หลังจากการวนซ้ำครั้งแรกของอัลกอริทึม หมายเหตุ [2]: ให้สองโหนดคือต้นทางและtเป้าหมาย ฉันต้องการค้นหาเส้นทางที่สั้นที่สุดระหว่างโหนดเหล่านี้ เมื่อกราฟมีการปรับปรุงฉันมีเพียงแค่การปรับปรุงπ ( s , T )ซึ่งเป็นเส้นทางที่สั้นที่สุดระหว่างsและเสื้อssstttπ(s,t)π(s,t)\pi(s,t)sssttt หมายเหตุ [3]:ฉันสนใจเฉพาะเคสใส่ขอบเท่านั้น ความหมายอย่างเป็นทางการ : ให้กราฟ ) กำหนดดำเนินการปรับปรุงเป็น 1) แทรกของขอบอีเพื่อEหรือ 2) การลบขอบ AA อีจากE วัตถุประสงค์คือการหาค่าใช้จ่ายของเส้นทางที่สั้นที่สุดของคู่ทั้งหมดอย่างมีประสิทธิภาพหลังจากการดำเนินการอัพเดท อย่างมีประสิทธิภาพเราหมายถึงอย่างน้อยก็ดีกว่าดำเนินการอัลกอริทึม All-Pairs-Shortest-Path เช่นอัลกอรึทึมของ Bellman-Ford หลังจากการดำเนินการอัพเดทแต่ละครั้งG=(V,E)G=(V,E)G = (V,E)eeeEEEeeeEEE แก้ไข:ด้านล่างมีปัญหาในเวอร์ชันที่ง่ายขึ้น: กราฟถ่วงน้ำหนักจะได้รับประกอบด้วยขอบทิศทางเดียวและสองจุดสำคัญsและเสื้อ ชุดของขอบสองทิศทางของผู้สมัครจะได้รับเช่นกัน ฉันจะต้องสร้างขอบเพื่อลดระยะทางจากไปทีG(V,E)G(V,E)G(V,E)ssstttCCC(u,v)∈C(u,v)∈C(u,v) \in Csssttt

1
วิธีการพิสูจน์ความถูกต้องของอัลกอริทึมแบบสุ่ม?
ฉันมีสองวิธีในการสร้างรายการสิ่งของตามลำดับแบบสุ่มและต้องการตรวจสอบว่ามีความยุติธรรมเท่ากันหรือไม่ วิธีแรกที่ฉันใช้คือการสร้างรายการทั้งหมดขององค์ประกอบแล้วทำการสับเปลี่ยนมัน (พูดสับเปลี่ยน Fisher-Yates) วิธีที่สองเป็นวิธีการวนซ้ำซึ่งเก็บรายการที่สับในทุกการแทรก ในโค้ดหลอกฟังก์ชันการแทรกคือ: insert( list, item ) list.append( item ) swap( list.random_item, list.last_item ) ฉันสนใจที่จะแสดงความเป็นธรรมของการสับคันนี้โดยเฉพาะ ข้อดีของอัลกอริทึมนี้ซึ่งใช้อยู่ก็เพียงพอแล้วแม้ว่ามันจะไม่ยุติธรรมก็ตาม ในการตัดสินใจว่าฉันต้องการวิธีประเมินความเป็นธรรมของมัน แนวคิดแรกของฉันคือฉันต้องคำนวณพีชคณิตทั้งหมดที่เป็นไปได้ด้วยวิธีนี้เทียบกับการเรียงสับเปลี่ยนทั้งหมดที่เป็นไปได้สำหรับชุดของความยาวสุดท้าย ฉันสูญเสียนิดหน่อย แต่วิธีคำนวณพีชคณิตที่เกิดจากอัลกอริทึมนี้ ฉันยังไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุดหรือง่ายที่สุด

5
ทำไมคนที่มีสมรรถภาพร่างกายต่ำจึงมีโอกาสรอดชีวิตคนรุ่นต่อไป
ขณะนี้ฉันกำลังอ่านและดูเกี่ยวกับอัลกอริทึมทางพันธุกรรมและฉันคิดว่ามันน่าสนใจมาก (ฉันไม่ได้มีโอกาสศึกษาในขณะที่ฉันอยู่ที่มหาวิทยาลัย) ฉันเข้าใจว่าการกลายพันธุ์ขึ้นอยู่กับความน่าจะเป็น (การสุ่มเป็นรากฐานของวิวัฒนาการ) แต่ฉันไม่เข้าใจว่าทำไมการเอาชีวิตรอดจึงเป็นเช่นนั้น จากสิ่งที่ฉันเข้าใจบุคคลที่IIIมีฟิตเนสF(i)F(i)F(i)เช่นสำหรับบุคคลอีกคนที่JJJมีฟิตเนสเรามีจากนั้นมีโอกาสดีกว่าF(j)F(j)F(j)F(i)>F(j)F(i)>F(j)F(i) > F(j)IIIJJJเพื่อความอยู่รอด เพื่อรุ่นต่อไป ความน่าจะเป็นหมายความว่าJJJ อาจอยู่รอดและIII อาจไม่ (กับ "โชคร้าย") ฉันไม่เข้าใจว่าทำไมสิ่งนี้ถึงดีเลย? ถ้าIIIจะอยู่รอดสิ่งที่เลือกไว้เสมอสิ่งที่จะผิดพลาดในอัลกอริทึม? ฉันเดาว่าอัลกอริทึมจะคล้ายกับอัลกอริทึมโลภ แต่ฉันไม่แน่ใจ

2
อัลกอริทึมที่มีประสิทธิภาพสำหรับ 'unsumming' ชุดจำนวนเงิน
รับชุดของตัวเลขธรรมชาติ X พิจารณาชุดของผลรวมที่เป็นไปได้ทั้งหมด: จำนวนเงิน (X) = { ∑ฉัน∈ผม|A ⊆ X}sums(X)={∑i∈Ai|A⊆X}\textrm{sums}(X)= \left\{ \sum_{i \in A} i \,|\, A \subseteq X \right\} ยกตัวอย่างเช่นผลรวม ( { 1 , 5 } )= { 0 ,1,5,6}sums({1,5})={0,1,5,6}\textrm{sums}(\left\{1,5\right\}) = \left\{0, 1, 5, 6\right\}ในขณะที่ sums({1,1})={0,1,2}sums({1,1})={0,1,2}\textrm{sums}(\left\{1,1\right\}) = \left\{0, 1, 2\right\} } อัลกอริธึมที่มีประสิทธิภาพมากที่สุดสำหรับการคำนวณการดำเนินการผกผันคืออะไร โดยเฉพาะมันเป็นไปได้ที่จะคำนวณอย่างมีประสิทธิภาพต่อไปนี้: ไม่ว่าจะเป็นชุดที่กำหนดเป็นชุดผลรวมที่ถูกต้อง (ตัวอย่างเช่น{0,1,2}{0,1,2}\left\{0,1,2\right\}ถูกต้อง แต่{0,1,3}{0,1,3}\left\{0,1,3\right\}ไม่ถูกต้อง) เซ็ตมัลติเซตที่รวมกับเซ็ตที่กำหนด ชุดมัลติเซ็ตที่เล็กที่สุดที่รวมกับเซ็ตที่กำหนด (ตัวอย่างเช่น{1,2}{1,2}\left\{1,2\right\}และ{1,1,1}{1,1,1}\left\{1,1,1\right\}ทั้งผลรวมเป็น{0,1,2,3}{0,1,2,3}\left\{0,1,2,3\right\}แต่ตัวเก่ามีขนาดเล็กลง)

3
การทดสอบดั้งเดิมของ AKS จะเร็วกว่าการทดสอบอื่น ๆ จริง ๆ เมื่อใด
ฉันพยายามที่จะเข้าใจว่าการทดสอบ AKS primalityควรตีความอย่างไรเมื่อฉันเรียนรู้เช่นข้อพิสูจน์สำหรับการพิสูจน์ว่า PRIMES ⊆ P หรืออัลกอริทึมจริง ๆ สำหรับการทดสอบแบบดั้งเดิมบนคอมพิวเตอร์ การทดสอบมีพหุนาม แต่มีระดับสูงและค่าคงที่สูงที่เป็นไปได้ ดังนั้นในทางปฏิบัติที่nnnไม่ผ่านการทดสอบแบบดั้งเดิมอื่น ๆ ? ที่นี่nnnคือจำนวนหลักของนายกและ "เกิน" หมายถึงรันไทม์โดยประมาณของการทดสอบบนสถาปัตยกรรมคอมพิวเตอร์ทั่วไป ฉันสนใจในอัลกอริธึมที่เทียบเท่ากับการใช้งานซึ่งเป็นสิ่งที่กำหนดได้ซึ่งไม่จำเป็นต้องมีการคาดเดาเพื่อความถูกต้อง นอกจากนี้การใช้การทดสอบดังกล่าวมากกว่าสิ่งอื่น ๆ ที่ใช้งานได้จริงตามข้อกำหนดของหน่วยความจำของการทดสอบหรือไม่

2
มีการใช้การวิเคราะห์ที่ราบรื่นนอกสถาบันการศึกษาหรือไม่
การวิเคราะห์ที่ราบรื่นนั้นหาทางเข้าไปสู่การวิเคราะห์กระแสหลักของอัลกอริทึมหรือไม่? เป็นเรื่องปกติหรือไม่ที่ผู้ออกแบบอัลกอริทึมจะใช้การวิเคราะห์ที่ราบรื่นกับอัลกอริทึมของพวกเขา

2
หากฉันสามารถแก้ปัญหา Sudoku ฉันสามารถแก้ปัญหาพนักงานขายเดินทาง (TSP) ได้หรือไม่? ถ้าเป็นเช่นนั้นได้อย่างไร
ให้เราบอกว่ามีโปรแกรมดังกล่าวว่าถ้าคุณให้ซูโดกุที่เติมเต็มบางส่วนไม่ว่าขนาดใดมันจะให้ซูโดกุที่สมบูรณ์ของคุณ คุณสามารถใช้โปรแกรมนี้เป็นกล่องดำและใช้โปรแกรมนี้เพื่อแก้ปัญหา TSP ได้หรือไม่? ฉันหมายความว่ามีวิธีที่จะเป็นตัวแทนของปัญหา TSP ในรูปแบบที่เต็มไปด้วยซูโดกุบางส่วนดังนั้นถ้าฉันให้คำตอบของซูโดกุนั้นคุณสามารถบอกวิธีแก้ปัญหาให้กับ TSP ในเวลาพหุนาม ถ้าใช่เป็นอย่างไร คุณเป็นตัวแทนของ TSP ในฐานะซูโดกุที่ถูกเติมเต็มบางส่วนและตีความซูโดกุที่เติมให้สอดคล้องกับผลลัพธ์ได้อย่างไร

1
ความซับซ้อนของการถ่าย mod
ดูเหมือนว่าคำถามที่ควรมีคำตอบง่าย ๆ แต่ฉันไม่มีคำถามที่ชัดเจน: ถ้าฉันมีสองหมายเลขบิตสิ่งที่เป็นความซับซ้อนของการคำนวณ ?nnna,pa,pa, pamodpamodpa\bmod p การหารaaaด้วยppp จะใช้เวลา O(M(n))O(M(n))O(M(n))โดยที่M(n)M(n)M(n)คือความซับซ้อนของการคูณ แต่modmod\bmodสามารถทำงานได้เร็วขึ้นเล็กน้อยหรือไม่

1
แยกแยะขั้นตอนการตัดสินใจกับ Solver SMT เทียบกับ Theorem Prover เทียบกับ Converaint Solver
คำศัพท์เหล่านั้นทำให้ฉันสับสน ตามที่ฉันเข้าใจ เครื่องมือแก้ปัญหา SAT: ตัดสินความพึงพอใจของตรรกะเชิงประพจน์ (ใช้ DPLL หรือ Local Search) ขั้นตอนการตัดสินใจเป็นกระบวนการในการตัดสินใจความพึงพอใจของทฤษฎีอันดับหนึ่งที่สามารถตัดสินใจได้ SMT solver เป็นขั้นตอนการตัดสินใจ + ตัวแก้ SAT ทฤษฎีบทพิสูจน์ว่าบางสิ่งเช่น Dynamic Logic เช่นเครื่องมือ KeY ข้อ จำกัด การแก้ปัญหา: ฉันไม่รู้ แต่ฉันเห็นผู้คนเรียก Z3 ว่าเป็นผู้พิสูจน์ทฤษฎีบท ดังนั้นฉันไม่รู้วิธีที่จะทำให้ชัดเจนคำเหล่านั้น และคำทั่วไปมากที่สุดสำหรับพวกเขาทั้งหมดคืออะไร? ขอขอบคุณ.

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

2
จ่ายรวมปัญหาการเรียกเก็บเงิน
มีคนคนที่โต๊ะ ฉันคนวันที่มีการจ่ายเงินหน้าฉันดอลลาร์nnnผมiiพีผมpip_i บางคนไม่ได้มีค่าใช้จ่ายที่เหมาะสมในการจ่ายตรงเพื่อให้พวกเขาขึ้นมาด้วยวิธีดังต่อไปนี้พีผมpip_i ก่อนอื่นทุกคนเอาเงินไปวางบนโต๊ะ จากนั้นแต่ละคนจะนำเงินที่ได้ชำระกลับมามากเกินไป ตั๋วเงินมีชุดราคาคงที่ (ไม่ใช่ส่วนหนึ่งของอินพุต) ตัวอย่าง: สมมติว่ามีสองคนคืออลิซและบ๊อบ อลิซเป็นหนี้$ 5 และมีห้า$ 1 ค่า บ๊อบเป็นหนี้$ 2 และมีบิลหนึ่งใบ$ 5 หลังจากอลิซกับบ็อบเอาเงินไปวางบนโต๊ะแล้วบ็อบก็จะได้เงินคืน3 ดอลลาร์และทุกคนก็มีความสุข แน่นอนมีบางครั้งที่ไม่ต้องใส่เงินทั้งหมดลงบนโต๊ะ ตัวอย่างเช่นหากอลิซมีตั๋วเงินหนึ่งพันดอลลาร์คุณไม่จำเป็นต้องให้เธอเก็บเงินทั้งหมดไว้บนโต๊ะแล้วเอาคืนส่วนใหญ่ ฉันต้องการค้นหาอัลกอริทึมที่มีคุณสมบัติดังต่อไปนี้: ข้อมูลป้อนเข้าจะระบุจำนวนคนจำนวนเงินที่แต่ละคนเป็นหนี้และจำนวนเงินของแต่ละสกุลเงินที่แต่ละคนมี อัลกอริธึมบอกให้แต่ละคนทราบว่าธนบัตรใบใดวางบนโต๊ะในรอบแรก อัลกอริทึมบอกให้แต่ละคนทราบว่าจะลบรายการใดออกจากตารางในรอบที่สอง จำนวนตั๋วเงินที่วางไว้บนโต๊ะ + จำนวนตั๋วเงินที่ลบออกจากตารางจะลดลง หากไม่มีวิธีแก้ปัญหาที่เป็นไปได้อัลกอริทึมก็จะส่งคืนข้อผิดพลาด

1
การเติมตารางการกำหนดเส้นทางของ Pastry ทำงานอย่างไร
คำถามนี้ถูกย้ายจากการแลกเปลี่ยนกองวิศวกรรมซอฟต์แวร์เพราะสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันพยายามใช้ตารางแฮชแบบกระจายของ Pastry แต่มีบางสิ่งที่หลีกเลี่ยงความเข้าใจของฉัน ฉันหวังว่าบางคนสามารถชี้แจงได้ คำเตือน : ฉันไม่ใช่นักเรียนวิทยาศาสตร์คอมพิวเตอร์ ฉันเรียนวิชาวิทยาการคอมพิวเตอร์สองหลักสูตรในชีวิตของฉันและไม่ได้จัดการกับสิ่งที่ซับซ้อนจากระยะไกล ฉันทำงานกับซอฟต์แวร์มาหลายปีแล้วดังนั้นฉันจึงรู้สึกว่าขึ้นอยู่กับภารกิจการนำไปปฏิบัติถ้าฉันสามารถสรุปแนวคิดได้ ดังนั้นฉันอาจจะพลาดอะไรบางอย่างที่ชัดเจน ฉันได้อ่านกระดาษที่ผู้แต่งตีพิมพ์ [1] และฉันมีความก้าวหน้าที่ดี แต่ฉันก็ยังคงติดใจอยู่กับประเด็นนี้ในตารางการจัดเส้นทาง: กระดาษอ้างว่า ตารางการจัดเส้นทางของโหนดคือถูกจัดเป็น แถวที่มีรายการแต่ละรายการ รายการที่แถวของตารางเส้นทางแต่ละอ้างถึงโหนดที่ nodeId แบ่งปัน nodeId ของโหนดปัจจุบันในตัวเลข fi rst n หลัก แต่มีหลักหนึ่งมีค่าที่เป็นไปได้หนึ่งในนอกเหนือจากหลักใน id ของโหนดปัจจุบันRRR⌈log2bN⌉⌈เข้าสู่ระบบ2ข⁡ยังไม่มีข้อความ⌉\lceil \log_{2^b} N\rceil2b−12ข-12^b - 12b−12ข-12^b - 1nnnn+1n+1n + 12b−12ข-12^b - 1n+1n+1n + 1 ย่อมาจากตัวแปรโปรแกรมเฉพาะมัก4 …

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