คำถามติดแท็ก algorithm-analysis

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

3
ทำไมไม่ลองแสดงตัวเลขในอัลกอริธึมเชิงตัวเลข?
อัลกอริธึมเวลาแบบหลอกเทียมคืออัลกอริธึมที่มีเวลาทำงานพหุนามกับค่าอินพุต (ขนาด) แต่เวลาทำงานแบบเอ็กซ์โพเนนเชียลตามขนาดอินพุต (จำนวนบิต) ตัวอย่างเช่นการทดสอบว่าตัวเลขnnnเป็นจำนวนเฉพาะหรือไม่ต้องการวนซ้ำผ่านตัวเลขตั้งแต่ 2 ถึงn−1n−1n-1และตรวจสอบว่าnnn mod iiiเป็นศูนย์หรือไม่ หากตัวดัดแปลงใช้เวลา O (1) ความซับซ้อนของเวลาโดยรวมจะเป็น O (n) แต่ถ้าเราปล่อยให้xxxเป็นจำนวนบิตที่ต้องการในการเขียนอินพุตดังนั้นx=lognx=log⁡nx = \log n (ไบนารี) ดังนั้นn=2xn=2xn = 2^xและเวลาการทำงานของปัญหาจะเป็น O ( 2x2x2^x ) ซึ่งเป็นเลขชี้กำลัง คำถามของฉันคือถ้าเราพิจารณาการเป็นตัวแทนของอินพุตnnn , ดังนั้นเสมอแล้วเวลาx=nx=nx=nหลอก - พหุนามจะเท่ากับความซับซ้อนของเวลาพหุนาม เหตุใดเราจึงไม่ทำเช่นนี้ ยิ่งไปกว่านั้นเนื่องจากมีอัลกอริธึมเวลาหลอกเทียมสำหรับเป้โดยใช้x=nx=nx=n , เป้จะเป็นพหุนามเป็นผลลัพธ์ P = NP

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

6
การหาค่า XOR สูงสุดของตัวเลขสองตัวในช่วงเวลาหนึ่ง: เราจะทำได้ดีกว่าสมการกำลังสองหรือไม่?
สมมติว่าเรากำลังได้รับสองหมายเลขและและที่เราต้องการที่จะหาสำหรับL \ le i, \, J \ le Rlllrrrmax(i⊕j)max(i⊕j)\max{(i\oplus j)}l≤i,j≤rl≤i,j≤rl\le i,\,j\le r อัลกอริทึมnaïveเพียงตรวจสอบคู่ที่เป็นไปได้ทั้งหมด เช่นในทับทิมเรามี: def max_xor(l, r) max = 0 (l..r).each do |i| (i..r).each do |j| if (i ^ j > max) max = i ^ j end end end max end ฉันรู้สึกว่าเราสามารถทำได้ดีกว่าสมการกำลังสอง มีอัลกอริทึมที่ดีกว่าสำหรับปัญหานี้หรือไม่?

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
การเลือกแบบสุ่ม
อัลกอริทึมการเลือกแบบสุ่มมีดังต่อไปนี้: อินพุต: อาร์เรย์ของ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
การวิเคราะห์เวลาอัลกอริทึม“ ขนาดอินพุต” กับ“ องค์ประกอบอินพุต”
ฉันยังสับสนอยู่บ้างกับคำว่า "ความยาวขาเข้า" และ "ขนาดอินพุต" เมื่อใช้ในการวิเคราะห์และอธิบายขอบเขตบนที่ไม่มีอาการสำหรับอัลกอริทึม ดูเหมือนว่าความยาวของอัลกอริทึมนั้นขึ้นอยู่กับชนิดของข้อมูลจำนวนมากและอัลกอริทึมที่คุณกำลังพูดถึง ผู้เขียนบางคนอ้างถึงความยาวอินพุตกับขนาดของอักขระที่ต้องใช้เพื่อแสดงอินพุตดังนั้น "abcde" หากใช้เป็นชุดอินพุตในอัลกอริทึมจะมี "ความยาวอินพุต" 6 ตัว หากแทนที่จะเป็นตัวอักษรเรามีจำนวน (เช่นจำนวนเต็ม) บางครั้งการแทนแบบไบนารี่จะใช้แทนตัวอักษรดังนั้น "ความยาวอินพุต" จะถูกคำนวณเป็น (เป็น L เป็นจำนวนสูงสุดในชุดอินพุต)ยังไม่มีข้อความ∗ l o g( L )N∗log(L)N*log(L) มีปัญหาอื่น ๆ ที่แม้ว่าชุดอินพุตเป็นตัวเลข แต่พวกเขาอธิบาย "ความยาวอินพุต" เป็น "ตัวแปรการตัดสินใจ" ดังนั้นสำหรับชุดอินพุตความยาว N ที่มีตัวเลขในช่วงความยาวอินพุตนั้นคือ เพียงแค่ N (ผลรวมย่อยเช่น) หรือยิ่งซับซ้อนจำนวนของค่าสถานที่ไบนารีที่ใช้ในการระบุปัญหา (สิ่งที่ฉันเชื่อว่าเป็นเพียงเช่นเดียวกับ ) N ∗ l o g ( L )0 - …

2
ความซับซ้อนของเวลาของการวนซ้ำสามชั้น
โปรดพิจารณาการวนซ้ำสามชั้นต่อไปนี้: for (int i = 1; i &lt;= n; ++i) for (int j = i; j &lt;= n; ++j) for (int k = j; k &lt;= n; ++k) // statement คำสั่งที่นี่จะถูกดำเนินการอย่างแน่นอนn(n+1)(n+2)6n(n+1)(n+2)6n(n+1)(n+2)\over6ครั้ง ใครช่วยอธิบายหน่อยได้ไหมว่าสูตรนี้ได้มาอย่างไร ขอขอบคุณ.

3
การพูดว่า“ มีประสิทธิภาพมากกว่าแบบเชิงเส้นกำกับ” หมายความว่าอย่างไร
มันหมายความว่าอย่างไรเมื่อเราบอกว่าอัลกอริทึมเป็น asymptotically ประสิทธิภาพมากขึ้นกว่า ?XXXYYY XXXจะเป็นตัวเลือกที่ดีกว่าสำหรับอินพุตทั้งหมด XXXจะเป็นตัวเลือกที่ดีกว่าสำหรับอินพุตทั้งหมดยกเว้นอินพุตขนาดเล็ก XXXจะเป็นตัวเลือกที่ดีกว่าสำหรับอินพุตทั้งหมดยกเว้นอินพุตขนาดใหญ่ YYYจะเป็นตัวเลือกที่ดีกว่าสำหรับอินพุตขนาดเล็ก ลิงค์สำหรับคำถามนี้อยู่ที่นี่ http://quiz.geeksforgeeks.org/algorithms-analysis-of-algorithms-question-16/ ฉันคิดว่าอัลกอริธึมที่มีประสิทธิภาพมากกว่าแบบ asymptotically ควรทำงานกับอินพุตทั้งหมด แต่ฉันไม่ได้รับเหตุผลที่อยู่เบื้องหลัง "ใช้งานได้กับอินพุตทั้งหมดยกเว้นอินพุตขนาดเล็ก"

3
เวลาที่ซับซ้อนของการเพิ่ม
Wikipedia แสดงความซับซ้อนของเวลาในการเพิ่มเป็นโดยที่nคือจำนวนบิตnnnnnn นี่เป็นขอบเขตล่างที่แข็งทฤษฏีหรือไม่? หรือนี่เป็นเพียงความซับซ้อนของอัลกอริทึมที่เร็วที่สุดที่รู้จักกันในปัจจุบัน ฉันต้องการทราบว่าเนื่องจากความซับซ้อนของการเพิ่มให้ขีดการดำเนินการทางคณิตศาสตร์อื่น ๆ ทั้งหมดและอัลกอริทึมทั้งหมดที่ใช้พวกเขา มันเป็นไปไม่ได้ในทางทฤษฎีหรือไม่ที่จะได้อัลกอริธึมเพิ่มเติมที่ทำงานใน ? หรือเราผูกพันกับความซับซ้อนเชิงเส้นเพื่อเพิ่มเติมo ( n )o(n)o(n)

2
เปรียบเทียบระหว่างอัลกอริทึม Aho-Corasick และอัลกอริทึม Rabin-Karp
ฉันกำลังทำงานกับอัลกอริธึมการค้นหาสตริงที่สนับสนุนการค้นหาหลายรูปแบบ ผมพบว่าทั้งสองขั้นตอนวิธีการที่ดูเหมือนผู้สมัครที่แข็งแกร่งที่สุดในแง่ของเวลาการทำงานคือAho-Corasickและราบิน-คาร์พ อย่างไรก็ตามฉันไม่พบการเปรียบเทียบแบบครอบคลุมระหว่างอัลกอริธึมทั้งสอง อัลกอริทึมใดที่มีประสิทธิภาพมากกว่า นอกจากนี้อันไหนที่เหมาะกว่าสำหรับการคำนวณแบบขนานและการค้นหาหลายรูปแบบ? ในที่สุดใครจะใช้ทรัพยากรฮาร์ดแวร์น้อย? สำหรับอัลกอริทึม AC ระยะการค้นหาใช้เวลาในขณะที่เป็น RK อย่างไรก็ตามเวลาทำงานสำหรับ RK คือซึ่งทำให้คล้ายกับ AC ข้อสรุปเบื้องต้นของฉันคือ RK ดูดีกว่าเพราะไม่ต้องการหน่วยความจำมากเท่ากับ AC ถูกต้องหรือไม่O(n+m)O(n+m)O(n+m)O(nm)O(nm)O(nm)O(n+m)O(n+m)O(n+m)

1
ผูกพันกับพื้นที่สำหรับอัลกอริทึมการเลือก?
มีอัลกอริทึมการเลือกที่แย่ที่สุดที่รู้จักกันดีในการค้นหาองค์ประกอบที่ใหญ่ที่สุดของในอาร์เรย์ของจำนวนเต็ม มันใช้วิธีการมัธยฐานของมัธยฐานเพื่อหาเดือยที่ดีพอแบ่งพาร์ติชันอาร์เรย์ที่เข้ามาและจากนั้นทำต่อไปเรื่อย ๆ เพื่อค้นหาองค์ประกอบที่ใหญ่ที่สุดของk kO ( n )O(n)O(n) kkkkkk เกิดอะไรขึ้นถ้าเราไม่ได้รับอนุญาตให้สัมผัสอาร์เรย์ใส่เท่าใดพื้นที่พิเศษจะต้องเพื่อที่จะหาสิ่งที่ 'TH องค์ประกอบที่ใหญ่ที่สุดในเวลาหรือไม่ เราสามารถหาองค์ประกอบที่ใหญ่ที่สุดของในพื้นที่พิเศษและยังคงรันไทม์ไหม? ยกตัวอย่างเช่นการหาองค์ประกอบสูงสุดหรือต่ำสุดใช้เวลาเวลาและพื้นที่ O ( n ) k O ( 1 ) O ( n ) O ( n ) O ( 1 )kkkO ( n )O(n)O(n)kkkO ( 1 )O(1)O(1)O ( n )O(n)O(n)O ( n )O(n)O(n)O ( 1 )O(1)O(1) …

1
การแยกประเภทการปรับแต่ง
ที่ทำงานฉันได้รับมอบหมายให้อนุมานข้อมูลบางประเภทเกี่ยวกับภาษาแบบไดนามิก ฉันเขียนลำดับของข้อความไปยังletนิพจน์ที่ซ้อนกันเช่น: return x; Z =&gt; x var x; Z =&gt; let x = undefined in Z x = y; Z =&gt; let x = y in Z if x then T else F; Z =&gt; if x then { T; Z } else { F; Z } เนื่องจากฉันเริ่มต้นจากข้อมูลประเภททั่วไปและพยายามอนุมานประเภทที่เฉพาะเจาะจงมากขึ้นตัวเลือกที่เป็นธรรมชาติคือประเภทการปรับแต่ง ตัวอย่างเช่นตัวดำเนินการตามเงื่อนไขส่งคืนการรวมของประเภทของสาขาที่เป็นจริงและเท็จ …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
การวิเคราะห์ที่เข้มงวดขึ้นของอัลกอริทึมของBorůvkaที่ถูกแก้ไข
อัลกอริทึมของBorůvkaเป็นหนึ่งในอัลกอริธึมมาตรฐานสำหรับการคำนวณทรีสแปนนิ่งขั้นต่ำสำหรับกราฟด้วยmG=(V,E)G=(V,E)G = (V,E)|V|=n,|E|=m|V|=n,|E|=m|V| = n, |E| = m รหัสหลอกคือ: MST T = empty tree Begin with each vertex as a component While number of components &gt; 1 For each component c let e = minimum edge out of component c if e is not in T add e to T …

1
ความเข้มข้นที่คมชัดสำหรับการเลือกผ่านการแบ่งแบบสุ่ม?
อัลกอริธึมธรรมดาทั่วไปสำหรับการค้นหาองค์ประกอบค่ามัธยฐานในอาร์เรย์ของจำนวนคือ:AAAnnn ตัวอย่างองค์ประกอบจากพร้อมการเปลี่ยนเป็นn3/4n3/4n^{3/4}AAABBB จัดเรียงและค้นหาอันดับองค์ประกอบและของBBB|B|±n−−√|B|±n|B|\pm \sqrt{n}lllrrrBBB ตรวจสอบว่าและอยู่บนด้านตรงข้ามของค่ามัธยฐานของและว่ามีมากที่สุดองค์ประกอบในระหว่างและสำหรับบางคนคงเหมาะสม0 ล้มเหลวหากสิ่งนี้ไม่เกิดขึ้นlllrrrAAACn−−√CnC\sqrt{n}AAAlllrrrC&gt;0C&gt;0C > 0 มิฉะนั้นหาค่ามัธยฐานโดยการจัดเรียงองค์ประกอบของระหว่างและAAAlllrrr ไม่ยากที่จะเห็นว่าสิ่งนี้ทำงานในเวลาเชิงเส้นและประสบความสำเร็จกับความน่าจะเป็นสูง (เหตุการณ์ที่ไม่ดีทั้งหมดเป็นความเบี่ยงเบนขนาดใหญ่ห่างจากความคาดหวังของทวินาม) อัลกอริธึมสำรองสำหรับปัญหาเดียวกันซึ่งเป็นธรรมชาติมากกว่าที่จะสอนให้นักเรียนที่เห็นการเรียงลำดับอย่างรวดเร็วเป็นสิ่งที่อธิบายไว้ที่นี่: การเลือกแบบสุ่ม นอกจากนี้ยังเป็นเรื่องง่ายที่จะเห็นว่าสิ่งนี้มีระยะเวลาที่คาดว่าจะเป็นเส้นตรง: พูดว่า "รอบ" เป็นลำดับของการเรียกซ้ำที่สิ้นสุดเมื่อมีการแบ่ง 1 / 4-3 / 4 จากนั้นสังเกตว่าความยาวที่คาดหวังของ รอบที่มากที่สุด 2. (ในการดึงครั้งแรกของรอบความน่าจะเป็นของการแยกที่ดีคือ 1/2 และหลังจากนั้นเพิ่มขึ้นตามจริงแล้วอัลกอริทึมถูกอธิบายเพื่อให้ความยาวรอบถูกครอบงำโดยตัวแปรสุ่มทางเรขาคณิต) ดังนั้นตอนนี้คำถาม: เป็นไปได้หรือไม่ที่จะแสดงว่าการเลือกแบบสุ่มทำงานในเวลาเชิงเส้นที่มีความน่าจะเป็นสูงหรือไม่? เรามีรอบและแต่ละรอบมีความยาวอย่างน้อยด้วยความน่าจะเป็นที่มากที่สุดดังนั้นการรวมกันทำให้เวลาในการทำงานคือกับความน่าn)O(logn)O(log⁡n)O(\log n)2 - k + 1 O ( n บันทึกบันทึกn ) 1 - 1 / O ( บันทึกn )kkk2−k+12−k+12^{-k+1}O(nloglogn)O(nlog⁡log⁡n)O(n\log\log n)1−1/O(logn)1−1/O(log⁡n)1-1/O(\log …

2
หนังสือคณิตศาสตร์ที่ดีเกี่ยวกับอัลกอริทึม [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันเป็นคนดูดความสง่างามทางคณิตศาสตร์และความแม่นยำและตอนนี้ฉันกำลังมองหาวรรณกรรมดังกล่าวเกี่ยวกับอัลกอริทึมและการวิเคราะห์อัลกอริทึม ตอนนี้มันไม่สำคัญอะไรสำหรับฉันว่าอัลกอริธึมจะครอบคลุมอะไรมาก แต่วิธีการที่พวกมันถูกนำเสนอและได้รับการปฏิบัติมากที่สุด "ฉันให้ความสำคัญกับภาษาที่ชัดเจนและแม่นยำมากซึ่งกำหนดความคิดที่ใช้ทั้งหมดในลักษณะที่เข้มงวด ฉันพบว่าคลาสสิกรู้เบื้องต้นเกี่ยวกับอัลกอริทึมโดย Cormen, Leiserson, Rivest และ Stein ค่อนข้างเรียบร้อย แต่ไม่สามารถจัดการกับคณิตศาสตร์ได้ดีและค่อนข้างเป็นทางการพร้อมหลักฐานและคำจำกัดความของมัน Sipser's Introduction to Theory of Computed ดูเหมือนจะดีกว่าในเรื่องนั้น แต่ก็ยังไม่มีการเปลี่ยนจากคณิตศาสตร์เป็นอัลกอริทึม มีใครแนะนำอะไรได้บ้าง ¹: อย่างน้อยที่สุดอัลกอริธึมควรจัดการการจัดการข้อมูลที่ต้องการโดยใช้โครงสร้างข้อมูลนามธรรมแบบไม่ธรรมดาเช่นกราฟ, อาร์เรย์, ชุด, รายการ, ต้นไม้และอื่น ๆ - โดยเฉพาะควรใช้กับโครงสร้างข้อมูลเช่นนั้น ฉันจะไม่สนใจเช่นกันหากปัญหาการใช้งานและการจัดการโครงสร้างข้อมูลถูกละเลยไปโดยสิ้นเชิง แม้ว่าฉันจะไม่สนใจปัญหาที่แก้ไขได้มากนัก

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