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

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

4
PRNG สำหรับสร้างตัวเลขด้วย n บิตตั้งค่า
ฉันกำลังเขียนโค้ดบางส่วนเพื่อสร้างข้อมูลไบนารี ฉันต้องการสร้างหมายเลข 64 บิตด้วยจำนวนบิตที่กำหนดโดยเฉพาะ แม่นยำยิ่งขึ้นขั้นตอนควรใช้เวลาและส่งกลับตัวเลข 64 บิตหลอกเทียมด้วยบิตตั้งค่าเป็นและส่วนที่เหลือตั้งค่าเป็น 00&lt;n&lt;640&lt;n&lt;640 < n < 64nnn111 แนวทางปัจจุบันของฉันเกี่ยวข้องกับสิ่งนี้: สร้าง pseudorandom 64 บิตจำนวนkkkk นับบิตในจัดเก็บผลในขkkkbbb ถ้า , เอาต์พุต ; มิฉะนั้นไปที่ 1b=nb=nb = nkkk ใช้งานได้ แต่ดูเหมือนไม่เหมาะสม มีอัลกอริธึม PRNG บางประเภทที่สามารถสร้างตัวเลขด้วยบิตเซตยิ่งกว่านี้หรือไม่?nnn

2
กรณีพิเศษของปัญหาการตั้งเวลาสามารถแก้ไขได้ในเวลาเชิงเส้นหรือไม่?
อลิซนักเรียนทำการบ้านมากมายในสัปดาห์หน้า การบ้านแต่ละรายการจะใช้เวลาหนึ่งวัน แต่ละรายการมีกำหนดเวลาและผลกระทบทางลบต่อผลการเรียนของเธอ (สมมติว่าเป็นจำนวนจริงคะแนนโบนัสสำหรับการเปรียบเทียบเท่านั้น) หากเธอพลาดกำหนดเวลา เขียนฟังก์ชั่นที่ให้รายการของ (กำหนดเวลาผลกระทบระดับคะแนน) กำหนดตารางเวลาสำหรับการทำการบ้านในวันที่ลดผลรวมของผลกระทบที่ไม่ดีต่อเกรดของเธอ การบ้านทั้งหมดจะต้องทำในที่สุด แต่ถ้าเธอพลาดกำหนดเวลาสำหรับรายการมันไม่สำคัญว่าเธอจะเปิดช้าแค่ไหน ในสูตรทางเลือก: ACME corp ต้องการส่งน้ำให้กับลูกค้า พวกเขาทั้งหมดอาศัยอยู่ตามถนนสายเดียว ACME มีหลุมหลายแห่งกระจายอยู่ตามถนน แต่ละบ่อมีน้ำเพียงพอสำหรับลูกค้าหนึ่งราย ลูกค้าเสนอราคาเป็นจำนวนเงินที่แตกต่างกัน น้ำไหลลงเขาเท่านั้น เพิ่มรายได้ให้สูงสุดด้วยการเลือกลูกค้าที่จะจัดหา เราสามารถจัดเรียงกำหนดเวลาโดยใช้การจัดเรียงกลุ่ม (หรือสมมติว่าเราได้เรียงลำดับตามกำหนดเวลาแล้ว) เราสามารถแก้ปัญหาได้อย่างง่ายดายด้วยอัลกอริธึมโลภหากเราจัดเรียงโดยการกระทบจากระดับสูงสุดก่อน ทางออกนั้นจะไม่ดีไปกว่า O (n log n) ได้รับแรงบันดาลใจจากMedian of MediansและอัลกอริทึมSpanning Tree แบบขั้นต่ำแบบเส้นตรงฉันสงสัยว่าเราสามารถแก้ปัญหาการตั้งเวลา / การไหลแบบง่าย ๆ ของฉันในเวลาเชิงเส้น (แบบสุ่ม?) ได้เช่นกัน ฉันกำลังมองหา: อัลกอริทึมเวลาเชิงเส้น (อาจสุ่ม) หรือมิฉะนั้นก็โต้แย้งว่าไม่สามารถใช้เวลาเชิงเส้นได้ ในฐานะที่เป็นหินก้าว: ฉันได้พิสูจน์แล้วว่าเพิ่งรู้ว่ารายการใดที่สามารถทำได้ก่อนกำหนดเวลาของพวกเขาเพียงพอที่จะสร้างตารางเวลาที่สมบูรณ์ในเวลาเชิงเส้น (ข้อมูลเชิงลึกนั้นเป็นรากฐานของสูตรที่สองที่ฉันถามเกี่ยวกับใบรับรองเท่านั้น) โปรแกรมเชิงเส้นตรง (integral!) สามารถจำลองปัญหานี้ได้ …


1
แก้ไขระยะทางของรายการด้วยองค์ประกอบเฉพาะ
Levenshtein-Distance ระยะทางแก้ไขระหว่างรายการเป็นปัญหาที่ศึกษากันดี แต่ฉันไม่สามารถหามากเกี่ยวกับการปรับปรุงไปได้ถ้า มันเป็นที่รู้จักกันว่าองค์ประกอบไม่มีไม่เกิดขึ้นมากกว่าหนึ่งครั้งในแต่ละรายการ ลองสมมติว่าองค์ประกอบนั้นสามารถเปรียบเทียบได้ / เรียงลำดับได้ (แต่รายการที่จะเปรียบเทียบจะไม่เรียงลำดับเพื่อเริ่มต้นด้วย) O(min(m,n)s)O(min(m,n)s)O(\min(m,n)s)O(min(s,m,n)s)O(min(s,m,n)s)O(\min(s,m,n)s)sss เป็นทางการมากขึ้น เราสามารถคำนวณระยะทางในการแก้ไขระหว่างสองสายที่กำหนด มีประสิทธิภาพด้วยคำสัญญาที่ว่าพวกเขาไม่มีตัวอักษรซ้ำ ๆ กันหรือไม่?s,t∈Σ∗s,t∈Σ∗s,t \in \Sigma^* ΣΣ\Sigmaเป็นตัวอักษรที่มีขนาดใหญ่มาก

1
ปัญหา NP-Complete ใดที่มีอัลกอริทึมที่รู้จักกันเร็วที่สุด
ในแง่ของ runtime แบบ asymptotic ที่เลวร้ายที่สุดปัญหา NP-complete ใดที่มีอัลกอริทึม (แน่นอน) ที่รู้จักกันเร็วที่สุดและอัลกอริทึมคืออะไร มีบางสิ่งที่รู้ไหมว่าเร็วกว่า ?O(n2∗2n)O(n2∗2n)O(n^2*2^n)

9
อัลกอริทึมคืออะไร?
ฉันรู้ว่านี่อาจฟังดูแปลกไปหน่อยในความเป็นจริงฉันเคยคิดเสมอในกล่อง แต่เมื่อเร็ว ๆ นี้ฉันได้คิดว่าอาจเป็นเพราะวิทยาการคอมพิวเตอร์ให้อิสระในระดับสูงเกี่ยวกับวิธีการประดิษฐ์โปรแกรมอื่นที่ไม่ใช่ สิ่งที่สอนในมหาวิทยาลัย พิจารณาฟังก์ชันแฟกทอเรียล โดยทั่วไปแล้วเรากำหนดฟังก์ชั่นนี้เช่น int fact(int n) { int r = 1; for(int i=2;i&lt;=n;i++) r = r*i; return r; } ฉันจะเรียกมันว่าอัลกอริทึมและไม่ต้องสงสัยเลยว่านี่เป็นวิธีที่ถูกต้องที่จะทำ จากนั้นฉันสงสัยว่า "ฉันสามารถทำสิ่งนี้ในเวลาคงที่ได้หรือไม่" ซึ่งปล่อยให้แนวคิดต่อไปนี้เกิดอะไรขึ้นถ้าฉันมีอาร์เรย์ของจำนวนเต็มโดยที่อาร์เรย์ [n] เป็นบ้านของแฟคทอเรียลของ n? เมื่ออาร์เรย์นี้เต็มไปฉันสามารถนิยามข้อเท็จจริงได้ดังนี้ int fact(int n) { return array[n]; } ถึงกระนั้นฉันก็ไม่สามารถคิดอัลกอริทึมนี้ได้แม้ว่ามันจะให้ผลลัพธ์ที่ถูกต้องและทำงานในเวลาคงที่ O (1) สิ่งนี้เรียกว่าอัลกอริทึมหรือไม่? มิฉะนั้นทำไมไม่ ฉันอาจโต้เถียงว่าการเติมอาร์เรย์จะต้องใช้อัลกอริทึมในการดำเนินการในบางครั้งแม้ว่ามันจะอยู่ในสมองของเราเพื่อให้เราสามารถเติมอาร์เรย์ได้ แต่นี่อาจเป็นเกณฑ์หรือไม่? ลักษณะเหล่านี้มีการจัดการอย่างเป็นทางการอย่างไร โปรดทราบว่าแนวคิดนี้สามารถขยายไปยังฟังก์ชั่นใด ๆ ที่ทำงานบนจำนวนเต็มอิสระของจำนวนข้อโต้แย้งของมันฉันจะต้องใช้เมทริกซ์ถ้าฟังก์ชั่นมี 2 …
12 algorithms 

3
Multicore SAT Solver
ฉันกำลังพยายามที่จะแก้ปัญหา SAT ข้อ 25k 5k เนื่องจากมันทำงานมาเป็นเวลาหนึ่งชั่วโมง (precosat) และฉันต้องการแก้ปัญหาที่ใหญ่กว่าหลังจากนั้นฉันกำลังมองหา SAT-Solver แบบมัลติคอร์ ดูเหมือนว่าจะมี SAT-Solvers หลายคนฉันจึงค่อนข้างแพ้ ใครช่วยชี้ให้ฉันดีที่สุดสำหรับกรณีของฉัน ฉันก็จะมีความสุขถ้ามีคนให้เวลาฉันโดยประมาณ (ถ้าเป็นไปได้)

2
อัลกอริทึมการติดฉลากเวลาเชิงเส้นสำหรับต้นไม้หรือไม่?
ฉันมีต้นไม้ที่ไม่มีทิศทางซึ่งมีจุดสูงสุดที่ฉันต้องการติดป้าย โหนดใบไม้ควรมีป้ายกำกับหนึ่งรายการ จากนั้นสมมติว่าใบถูกลบออก ในต้นไม้ที่เหลือใบควรจะติดป้ายที่สอง กระบวนการนี้จะดำเนินต่อไปในลักษณะที่ชัดเจนจนกระทั่งจุดยอดทั้งหมดมีป้ายกำกับ เหตุผลที่ฉันทำเช่นนี้คือฉันต้องการเก็บจุดยอดในคิวและผ่านพวกเขา "ทิ้งก่อน" มีวิธีง่าย ๆ ในการทำเวลาO(n+m)O(n+m)O(n+m)นี้หรือไม่? ฉันสามารถแก้ปัญหาด้วยการทำ BFS ในทุกขั้นตอน แต่ในกรณีที่เลวร้ายที่สุดในทุกขั้นตอนที่ฉันไปถึงจุดสุดยอดทุกอันให้เอาใบสองใบออกและเข้าพวกเขา ฉันเชื่อว่านี่ใช้เวลากำลังสอง อีกแนวคิดหนึ่งคือค้นหาใบทั้งหมดก่อนแล้วจึงทำ BFS จากทุก ๆ ใบ นี่ไม่ได้ให้ทางออกที่ต้องการแก่ฉัน ตัวอย่างเช่นลองพิจารณา "กราฟรูปทรงมงกุฎ" ดังในรูปด้านล่าง โซลูชั่นที่ต้องการแสดงขึ้น แต่การเปิดตัว BFS จากแต่ละใบไม้จะทำให้มีการใช้ป้ายกำกับเพียงสองป้ายเท่านั้น อุดมคติแล้วอัลกอริธึมเชิงเส้นเวลาก็จะอธิบายและนำไปปฏิบัติได้ง่าย
12 algorithms  trees 

2
ปูกระเบื้องรูปหลายเหลี่ยมแบบมุมฉากพร้อมกำลังสอง
ให้รูปหลายเหลี่ยมแบบมุมฉาก (รูปหลายเหลี่ยมที่ด้านข้างขนานกับแกน) ฉันต้องการค้นหาชุดสี่เหลี่ยมจัตุรัสที่แยกกันไม่ออกซึ่งมีขนาดเล็กที่สุดซึ่งสหภาพมีรูปหลายเหลี่ยมเท่ากับ ฉันพบการอ้างอิงหลายอย่างเกี่ยวกับปัญหาที่แตกต่างกันเล็กน้อยเช่น: ครอบคลุมรูปหลายเหลี่ยมมุมฉากที่มีสี่เหลี่ยม - คล้ายกับปัญหาของฉัน แต่สี่เหลี่ยมครอบคลุมได้รับอนุญาตให้ทับซ้อนกัน ปัญหานี้มีวิธีแก้ปัญหาพหุนาม ( Aupperle, Conn, Keil และ O'Rourke, 1988 ; Bar-Yehuda และ Ben-Hanoch, 1996 ) ปูกระเบื้อง / ย่อยสลาย / แบ่งรูปหลายเหลี่ยมตั้งฉากกับรูปสี่เหลี่ยม ปัญหานี้มีวิธีแก้ปัญหาพหุนาม ( Keil, 2000 ; Eppstein, 2009 ) ครอบคลุมรูปหลายเหลี่ยมมุมฉากที่มีรูปสี่เหลี่ยมผืนผ้า - ปัญหานี้เป็นที่รู้จักกันว่า NP- สมบูรณ์ ( Culberson และ Reckhow, 1988 ) ฉันกำลังมองหาอัลกอริทึมสำหรับน้อยที่สุดการปูกระเบื้องที่มีสี่เหลี่ยม

3
มีการทดสอบที่มีประสิทธิภาพหรือไม่หาก NFA ยอมรับชุดย่อยของ NFA อื่นหรือไม่
ดังนั้นฉันรู้ว่าการทดสอบว่าภาษาปกติเป็นชุดย่อยของภาษาปกติสามารถถอดรหัสได้เนื่องจากเราสามารถแปลงทั้งสองเป็น DFA ได้คำนวณแล้วทดสอบว่าภาษานี้ว่างเปล่าหรือไม่RRRSSSR∩S¯R∩S¯R \cap \bar{S} อย่างไรก็ตามเนื่องจากสิ่งนี้ต้องการการแปลงเป็น DFA จึงเป็นไปได้ที่ DFAs และดังนั้นขั้นตอนวิธีการทดสอบจะเป็นแบบเอ็กซ์โปเนนเชียลในแง่ของจำนวนรัฐในอินพุต NFA มีวิธีที่รู้จักกันในการทำสิ่งนี้ในเวลาพหุนามหรือไม่? โดยทั่วไปปัญหานี้ได้รับการพิสูจน์แล้วว่า Co-NP เสร็จสมบูรณ์หรือไม่ โปรดทราบว่าปัญหาอยู่ใน Co-NP ตั้งแต่คำรับการยอมรับจากแต่ไม่ได้โดยจะเป็นผู้รับรองว่าพหุนามSRRRSSSR⊈SR⊈SR \not \subseteq S แก้ไข: สิ่งนี้ไม่ถูกต้องเนื่องจากไม่มีการรับประกันว่าคำดังกล่าวจะเป็นพหุนามในจำนวนสถานะ

3
การค้นหาองค์ประกอบที่เกิดขึ้นมากที่สุดในไฟล์ที่มีขนาดใหญ่มาก
ฉันได้ยินคำถามสัมภาษณ์นี้ถามมากและฉันหวังว่าจะได้รับความคิดเห็นเกี่ยวกับคำตอบที่ดี: คุณมีไฟล์ขนาดใหญ่ 10+ GB และคุณต้องการค้นหาว่าองค์ประกอบใดที่เกิดขึ้นมากที่สุดวิธีที่ดีคืออะไร เพื่อทำสิ่งนี้? การวนซ้ำและการติดตามในแผนที่อาจไม่ใช่ความคิดที่ดีเนื่องจากคุณใช้หน่วยความจำจำนวนมากและการติดตามเนื่องจากรายการที่เข้ามาไม่ใช่ตัวเลือกที่ดีที่สุดเนื่องจากเมื่อคำถามนี้ถูกวางไฟล์โดยทั่วไปแล้ว ความคิดอื่น ๆ ที่ฉันได้รวมแยกไฟล์ที่จะทำซ้ำผ่านและประมวลผลโดยหลายกระทู้แล้วมีผลเหล่านั้นรวมกัน แต่ปัญหาหน่วยความจำสำหรับแผนที่ยังคงมี

4
เปรียบเทียบจำนวนตรรกยะ
ได้รับ, B , C , D ∈ NและB , D ∉ { 0 } ,a,b,c,d∈Na,b,c,d∈Na,b,c,d \in \mathbb Nb,d∉{0}b,d∉{0}b,d \notin \{0\} ab&lt;cd⟺ad&lt;cbab&lt;cd⟺ad&lt;cb \begin{eqnarray*} \frac a b < \frac c d &\iff& ad < cb \end{eqnarray*} คำถามของฉันคือ: ได้รับ, B , C , Da,b,c,da,b,c,da,b,c,d สมมติว่าเราสามารถตัดสินใจx&lt;y∈Zx&lt;y∈Zx < y \in \mathbb ZในO(|x|+|y|)O(|x|+|y|)\mathcal{O}(|x| +|y|)จะมีวิธีของการตัดสินใจใด ๆd &lt; …

2
Minimal Spanning Tree พร้อมพารามิเตอร์น้ำหนักสองเท่า
พิจารณากราฟE) ขอบแต่ละมีสองน้ำหนักและB_eค้นหาต้นไม้ทอดที่ช่วยลดสินค้าขวา) อัลกอริทึมควรทำงานในเวลาพหุนามเกี่ยวกับ.G(V,E)G(V,E)G(V,E)A e B e ( ∑ e ∈ T A e ) ( ∑ e ∈ T B e ) | V | , | E |eeeAeAeA_eBeBeB_e(∑e∈TAe)(∑e∈TBe)(∑e∈TAe)(∑e∈TBe)\left(\sum_{e \in T}{A_e}\right)\left(\sum_{e \in T}{B_e}\right)|V|,|E||V|,|E||V|, |E| ฉันคิดว่ามันยากที่จะปรับแต่งอัลกอริธึมดั้งเดิมใด ๆ บนต้นไม้ที่ทอด (Kruskal, Prim, Edge-Deletion) วิธีแก้ปัญหา คำใบ้ใด ๆ

2
การสร้างกราฟใหม่จากการแจกแจงระดับ
จากการแจกแจงองศาเราจะสร้างกราฟที่ตามหลังการแจกแจงปริญญาได้เร็วแค่ไหน? ลิงค์หรืออัลกอริทึมร่างจะดี อัลกอริทึมควรรายงานกรณี "ไม่" ไม่สามารถสร้างกราฟและตัวอย่างใด ๆ ก็ได้หากสามารถสร้างกราฟได้หลายกราฟ

1
เกี่ยวกับอัลกอริทึมการลดของ Codd
อัลกอริธึมของ Coddแปลงนิพจน์ในแคลคูลัสเชิงสัมพันธ์ tuple เป็นพีชคณิตเชิงสัมพันธ์ มีการใช้อัลกอริทึมแบบมาตรฐานหรือไม่? อัลกอริทึมนี้ถูกใช้งานทุกที่หรือไม่? (ดูเหมือนว่าอุตสาหกรรมต้องการเพียง SQL และตัวแปรเท่านั้นฉันไม่แน่ใจเกี่ยวกับทฤษฎีฐานข้อมูลในสถาบันการศึกษา) ความซับซ้อนของการลดคืออะไร? สิ่งนี้ถูกโพสต์บนSOเมื่อกว่าปีที่แล้ว แต่มันไม่ได้รับคำตอบที่ดี

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