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

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

3
ความซับซ้อนของการจำพื้นที่ Palindromes Watson-Crick
ฉันมีปัญหาเกี่ยวกับอัลกอริทึมดังต่อไปนี้: กำหนดพื้นที่ความซับซ้อนของทัวริงในการรับรู้สตริงของ DNA คือ Watson-Crick palindromes Watson-Crick palindromes เป็นสตริงที่ส่วนประกอบที่ตรงกันข้ามเป็นสตริงเดิม ส่วนเติมเต็มนั้นถูกกำหนดด้วยตัวอักษรที่ได้รับแรงบันดาลใจจาก DNA: A คือส่วนเติมเต็มของ T และ C คือส่วนเติมเต็มของ G ตัวอย่างง่ายๆสำหรับ WC-palindrome คือ ACGT ฉันคิดวิธีแก้ปัญหานี้สองวิธี หนึ่งต้องพื้นที่O(n)O(n)\mathcal{O}(n) เมื่อเครื่องเสร็จอ่านค่าอินพุทแล้ว เทปอินพุตต้องถูกคัดลอกไปยังเทปงานในลำดับย้อนกลับ เครื่องจะอ่านค่าอินพุตและเทปการทำงานจากด้านซ้ายและเปรียบเทียบแต่ละรายการเพื่อตรวจสอบเซลล์ในเทปงานคือคำชมเชยของเซลล์ในอินพุต นี้ต้องใช้พื้นที่O(n)O(n)\mathcal{O}(n) อื่น ๆ ที่ต้องใช้พื้นที่O(logn)O(log⁡n)\mathcal{O}(\log n) ในขณะที่อ่านอินพุต นับจำนวนรายการในเทปอินพุต เมื่ออ่านเทปเสร็จแล้ว คัดลอกส่วนประกอบของจดหมายไปยังเทปงาน คัดลอกตัวอักษร L ไปยังจุดสิ้นสุดของเทปงาน (จุดลูป) หากตัวนับ = 0 ให้ล้างเวิร์กเทปและเขียนใช่แล้วหยุด หากอินพุตเทปอ่าน L ย้ายหัวอินพุตไปทางซ้ายตามจำนวนครั้งที่ระบุโดยตัวนับ (ต้องใช้ตัวนับที่สอง) หากอินพุตเทปอ่าน R …

3
ข้อผิดพลาดในการใช้สัญลักษณ์ asymptotic
ฉันพยายามที่จะเข้าใจสิ่งที่ผิดกับหลักฐานต่อไปนี้ของการเกิดซ้ำต่อไปนี้ T(n)≤2(c⌊nT(n)=2T(⌊n2⌋)+nT(n)=2T(⌊n2⌋)+n T(n) = 2\,T\!\left(\left\lfloor\frac{n}{2}\right\rfloor\right)+n T(n)≤2(c⌊n2⌋)+n≤cn+n=n(c+1)=O(n)T(n)≤2(c⌊n2⌋)+n≤cn+n=n(c+1)=O(n) T(n) \leq 2\left(c\left\lfloor\frac{n}{2}\right\rfloor\right)+n \leq cn+n = n(c+1) =O(n) เอกสารบอกว่ามันผิดเพราะสมมติฐานอุปนัยที่ ฉันหายไปไหน?T(n)≤cnT(n)≤cn T(n) \leq cn

1
รับสตริงและ CFG อักขระใดบ้างที่สามารถติดตามสตริง (ในรูปแบบประโยคของ CFG)
ให้เป็นชุดของขั้วและชุดของสัญลักษณ์ที่ไม่ใช่ขั้วของบางบริบทฟรีไวยากรณ์GΣΣ\SigmaNยังไม่มีข้อความNGGG บอกว่าฉันมีสายเช่นโดยที่และเป็นรูปแบบที่ sentential ของGa∈(Σ∪N)+a∈(Σ∪N)+a \in (\Sigma \cup N)^+xay∈S(G)xay∈S(G)x a y \in \mathcal{S}(G)x,y∈(Σ∪N)∗x,y∈(Σ∪N)∗x,y\in (\Sigma \cup N)^*S(G)S(G)\mathcal{S}(G)GGG ได้รับ , ฉันต้องการที่จะตรวจสอบชุดC = { B | W ขZ ∈ S ( G ) , ข∈ Σ ∪ N }GGGC={b∣wabz∈S(G),b∈Σ∪N}C={b∣wabz∈S(G),b∈Σ∪N}C = \{ b \mid wabz \in \mathcal{S}(G), b \in \Sigma \cup N \} เพื่อชี้แจงในกรณีนี้คือสตริงของเทอร์มินัลและที่ไม่ใช่เทอร์มินัลและbมีความยาวหนึ่งw,x,y,z,a,bw,x,y,z,a,bw, x, …

2
ค่าคงที่ของลูปที่ได้ในอัลกอริธึมการค้นหาขอบเขตสแควร์รูทเป็นอย่างไร?
มีพื้นเพมาจากmath.SEแต่ยังไม่มีคำตอบ พิจารณาอัลกอริทึมต่อไปนี้ u := 0 v := n+1; while ( (u + 1) is not equal to v) do x := (u + v) / 2; if ( x * x <= n) u := x; else v := x; end_if end_while โดยที่ u, v และ n เป็นจำนวนเต็มและการดำเนินการหารคือการหารจำนวนเต็ม อธิบายสิ่งที่คำนวณโดยอัลกอริทึม ใช้คำตอบของคุณในส่วนที่ฉันเป็นโพสต์เงื่อนไขสำหรับอัลกอริทึมสร้างวงคงที่และแสดงให้เห็นว่าอัลกอริทึมยุติและถูกต้อง …

3
อัลกอริทึมเพื่อทดสอบว่าต้นไม้ไบนารีเป็นต้นไม้ค้นหาและนับสาขาเสร็จสมบูรณ์หรือไม่
ฉันต้องสร้างอัลกอริทึมแบบเรียกซ้ำเพื่อดูว่าต้นไม้ไบนารีเป็นต้นไม้ค้นหาแบบไบนารีรวมทั้งนับจำนวนสาขาที่สมบูรณ์ (โหนดแม่ที่มีโหนดลูกทั้งซ้ายและขวา) พร้อมตัวแปรการนับทั่วโลก นี่คือการมอบหมายสำหรับคลาสโครงสร้างข้อมูลของฉัน จนถึงตอนนี้ฉันมี void BST(tree T) { if (T == null) return if ( T.left and T.right) { if (T.left.data < T.data or T.right.data > T.data) { count = count + 1 BST(T.left) BST(T.right) } } } แต่ฉันไม่สามารถหาอันนี้ได้ ฉันรู้ว่าอัลกอริทึมนี้จะไม่แก้ปัญหาเพราะการนับจะเป็นศูนย์ถ้าที่สองถ้าคำสั่งไม่เป็นความจริง ใครช่วยฉันออกจากนี้

2
อัลกอริทึม Dijkstras ถูกใช้ในระบบค้นหาเส้นทางที่ทันสมัยหรือไม่?
อัลกอริทึมของ Dijkstra ใช้ในระบบค้นหาเส้นทางที่ทันสมัยเช่น Google maps หรือ satnav ในรถยนต์ของคุณหรือไม่? ถ้าไม่เช่นนั้นจะเกิดอะไรขึ้น?

5
การแปลงกราฟไปเป็นกราฟที่ไม่ได้บอกทิศทางด้วยวิธีย้อนกลับได้
ฉันกำลังมองหาอัลกอริทึมในการแปลงดิจิกราฟ (กราฟกำกับ) เป็นกราฟที่ไม่ได้บอกทิศทางในวิธีที่สามารถย้อนกลับได้นั่นคือดิจิกราฟควรจะสร้างใหม่ได้หากเราได้กราฟที่ไม่ได้เปลี่ยนทิศทาง ฉันเข้าใจว่านี่จะเป็นค่าใช้จ่ายของกราฟที่ไม่ได้บอกทิศทางซึ่งมีจุดยอดมากขึ้น แต่ฉันก็ไม่สนใจ มีใครรู้วิธีการทำเช่นนี้หรือสามารถแนะนำการอ้างอิงใด ๆ ขอบคุณล่วงหน้า. อัปเดต: เกี่ยวกับคำตอบของ AdrianN ด้านล่าง อาจเป็นจุดเริ่มต้นที่ดี แต่ฉันไม่คิดว่ามันจะทำงานในรูปแบบปัจจุบัน นี่คือภาพว่าทำไมฉันจึงคิดว่าไม่: อัปเดตหลังจากความคิดเห็นของ DW: ฉันถือว่าจุดยอดของกราฟเป็นแบบไม่มีป้ายกำกับ หากวิธีการแก้ปัญหาเกี่ยวข้องกับการติดฉลากจุดยอด (เช่นเดียวกับที่ AdrianN ทำ) ก็ควรให้กราฟที่ไม่มีการเปลี่ยนทิศทางแบบเดียวกัน คำจำกัดความของ "isomorphic" สำหรับกราฟที่มีเครื่องหมายจุดยอดคือมีการเรียงสับเปลี่ยนของการติดฉลากที่เกี่ยวข้องกับกราฟทั้งสอง แต่ฉันไม่แน่ใจเกี่ยวกับคำจำกัดความที่แน่นอนสำหรับกราฟที่ไม่มีป้ายกำกับ ...

1
จะลดจำนวนจุดตัดขอบในไดอะแกรมได้อย่างไร?
ฉันกำลังทำงานกับโปรแกรมแก้ไขไดอะแกรม ไดอะแกรมแสดงรูปร่าง 2D ( โหนด ) ที่เชื่อมต่อกับตัวเชื่อมต่อ ( ขอบ ) ฉันต้องการที่จะเพิ่มการดำเนินการที่ได้รับการเลือกโหนด"disentangles"พวกเขามัน repositions พวกเขาเพื่อลดจำนวนของการข้ามขอบถ้าเป็นไปได้ (และมันก็โอเคถ้าจะต้องวาดด้วยจุดโค้ง) . ดังนั้นฉันต้องการอัลกอริธึมกราฟที่ให้กราฟ( ทอพอโลยี ) การฝังและเซตย่อยของโหนดของมันปรับเปลี่ยนการฝัง ( โทโพโลยีของมัน) บนโหนดเหล่านั้นเท่านั้นเพื่อลดจำนวนของการข้ามขอบ จากการอ่านเกี่ยวกับกราฟยอดและการเรียกดูCabello และ Mohar (2013)ฉันคิดว่าปัญหานี้เป็นปัญหาที่ยาก ดังนั้นฉันจะมีความสุขกับอัลกอริทึม parametrized (เช่นจำนวนข้ามขอบ) ที่มีความซับซ้อนรู้จักพหุนามเวลาที่ซับซ้อนสำหรับค่าพารามิเตอร์ที่กำหนด ดูเหมือนว่าจะเป็นไปได้ แต่ฉันคิดว่ามันไม่ง่ายเลยที่จะคิดอัลกอริธึมด้วยตัวเอง คำถาม: ฉันจะหาอัลกอรึทึมได้ที่ไหน มันมีอยู่หรือไม่ ในซอฟต์แวร์ที่มีอยู่ มีประสบการณ์ในทางปฏิบัติที่สำคัญกับการปฏิบัติการเช่นนี้หรือไม่ (สิ่งที่ดูดีในทางทฤษฎีอาจไม่ดีในทางปฏิบัติหรือในทางกลับกัน) (ฉันไม่แน่ใจว่าจะถามคำถามนี้ที่ไหนดีที่สุด: ที่นี่ใน StackOverflow หรือ MathOverflow?)

5
อัลกอริทึมที่มีประสิทธิภาพคืออะไร?
จากมุมมองของพฤติกรรมแบบซีมโทติควิธีใดที่ถือว่าเป็น "ประสิทธิภาพ" อัลกอริทึม? มาตรฐาน / เหตุผลในการวาดเส้นตรงนั้นคืออะไร? โดยส่วนตัวแล้วฉันคิดว่าอะไรก็ตามที่เป็นสิ่งที่ฉันเรียกว่า "พหุนามย่อย" อย่างไร้เดียงสาเช่นนั้นฉ( n ) = o (n2)f(n)=o(n2)f(n) = o(n^2) เช่น n1 + ϵn1+ϵn^{1+\epsilon} จะมีประสิทธิภาพและอะไรก็ตามที่เป็น Ω (n2)Ω(n2)\Omega(n^2)จะเป็น "ไม่มีประสิทธิภาพ" อย่างไรก็ตามฉันได้ยินอะไรก็ตามที่มีคำสั่งพหุนามเรียกว่ามีประสิทธิภาพ อะไรคือเหตุผล

2
ตัวอย่างที่อัลกอริทึม Knuth-Morris-Pratt เร็วกว่า Boyer-Moore?
หน้านี้เกี่ยวกับอัลกอริทึม Knuth-Moriss-Pratt เทียบกับ Boyer-Moore อธิบายกรณีที่เป็นไปได้ที่อัลกอริทึม Boyer-Moore ทนทุกข์ทรมานจากระยะทางข้ามขนาดเล็กในขณะที่ KMP สามารถทำงานได้ดีขึ้น ฉันกำลังมองหาตัวอย่างที่ดี (ข้อความรูปแบบ) ที่สามารถแสดงให้เห็นถึงกรณีนี้ได้อย่างชัดเจน

1
ฉันจะสร้างรายการขอบที่เชื่อมต่อเป็นสองเท่าได้อย่างไรเมื่อได้รับชุดของส่วนของเส้น
สำหรับระนาบกราฟกราฟที่กำหนดฝังอยู่ในระนาบกำหนดโดยชุดของส่วนของบรรทัดแต่ละเซกแสดงด้วยจุดปลาย\} สร้างโครงสร้างข้อมูล DCEL สำหรับส่วนภาพถ่ายอธิบายขั้นตอนวิธีพิสูจน์ความถูกต้องและแสดงความซับซ้อนG(V,E)G(V,E)G(V,E)E={e1,...,em}E={e1,...,em}E= \left \{ e_1,...,e_m \right \} eieie_i{Li,Ri}{Li,Ri}\left \{ L_i,R_i \right \} ตามคำอธิบายนี้ของโครงสร้างข้อมูล DCELมีการเชื่อมต่อมากมายระหว่างวัตถุต่าง ๆ (เช่นจุดยอด, ขอบและใบหน้า) ของ DCEL ดังนั้น DCEL ดูเหมือนจะสร้างและบำรุงรักษาได้ยาก คุณรู้จักอัลกอริธึมที่มีประสิทธิภาพซึ่งสามารถใช้สร้างโครงสร้างข้อมูล DCEL ได้หรือไม่?

2
ค้นหาการสั่งซื้อที่ดีที่สุด
ฉันเจอปัญหานี้และกำลังดิ้นรนเพื่อหาวิธีแก้ไข ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก! สมมติว่าเราได้รับเมทริกซ์ตัวอย่างเช่น{ - 1 , 0 , 1}n × k {−1,0,1}n × k\{-1, 0, 1\}^{n\ \times\ k} ⎡⎣⎢⎢⎢⎢⎢⎢1- 10- 11001- 101010000010- 11- 11- 1⎤⎦⎥⎥⎥⎥⎥⎥[1010−1−100010110−1−1−10111000−1]\begin{bmatrix} 1 & 0 & 1 & 0 & -1 \\ -1 & 0 & 0 & 0 & 1 \\ 0 & 1 …

1
วิธีการเพิ่ม
ฉันเห็นปัญหาอัลกอริทึมมากมายที่มักจะลดสิ่งต่อไปนี้เป็นแนวยาว: คุณมีอาร์เรย์จำนวนเต็มh[1..n]≥0h[1..n]≥0h[1..n]\geq 0คุณต้องไปหา i,ji,ji,j อย่างนั้น (h[j]−h[i])(j−i)(h[j]−h[i])(j−i)(h[j]-h[i])(j-i) ใน O(n)O(n)O(n) เวลา. เห็นได้ชัดว่า O(n2)O(n2)O(n^2) การแก้ปัญหาเวลาคือการพิจารณาทุกคู่อย่างไรก็ตามมีวิธีที่เราสามารถเพิ่มการแสดงออก O(n)O(n)O(n) โดยไม่ทราบอย่างอื่นเกี่ยวกับคุณสมบัติของ hhh? หนึ่งความคิดที่ฉันคิดคือการแก้ไข jjjจากนั้นเราต้องค้นหา i∗i∗i^* จาก 111 ถึง j−1j−1j-1 นั่นเท่ากับ argmaxi{(h[j]−h[i])(j−i)}argmaxi{(h[j]−h[i])(j−i)}\text{argmax}_i\{(h[j]-h[i])(j-i)\} หรือ argmaxi{h[j]j−h[j]i−h[i]j+h[i]i}argmaxi{h[j]j−h[j]i−h[i]j+h[i]i}\text{argmax}_i\{h[j]j-h[j]i-h[i]j+h[i]i\} และตั้งแต่ jjj ได้รับการแก้ไขแล้วเราต้องการ argmaxi{−h[j]i−jh[i]+ih[i]}argmaxi{−h[j]i−jh[i]+ih[i]}\text{argmax}_i\{-h[j]i-jh[i]+ih[i]\}. อย่างไรก็ตามฉันไม่เห็นวิธีที่จะกำจัด jjjเงื่อนไขที่ขึ้นอยู่กับภายใน ความช่วยเหลือใด ๆ

1
มีอัลกอริธึมที่มีประสิทธิภาพสำหรับการพิจารณาว่ากราฟมีออโต้มอร์ฟิซึ่มเล็กน้อยหรือไม่?
ฉันกำลังทำงานกับปัญหาที่เกี่ยวข้องกับละตินสแควร์สและฉันต้องการวิธีการที่จำเป็นอย่างยิ่งในการตัดสินใจปัญหา: การป้อนข้อมูล : การ จำกัด กราฟง่ายกรัม เอาท์พุท : YESถ้า G มี automorphism ไม่น่ารำคาญNOเป็นอย่างอื่น ดังนั้น ... คำถาม : มีอัลกอริธึมที่มีประสิทธิภาพสำหรับการพิจารณาว่ากราฟมีออโต้มอร์ฟิซึ่มเล็กน้อยหรือไม่? เราสามารถใช้ Nauty หรือ Bliss (และแพ็คเกจอื่น ๆ ) เพื่อคำนวณกลุ่ม automorphism ทั้งหมด แต่ฉันไม่ต้องการ สิ่งที่ฉันต้องพิจารณาก็คือมันไม่สำคัญหรือไม่ เป็นไปได้ว่าปัญหาการตัดสินใจนี้มีความซับซ้อนทางทฤษฎีเทียบเท่ากับ "การคำนวณกลุ่มออโตมอร์ฟิซึมทั้งหมด" ในทางใดทางหนึ่ง ฉันไม่แน่ใจ. สำหรับจุดประสงค์ของฉัน "ประสิทธิภาพ" โดยทั่วไปหมายถึง "เร็วกว่าในทางปฏิบัติมากกว่าการคำนวณกลุ่ม automorphism ทั้งหมด" แต่ฉันก็สนใจในทฤษฎีที่อยู่เบื้องหลัง

2
การนับหมู่เกาะในเมทริกซ์บูลีน
ได้รับ n × mn×ม.n \times m บูลีนเมทริกซ์ XX\mathrm X, ปล่อย 000 รายการเป็นตัวแทนของทะเลและ 111รายการหมายถึงที่ดิน กำหนดเกาะเป็นแนวตั้งหรือแนวนอน (แต่ไม่ใช่แนวทแยงมุม) ที่อยู่ติดกัน111 รายการ. คำถามเดิมคือการนับจำนวนเกาะในเมทริกซ์ที่กำหนด ผู้เขียนอธิบายถึงวิธีแก้ปัญหาแบบเรียกซ้ำ (O (nm)O(nม.)\mathcal{O}(nm) หน่วยความจำ) แต่ฉันไม่ประสบความสำเร็จในการพยายามหาวิธีการสตรีม (จากซ้ายไปขวาและจากนั้นลงไปที่แถวถัดไป) โซลูชันที่นับเกาะแบบไดนามิกด้วย O (m)O(ม.)\mathcal{O}(m) หรือ O (n)O(n)\mathcal{O}(n) หรือ O (n+m)O(n+ม.)\mathcal{O}(n+m)หน่วยความจำ (ไม่มีข้อ จำกัด สำหรับความซับซ้อนของเวลา) เป็นไปได้ไหม ถ้าไม่ฉันจะพิสูจน์ได้อย่างไร ตัวอย่างของเอาต์พุตที่คาดไว้สำหรับอินพุตบางอย่างสำหรับcountฟังก์ชัน: c o u n t⎛⎝⎜010111010⎞⎠⎟= 1 ; c o u n …

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