คำถามติดแท็ก time-complexity

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

1
ความซับซ้อนของหอคอยแห่งฮานอย
ฉันวิ่งเข้าไปในข้อสงสัยต่อไปนี้เกี่ยวกับความซับซ้อนของหอคอยแห่งฮานอยซึ่งฉันต้องการความคิดเห็นของคุณ มันอยู่ใน NP หรือไม่? คำตอบที่พยายาม: สมมติว่าเพ็กกี้ (สุภาษิต) แก้ปัญหาและส่งไปยังวิคเตอร์ (ผู้ตรวจสอบ) วิกเตอร์สามารถเห็นได้อย่างง่ายดายว่าสถานะสุดท้ายของการแก้ปัญหานั้นถูกต้อง (ในเวลาเชิงเส้น) แต่เขาไม่มีทางเลือกอื่นนอกจากต้องผ่านการเคลื่อนไหวของเพ็กกี้แต่ละครั้งเพื่อให้แน่ใจว่าเธอไม่ได้ทำการเคลื่อนไหวที่ผิดกฎหมาย เนื่องจาก Peggy ต้องทำอย่างน้อย 2 ^ | ดิสก์ | - 1 การเคลื่อนไหว (พิสูจน์ได้) ผู้ชนะก็ต้องทำตามเช่นกัน ดังนั้น Victor จึงไม่มีการตรวจสอบเวลาแบบพหุนาม (คำจำกัดความของ NP) ดังนั้นจึงไม่สามารถอยู่ใน NP ได้ อยู่ใน PSPACEหรือไม่ ดูเหมือนว่า แต่ฉันไม่สามารถคิดวิธีการขยายเหตุผลด้านบน เป็น PSPACE ที่สมบูรณ์หรือไม่ ดูเหมือนจะไม่ แต่ฉันมีเพียงความคิดที่คลุมเครือ การวางแผนอัตโนมัติซึ่ง ToH เป็นอินสแตนซ์ที่เฉพาะเจาะจงนั้นสมบูรณ์แบบ PSPACE ฉันคิดว่าการวางแผนมีอินสแตนซ์ที่ยากกว่า ToH อัปเดต : …

3
ฟังก์ชั่นที่มีการเติบโตช้ากว่า Ackermann ผกผันปรากฏในขอบเขตรันไทม์หรือไม่?
อัลกอริธึมที่ซับซ้อนบางอย่าง ( ยูเนี่ยน - พบ ) มีฟังก์ชัน Ackermann ผกผันเกือบคงที่ที่ปรากฏในความซับซ้อนของเวลาแบบอะซิมโทติคและเป็นเวลาที่เลวร้ายที่สุดกรณีที่เหมาะสมที่สุดถ้าเทอม Ackermann ผกผันเกือบคงที่ มีตัวอย่างของอัลกอริธึมที่ทราบพร้อมเวลาทำงานที่เกี่ยวข้องกับฟังก์ชันที่เติบโตช้ากว่า Invermann หรือไม่ (เช่นผู้บุกรุกฟังก์ชันที่ไม่เทียบเท่า Ackermann ภายใต้พหุนามหรือเอกซ์โปเนนเชียล ฯลฯ ) ที่ให้เวลากรณีเลวร้ายที่สุด ซับซ้อนในการแก้ปัญหาพื้นฐานหรือไม่

3
การหาลอการิทึมไม่ต่อเนื่องนั้นยากเพียงใด
สิ้นเชิงลอการิทึมเป็นเช่นเดียวกับการหาbbbในข = คmodให้, CและNab=cmodNab=cmodNa^b=c \bmod NaaacccNNN ฉันสงสัยว่ากลุ่มความซับซ้อนใด (เช่นสำหรับคอมพิวเตอร์แบบคลาสสิคและแบบควอนตัม) ที่อยู่ในนี้และวิธีการใด (เช่นอัลกอริธึม) ที่ดีที่สุดสำหรับการทำงานนี้ให้สำเร็จ ลิงค์วิกิพีเดียด้านบนไม่ได้ให้เวลาที่แน่นอนมาก ฉันหวังว่าจะมีวิธีการที่ดีที่สุดที่เป็นที่รู้จักกันดีในการค้นหาสิ่งนั้น

1
อัลกอริธึมที่เหมาะสมที่สุดในการค้นหาเส้นรอบวงของกราฟกระจาย?
ฉันสงสัยว่าจะหาเส้นรอบวงของกราฟที่ไม่มีทิศทางโดยตรงได้อย่างไร ฉันหมายถึง ) ตามความเหมาะสมฉันหมายถึงความซับซ้อนของเวลาต่ำสุด| E| =O( | V| )|E|=O(|V|)|E|=O(|V|) ฉันคิดถึงการปรับเปลี่ยนบางอย่างในอัลกอริทึมของ Tarjanสำหรับกราฟที่ไม่ได้บอกทิศทาง แต่ฉันไม่พบผลลัพธ์ที่ดี ที่จริงฉันคิดว่าถ้าฉันสามารถหาส่วนประกอบที่เชื่อมต่อ 2 ในแล้วฉันจะพบเส้นรอบวงโดยอุปนัยบางอย่างที่สามารถทำได้จากส่วนแรก ฉันอาจผิดทาง อัลกอริทึมใด ๆ ที่ไม่มีสัญญาณดีกว่าΘ ( | V | 2 ) (เช่นo ( | V | 2 ) ) ยินดีต้อนรับO ( | V| )O(|V|)O(|V|)Θ ( | V|2)Θ(|V|2)\Theta(|V|^2)o ( | V|2)o(|V|2)o(|V|^2)

7
อะไรคือคุณสมบัติของอัลกอริทึมความซับซ้อนของเวลา
บางครั้งมันง่ายที่จะระบุความซับซ้อนของเวลาของอัลกอริทึมที่ฉันตรวจสอบอย่างรอบคอบ อัลกอริทึมที่มีสองวงซ้อนกันของจะเห็นได้ชัด 2 อัลกอริทึมที่สำรวจทั้งหมดรวมกันเป็นไปได้ของกลุ่มของสองค่าจะเห็นได้ชัด NNNNN2N2N^2NNN2N2N2^N อย่างไรก็ตามฉันไม่ทราบวิธี "ระบุ" อัลกอริทึมที่มีความซับซ้อนตัวอย่างการนำไปใช้การผสานแบบเรียกซ้ำเป็นแบบหนึ่ง อะไรคือคุณสมบัติทั่วไปของการรวมหรืออัลกอริทึมอื่น ๆที่จะให้เบาะแสถ้าฉันวิเคราะห์มัน?Θ(NlogN)Θ(Nlog⁡N)\Theta(N \log N)Θ(NlogN)Θ(Nlog⁡N)\Theta(N \log N) ฉันแน่ใจว่ามีมากกว่าหนึ่งวิธีที่อัลกอริทึมอาจมีความซับซ้อนดังนั้นคำตอบใด ๆ และทั้งหมดก็ได้รับการชื่นชม BTW ฉันกำลังมองหาคุณสมบัติและเคล็ดลับทั่วไปไม่ใช่หลักฐานที่เข้มงวดΘ(NlogN)Θ(Nlog⁡N)\Theta(N \log N)

4
ความซับซ้อนของเวลาของอัลกอริทึม: มันเป็นสิ่งสำคัญที่จะระบุฐานของลอการิทึมหรือไม่?
เนื่องจากมีเพียงค่าคงที่ระหว่างฐานของลอการิทึมมันไม่ใช่แค่การเขียนเมื่อเทียบกับหรืออะไรก็ตาม ฐานอาจจะเป็นอย่างไรฉ( n ) = Ω ( บันทึกn )ฉ(n)=Ω(เข้าสู่ระบบ⁡n)f(n) = \Omega(\log{n})Ω ( บันทึก2n )Ω(เข้าสู่ระบบ2⁡n)\Omega(\log_2{n})

2
ปัญหาที่พิสูจน์ได้ต้องใช้เวลากำลังสอง
ฉันกำลังมองหาตัวอย่างของปัญหาที่มีความผูกพันลดลงของ ) สำหรับการป้อนข้อมูลx xΩ ( | x |2Ω(|x|2\Omega(|x|^2xxx ปัญหาต้องมีคุณสมบัติดังต่อไปนี้: Ω ( n2)Ω(n2)\Omega(n^2)พิสูจน์รันไทม์ของสำหรับอัลกอริทึมใด ๆ - ลำดับความสำคัญอันดับแรกคือการมีอาร์กิวเมนต์ที่ต่ำกว่าง่ายที่สุดเท่าที่จะทำได้ O ( n2)O(n2)O(n^2)อัลกอริธึมถ้าเป็นไปได้ก็ทำได้ง่ายเช่นกัน ขนาดเอาต์พุตของ (หรือเล็กกว่า) เห็นได้ชัดว่าปัญหาใด ๆ ที่ต้องการเอาท์พุทยาวต้องใช้เวลาทำงานที่คล้ายกันอย่างน้อย แต่นั่นไม่ใช่สิ่งที่ฉันกำลังมองหา ขอให้สังเกตว่าปัญหาการตัดสินใจใด ๆ เหมาะกับที่นี่Ω ( n 2 )O ( n )O(n)O(n)Ω ( n2)Ω(n2)\Omega(n^2) (ถ้าเป็นไปได้) ปัญหา "ธรรมชาติ" หากไม่มีคำจำกัดความที่เป็นทางการปัญหาของผู้สำเร็จการศึกษาจาก CS จะเป็นที่ยอมรับ เมื่อไม่นานมานี้ฉันถูกถามเกี่ยวกับปัญหาดังกล่าว แต่ไม่สามารถคิดได้ง่ายๆ ปัญหาแรกที่นึกได้คือซึ่งคิดว่าเป็นปัญหารันไทม์\ Omega (n ^ 2) นี่ไม่ง่ายพอและยิ่งกว่านั้นโครงสร้างได้รับการพิสูจน์แล้วว่าเป็นเท็จ …

2
หนึ่งสามารถแสดงความแข็ง NP โดยการทัวริงการลดลงได้หรือไม่?
ในกระดาษความซับซ้อนของปัญหา FrobeniusโดยRamírez-Alfonsínปัญหาได้รับการพิสูจน์แล้วว่าเป็นปัญหาที่สมบูรณ์โดยใช้การลดลงของทัวริง เป็นไปได้ไหม ว่าอย่างไร ฉันคิดว่ามันเป็นไปได้โดยพหุนามเวลาลดลงหลายคน มีการอ้างอิงเกี่ยวกับเรื่องนี้หรือไม่? มีสองแนวคิดที่แตกต่างกันของความแข็งของ NP แม้กระทั่งความสมบูรณ์ของ NP? แต่แล้วฉันก็สับสนเพราะจากมุมมองที่ใช้งานได้จริงถ้าฉันต้องการแสดงให้เห็นว่าปัญหาของฉันคือปัญหาที่ยากฉันจะใช้อะไร พวกเขาเริ่มต้นคำอธิบายดังนี้: การลดลงของทัวริงเวลาพหุนามจากปัญหาP1P1P_1 ไปยังอีกปัญหาP2P2P_2 เป็นอัลกอริทึมซึ่งจะช่วยแก้ P1P1P_1 โดยใช้ย่อยสมมุติ 'สำหรับการแก้ P2P2P_2 เช่นว่าถ้า A' เป็นอัลกอริทึมเวลาพหุนามสำหรับ P2P2P_2 แล้ว จะเป็นอัลกอริทึมสำหรับเวลาพหุนาม P1P1P_1 1 เราบอกว่า P1P1P_1 สามารถทัวริงลดลง P2P2P_2 2 ปัญหา เรียกว่า (ทัวริง) NP-hard หากมีปัญหาการตัดสินใจที่สมบูรณ์แบบP 2 เช่นที่ P 2 สามารถลดทัวริงเป็น P 1ได้P1P1P_1P2P2P_2P2P2P_2P1P1P_1 จากนั้นพวกเขาใช้การลดทัวริงจากปัญหา NP-complete เพื่อแสดงความสมบูรณ์ NP ของปัญหาอื่น ๆ

2
อัลกอริทึมที่มีประสิทธิภาพสำหรับปัญหาการมองเห็นในแนวตั้ง
ในระหว่างที่คิดถึงปัญหาหนึ่งฉันรู้ว่าฉันต้องสร้างอัลกอริทึมที่มีประสิทธิภาพในการแก้ไขงานต่อไปนี้: ปัญหา:เราได้รับกล่องสี่เหลี่ยมสองมิติของด้านซึ่งด้านขนานกับแกน เราสามารถตรวจสอบมันผ่านด้านบน อย่างไรก็ตามยังมีส่วนแนวนอนแต่ละเซกเมนต์มีจำนวนเต็ม -coordinate ( ) และ -coordinates ( ) และเชื่อมต่อจุดและ (ดูที่ ภาพด้านล่าง)nnnmmmyyy0≤y≤n0≤y≤n0 \le y \le nxxx0≤x1&lt;x2≤n0≤x1&lt;x2≤n0 \le x_1 < x_2 \le n(x1,y)(x1,y)(x_1,y)(x2,y)(x2,y)(x_2,y) เราอยากทราบว่าแต่ละเซ็กเมนต์ที่ด้านบนของกล่องเราจะมองลึกเข้าไปในแนวตั้งได้อย่างไรถ้ามองผ่านเซ็กเมนต์นี้ อย่างเป็นทางการสำหรับx∈{0,…,n−1}x∈{0,…,n−1}x \in \{0,\dots,n-1\}เราต้องการหาmaxi: [x,x+1]⊆[x1,i,x2,i]yimaxi: [x,x+1]⊆[x1,i,x2,i]yi\max_{i:\ [x,x+1]\subseteq[x_{1,i},x_{2,i}]} y_iy_i ตัวอย่าง: รับn=9n=9n=9และm=7m=7m=7กลุ่มตั้งอยู่ในภาพด้านล่างผลที่ได้คือ(5,5,5,3,8,3,7,8,7)(5,5,5,3,8,3,7,8,7)(5, 5, 5, 3, 8, 3, 7, 8, 7)7) ดูว่าแสงที่ลึกสามารถเข้าไปในกล่องได้ โชคดีสำหรับเราทั้งnnnและmmmมีขนาดค่อนข้างเล็กและเราสามารถทำการคำนวณแบบออฟไลน์ได้ อัลกอริธึมที่ง่ายที่สุดในการแก้ปัญหานี้คือแรงเดรัจฉาน: สำหรับแต่ละเซกเมนต์เคลื่อนที่อาร์เรย์ทั้งหมดและอัพเดตในกรณีที่จำเป็น แต่ก็จะช่วยให้เราไม่ได้น่าประทับใจมากO(mn)O(mn)O(mn)(ล้านบาท) การปรับปรุงที่ดีมากคือการใช้แผนภูมิส่วนซึ่งสามารถเพิ่มค่าสูงสุดในส่วนในระหว่างการค้นหาและอ่านค่าสุดท้าย ผมจะไม่อธิบายมันต่อไป แต่เราจะเห็นว่าเวลาซับซ้อนคือn)O((m+n)logn)O((m+n)log⁡n)O((m+n) …

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

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

2
ทำไมแฟคตอริ่งจำนวนเต็มขนาดใหญ่จึงถือว่ายาก
ผมอ่านบางว่าอัลกอริทึมที่มีประสิทธิภาพมากที่สุดที่พบสามารถคำนวณปัจจัยในเวลา แต่รหัสที่ผมเขียนเป็นO ( n )หรือ อาจเป็นO ( n log n )ขึ้นอยู่กับว่าการหารและโมดูลัสรวดเร็วแค่ไหนฉันค่อนข้างแน่ใจว่าฉันเข้าใจผิดบางอย่าง แต่ฉันไม่แน่ใจว่าอยู่ที่ไหนนี่คือสิ่งที่ฉันเขียนในรูปแบบโค้ดหลอกO(exp((64/9⋅b)1/3⋅(logb)2/3)O(exp⁡((64/9⋅b)1/3⋅(log⁡b)2/3)O(\exp((64/9 \cdot b)^{1/3} \cdot (\log b)^{2/3})O(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n) function factor(number) -&gt; list factors = new list if number &lt; 0 factors.append(-1) number = -number i = 2 while i &lt;= number while number % i == 0 factors.append(i) number …

2
ภาษาที่สมบูรณ์แบบหนาแน่น NP หมายถึง P = NP
เราบอกว่าภาษาเป็นหนาแน่นถ้ามีพหุนามดังกล่าวว่าสำหรับทุกในคำอื่น ๆ สำหรับความยาวใดก็ตามมีอยู่เฉพาะคำ polynomially หลายความยาวที่ไม่อยู่ในJ⊆Σ∗J⊆Σ∗J \subseteq \Sigma^{*}ppp|Jc∩Σn|≤p(n)|Jc∩Σn|≤p(n) |J^c \cap \Sigma^n| \leq p(n)n∈N.n∈N.n \in \mathbb{N}.nnnnnnJ.J.J. ปัญหาที่ฉันกำลังศึกษาขอให้แสดงต่อไปนี้ หากมีภาษาที่สมบูรณ์แบบหนาแน่นอยู่แล้วNPNPNPP=NPP=NPP = NP สิ่งที่ข้อความที่แนะนำคือการพิจารณาลดพหุนามถึง -แล้วสร้างอัลกอริทึมที่พยายามทำให้สูตรกำหนดเป็นไปตามที่ต้องการพร้อมกับสร้างองค์ประกอบใน333SATSATSATCNFCNFCNFJc.Jc.J^c. สิ่งที่ฉันสงสัยคือ มีหลักฐานเพิ่มเติมโดยตรงหรือไม่ ความคิดนี้เป็นที่รู้จักกันในการตั้งค่าทั่วไปมากขึ้น?

1
กำลังแรงเดรัจฉาน Delaunay triangulation อัลกอริธึมที่ซับซ้อน
ในหนังสือ"เรขาคณิตการคำนวณ: อัลกอริธึมและการประยุกต์ใช้"โดย Mark de Berg และคณะมีอัลกอริทึมแรงเดรัจฉานที่ง่ายมากสำหรับการคำนวณสามเหลี่ยมเดอลูเนย์ อัลกอริทึมใช้ความคิดของขอบผิดกฎหมาย - ขอบที่อาจไม่ปรากฏในสมการ Delaunay ที่ถูกต้องและต้องถูกแทนที่ด้วยขอบอื่น ๆ ในแต่ละขั้นตอนอัลกอริทึมจะค้นหาขอบที่ผิดกฎหมายเหล่านี้และทำการกระจัดที่ต้องการ (เรียกว่าการพลิกขอบ ) จนกระทั่งไม่มีขอบที่ผิดกฎหมาย อัลกอริทึมการบีบอัดทางกฎหมาย ( TTT ) อินพุต บางสมTTTของจุดที่ตั้งPเอาท์พุต สมการทางกฎหมายของPPPP PPP ในขณะที่ มีขอบที่ผิดกฎหมายp i p j doTTTpipjpipjp_ip_j \quadให้และP ฉันพีเจพีลิตรเป็นรูปสามเหลี่ยมสองรูปที่อยู่ติดกับหน้าฉันพีเจpipjpkpipjpkp_i p_j p_kpipjplpipjplp_i p_j p_lpipjpipjp_ip_j \quadลบจากTและเพิ่มp k p lแทน ผลตอบแทน Tpipjpipjp_ip_jTTTpkplpkplp_kp_l TTT ฉันได้ยินมาว่าอัลกอริทึมนี้ทำงานในเวลาในกรณีที่แย่ที่สุด; อย่างไรก็ตามมันไม่ชัดเจนสำหรับฉันว่าข้อความนี้ถูกต้องหรือไม่ ถ้าใช่จะพิสูจน์ได้อย่างไรว่าขอบเขตบนนี้O(n2)O(n2)O(n^2)

2
ความผิดพลาดในอัลกอริทึมการคูณ -O (n lg n) นี้อยู่ที่ไหน
บล็อกโพสต์ปริศนาล่าสุดเกี่ยวกับการค้นหาสามช่องว่างเท่า ๆ กันนำฉันไปสู่คำถามสแต็คโอเวอร์โฟลว์พร้อมคำตอบยอดนิยมที่อ้างว่าทำในเวลา O (n lg n) ส่วนที่น่าสนใจคือว่าการแก้ปัญหาที่เกี่ยวข้องกับการ squaring พหุนาม, อ้างอิงกระดาษที่อธิบายถึงวิธีที่จะทำมันใน O (n LG n) เวลา ตอนนี้การคูณแบบพหุนามมีค่าเท่ากันกับการคูณตัวเลข ความแตกต่างที่แท้จริงเพียงอย่างเดียวคือการขาดการแบก แต่ ... การบรรทุกสามารถทำได้ในเวลา O (n lg n) ตัวอย่างเช่น: var value = 100; // = 0b1100100 var inputBitCount = value.BitCount(); // 7 (because 2^7 &gt; 100 &gt;= 2^6) var n = inputBitCount * …

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