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

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

4
ฉันพูดถูกเกี่ยวกับความแตกต่างระหว่างอัลกอริทึม Floyd-Warshall, Dijkstra และ Bellman-Ford หรือไม่?
ฉันกำลังศึกษาทั้งสามและฉันได้ระบุข้อสรุปจากพวกเขาด้านล่าง มีใครบอกฉันได้ไหมว่าฉันเข้าใจถูกต้องเพียงพอหรือไม่ ขอขอบคุณ. อัลกอริทึม Dijkstraจะใช้เมื่อคุณมีแหล่งเดียวและคุณต้องการทราบเส้นทางที่เล็กที่สุดจากโหนดหนึ่งไปยังอีกโหนดหนึ่ง แต่ล้มเหลวในกรณีเช่นนี้นี้ อัลกอริทึม Floyd-Warshallถูกใช้เมื่อโหนดใด ๆ ทั้งหมดสามารถเป็นต้นทางดังนั้นคุณต้องการให้ระยะทางที่สั้นที่สุดในการเข้าถึงโหนดปลายทางใด ๆ จากโหนดต้นทางใด ๆ สิ่งนี้จะล้มเหลวก็ต่อเมื่อมีรอบการลบเท่านั้น Bellman-Fordถูกใช้เช่น Dijkstra เมื่อมีเพียงแหล่งเดียว สิ่งนี้สามารถรองรับน้ำหนักเชิงลบและการทำงานของมันเหมือนกับ Floyd-Warshall ยกเว้นแหล่งเดียวใช่ไหม (นี่คือสิ่งที่ฉันไม่แน่ใจ)

3
อัลกอริทึมของ Brzozowski สำหรับการลด DFA
อัลกอริทึมการลดขนาด DFA ของ Brzozowski สร้าง DFA ขั้นต่ำสำหรับ DFA GGGโดย: การกลับขอบทั้งหมดในGGGทำให้สถานะเริ่มต้นเป็นสถานะยอมรับและยอมรับสถานะเริ่มต้นเพื่อรับ NFA ยังไม่มีข้อความ'N′N'สำหรับภาษาย้อนกลับ ใช้การสร้าง powerset เพื่อรับG'G′G'สำหรับภาษาย้อนกลับ ย้อนกลับขอบ (และเริ่มต้นยอมรับสลับ) ในG'G′G'ที่จะได้รับ NFA ยังไม่มีข้อความNNสำหรับภาษาต้นฉบับและ GนาทีGminG_{\min} แน่นอนเนื่องจาก DFA บางตัวมี DFA ใหญ่แบบย้อนกลับแบบทวีคูณอัลกอริทึมนี้จะทำงานในเวลาเอ็กซ์โพเนนเชียลในกรณีที่เลวร้ายที่สุดในแง่ของขนาดของอินพุตดังนั้นให้ติดตามขนาดของ DFA ย้อนกลับ ถ้าคือขนาดของอินพุต DFA,คือขนาดของ DFA ที่น้อยที่สุดและที่มีขนาดของ DFA ย้อนกลับน้อยที่สุดดังนั้นเวลารันไทม์ของอัลกอริทึมของ Brzozowski ในแง่ของ ,และคืออะไร?ยังไม่มีข้อความยังไม่มีข้อความNnnnม.ม.mn เมตรยังไม่มีข้อความยังไม่มีข้อความNnnnม.ม.m โดยเฉพาะอย่างยิ่งภายใต้ความสัมพันธ์ระหว่างและอัลกอริทึมของ Brzozowski มีประสิทธิภาพเหนือกว่าอัลกอริทึมของ Hopcroft หรือ Moore หรือไม่มnnnม.ม.m ฉันเคยได้ยินว่าในตัวอย่างทั่วไปในทางปฏิบัติ / แอปพลิเคชันอัลกอริทึมของ Brzozowski มีประสิทธิภาพเหนือกว่าผู้อื่น …

3
การฝึกเขียนโปรแกรมแบบไดนามิกบนสตริงการตัด
ฉันทำงานเกี่ยวกับปัญหาต่อไปนี้จากหนังสือเล่มนี้ ภาษาการประมวลผลสตริงที่แน่นอนมีการดำเนินการดั้งเดิมซึ่งแยกสตริงออกเป็นสองชิ้น เนื่องจากการดำเนินการนี้เกี่ยวข้องกับการคัดลอกสตริงดั้งเดิมจึงใช้เวลา n หน่วยสำหรับสตริงที่มีความยาว n โดยไม่คำนึงถึงตำแหน่งของการตัด สมมติว่าตอนนี้คุณต้องการแบ่งสตริงออกเป็นหลาย ๆ ส่วน ลำดับการหยุดพักอาจส่งผลต่อเวลาการทำงานทั้งหมด ตัวอย่างเช่นหากคุณต้องการตัดสตริงอักขระ 20 ตัวที่ตำแหน่ง333และ101010ดังนั้นการตัดครั้งแรกที่ตำแหน่ง333จะมีค่าใช้จ่ายรวม20+17=3720+17=3720 + 17 = 37ขณะทำตำแหน่ง 10 ก่อนจะมีต้นทุนที่ดีกว่า20+10=3020+10=3020 + 10 = 30. ฉันต้องการอัลกอริธึมการเขียนโปรแกรมแบบไดนามิกที่ให้การตัดค้นหาค่าใช้จ่ายขั้นต่ำของการตัดสตริงเป็นm + 1ชิ้นmม.mm+1ม.+1m +1

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

6
เหตุใดจึงไม่สามารถใช้ DFS เพื่อค้นหาเส้นทางที่สั้นที่สุดในกราฟที่ไม่ถ่วง
ฉันเข้าใจว่าการใช้ DFS "ตามที่เป็นอยู่" จะไม่พบเส้นทางที่สั้นที่สุดในกราฟที่ไม่ถ่วง แต่ทำไมการปรับ DFS ให้อนุญาตให้ค้นหาเส้นทางที่สั้นที่สุดในกราฟที่ไม่ได้ถ่วงเช่นโอกาสที่ไร้ความหวัง? ข้อความทั้งหมดในหัวเรื่องระบุเพียงว่าไม่สามารถทำได้ ฉันไม่มั่นใจ (โดยไม่ต้องลองเอง) คุณรู้หรือไม่ว่าการดัดแปลงใด ๆ ที่จะทำให้ DFS ค้นหาเส้นทางที่สั้นที่สุดในกราฟที่ไม่ถ่วง ถ้าไม่มันเกี่ยวกับอัลกอริทึมที่ทำให้มันยากเหลือเกิน

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

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

9
จะหาค่าซ้ำ 5 ในเวลา O (n) ได้อย่างไร
สมมติว่าคุณมีอาร์เรย์ที่มีขนาดที่มีจำนวนเต็มตั้งแต่ถึงโดยรวมโดยมีการซ้ำห้าครั้ง ฉันต้องการที่จะนำเสนอขั้นตอนวิธีการที่สามารถหาตัวเลขที่ซ้ำในเวลา ฉันไม่สามารถคิดในสิ่งใดได้ตลอดชีวิตของฉัน ฉันคิดว่าการเรียงลำดับที่ดีที่สุดจะเป็นหรือไม่ จากนั้นภายในอาร์เรย์จะเป็นส่งผลให้ในlog) อย่างไรก็ตามฉันไม่แน่ใจว่าการเรียงลำดับจะมีความจำเป็นหรือไม่เนื่องจากฉันได้เห็นบางสิ่งที่ยุ่งยากด้วยรายการลิงก์คิวสแต็ก ฯลฯ1 n - 5 O ( n ) O ( n log n ) O ( n ) O ( n 2ล็อกn )n≥6n≥6n \geq 6111n−5n−5n − 5O(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n\log n)O(n)O(n)O(n)O(n2logn)O(n2log⁡n)O(n^2\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') …

4
อัลกอริทึมของ Dijkstra บนกราฟขนาดใหญ่
ฉันคุ้นเคยกับ Dijkstra มากและมีคำถามเฉพาะเกี่ยวกับอัลกอริทึม หากฉันมีกราฟขนาดใหญ่เช่น 3.5 พันโหนด (ข้อมูล OpenStreetMap ทั้งหมด) จากนั้นฉันจะไม่สามารถมีกราฟในหน่วยความจำได้อย่างชัดเจนดังนั้นกราฟจะถูกเก็บไว้ในดิสก์ในฐานข้อมูล มีห้องสมุดสำหรับคำนวณเส้นทางที่สั้นที่สุดบนกราฟดังกล่าว พวกเขาทำเช่นนี้ได้อย่างไร โดยเฉพาะพวกเขาจะโหลดส่วนที่ต้องการของกราฟเพื่อเรียกใช้อัลกอริทึมของ Dijkstra ได้อย่างไร การดึงรายการ adjacency ของแต่ละจุดสุดยอดที่เข้าชมจะต้องใช้ฐานข้อมูล 1,500 แบบสอบถามต่อ 10,000 โหนดตามข้อมูลสถิติของฉันดังนั้นจึงไม่ใช่วิธีการที่ชัดเจน นั่นจะช้าเกินไป พวกเขาทำมันได้อย่างไร? ฉันพยายามที่จะใช้มันด้วยตัวเอง

1
ทดสอบว่าจัตุรมุขอยู่ข้างในรูปทรงหลายเหลี่ยมหรือไม่
ฉันมีจัตุรมุข และรูปทรงหลายหน้าถูก จำกัด เช่นนั้นจะแบ่งปันจุดยอดทั้งหมดกับเสมอ ฉันต้องการตรวจสอบว่าอยู่ภายในหรือไม่p t p t pเสื้อเสื้อt พีพีpเสื้อเสื้อtพีพีpเสื้อเสื้อt พีพีp ฉันต้องการที่จะเพิ่มรายละเอียดในการแก้ไขปัญหาในกรณีที่อาจนำไปสู่การแก้ปัญหา:เป็นDelaunayจัตุรมุขและใบหน้าของเป็นรูปสามเหลี่ยมและขอ Delaunayทั้งที่เกี่ยวกับจุดของพีจัตุรมุขเป็นDelaunayถ้าcircumsphereของจุดของมันไม่มีจุดสุดยอดอื่น ๆ ภายในมัน ใบหน้าเป็นอย่างยิ่ง Delaunayถ้ามี circumsphere ที่มีจุดของใบหน้าที่อยู่บนพื้นผิวของมัน แต่ไม่มีจุดสุดยอดอื่น ๆบนหรือภายในมันp pเสื้อเสื้อtพีพีpพีพีp ตัวเลขต่อไปนี้แสดงปัญหาเดียวกันในพื้นที่ : 2 D2D2D รูปหลายเหลี่ยมเดิมพีพีp : Delaunay การหาจุดยอดของพีพีp : ผลของการทดสอบภายใน / ภายนอกสำหรับสามเหลี่ยมเสื้อเสื้อt p (สามเหลี่ยมแรเงาอยู่ข้างใน และส่วนที่เหลืออยู่ด้านนอก ):พีพีp ผลลัพธ์ที่ต้องการ (การตัดแต่งนอกรูปสามเหลี่ยม) : ปัญหาเดิมของฉันอยู่ในพื้นที่ 3D เพื่อสามเหลี่ยมในข้างต้นตัวเลขแปล Tetrahedrons และรูปหลายเหลี่ยมแปลโดยพลรูปทรงหลายหน้าฉันพบสูตรบางส่วนของปัญหานี้แล้ว:p pเสื้อเสื้อtพีพีpพีพีp สูตร 1 ส่วนเดียวของที่สามารถจะอยู่นอกขอบและใบหน้าสามเหลี่ยม …

1
การสร้างเมทริกซ์ไบนารีไม่เท่ากัน
ฉันกำลังพยายามสร้างเมทริกซ์8 × ไม่เท่ากันทั้งหมด(หรือn × nถ้าคุณต้องการ) ด้วยองค์ประกอบ 0 หรือ 1 การดำเนินการที่ให้เมทริกซ์ที่เท่ากันคือการแลกเปลี่ยนพร้อมกันของแถว i และ j และคอลัมน์ i และ j เช่น. สำหรับ1 ↔ 2 ( 0 0 0 0 1 1 1 0 0 ) ∼ ( 1 0 1 0 0 0 0 0 1 0 )8 × 88×88\times 8n × nn×nn\times …

2
ปัญหาการตัดสินใจใน
อะไรคือตัวอย่างของปัญหาการตัดสินใจที่ยากที่สามารถแก้ไขได้ในเวลาพหุนาม ฉันกำลังมองหาปัญหาที่อัลกอริทึมที่เหมาะสมที่สุดคือ "ช้า" หรือปัญหาที่อัลกอริทึมที่รู้จักกันเร็วที่สุดคือ "ช้า" นี่คือสองตัวอย่าง: การรับรู้กราฟที่สมบูรณ์แบบ ในบทความ FOCS'03 [1] Cornuéjols, Liu และ Vuskovic ให้เวลาอัลกอริธึมสำหรับปัญหาโดยที่nคือจำนวนจุดยอด ฉันไม่แน่ใจว่าขอบเขตนี้ได้รับการปรับปรุงหรือไม่ แต่เมื่อฉันเข้าใจแล้วจำเป็นต้องมีการพัฒนาที่มากขึ้นหรือน้อยลงเพื่อให้ได้อัลกอริทึมที่เร็วขึ้น (ผู้เขียนให้อัลกอริทึมO ( n 9 )เวลาในรุ่นวารสารของ [1] ดูที่นี่ )O ( n10)O(n10)O(n^{10})nnnO ( n9)O(n9)O(n^9) การรับรู้กราฟแผนที่ Thorup [2] ให้อัลกอริทึมที่ค่อนข้างซับซ้อนที่มีสัญลักษณ์เป็น (ประมาณ?) 120บางทีนี่อาจได้รับการปรับปรุงให้ดีขึ้นอย่างมาก แต่ฉันไม่มีการอ้างอิงที่ดี120120120 ฉันสนใจในปัญหาที่มีความสำคัญในทางปฏิบัติและได้รับอัลกอริทึม "เร็ว" (หรือแม้แต่ในทางปฏิบัติ) ได้เปิดเป็นเวลาหลายปี [1] Cornuéjols, Gérard, Xinming Liu และ Kristina Vuskovic "อัลกอริทึมแบบพหุนามสำหรับการจดจำกราฟที่สมบูรณ์แบบ" รากฐานของวิทยาการคอมพิวเตอร์, …

3
ขนาดที่เล็กที่สุดของการทำสัญญา DAG เป็น DAG ใหม่
เรามี DAG เรามีฟังก์ชั่นบนโหนด (พูดอย่างอิสระเรานับจำนวนโหนด) เราต้องการสร้างกราฟกำกับใหม่ด้วยกฎเหล่านี้:F:V→NF:V→ยังไม่มีข้อความF\colon V\to \mathbb N เฉพาะโหนดที่มีหมายเลขเท่ากันเท่านั้นที่สามารถทำการต่อสัญญาในโหนดใหม่เดียวกันได้ Y' (อย่างไรก็ตาม, .)F(x)≠F(y)⇒x′≠y′F(x)≠F(Y)⇒x'≠Y'F(x) \neq F(y) \Rightarrow x' \neq y'x′≠y′⇏F(x)≠F(y)x'≠Y'⇏F(x)≠F(Y)x' \neq y'\nRightarrow F(x) \neq F(y) เราได้เพิ่มทุกขอบเก่าระหว่างโหนดใหม่: (x,y)∈E∧x′≠y′⟺(x′,y′)∈E′(x,Y)∈E∧x'≠Y'⟺(x',Y')∈E'(x,y) \in E \land x' \neq y' \iff (x',y')\in E'E' กราฟใหม่นี้ยังคงเป็น DAG อะไรคือสิ่งที่น้อยที่สุด|V′||V'||V'|? อัลกอริทึมคืออะไรสร้างกราฟใหม่ที่น้อยที่สุด

4
กราฟมีต้นไม้สองสามครั้งที่แตกต่างกันเล็กน้อย?
ฉันกำลังพยายามหาวิธีที่มีประสิทธิภาพในการตรวจสอบว่ากราฟที่ระบุ G มีต้นไม้ทอดข้ามน้อยที่สุดสองแบบหรือไม่ ฉันกำลังพยายามหาวิธีในการตรวจสอบว่ามีต้นไม้ที่ขยายเล็ก ๆ น้อย ๆ 3 แบบหรือไม่ โซลูชันไร้เดียงสาที่ฉันคิดว่ากำลังเรียกใช้อัลกอริทึมของ Kruskal เพียงครั้งเดียวและค้นหาน้ำหนักรวมของต้นไม้ที่ทอดน้อยที่สุด จากนั้นนำขอบออกจากกราฟและเรียกใช้อัลกอริทึมของ Kruskal อีกครั้งและตรวจสอบว่าน้ำหนักของต้นไม้ใหม่นั้นเป็นน้ำหนักของต้นไม้ที่ขยายเล็กสุดดั้งเดิมหรือไม่และสำหรับแต่ละขอบของกราฟ รันไทม์คือ O (| V || E | log | V |) ซึ่งไม่ดีเลยและฉันคิดว่ามีวิธีที่ดีกว่าที่จะทำ ข้อเสนอแนะใด ๆ ที่จะเป็นประโยชน์ขอบคุณล่วงหน้า

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