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

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

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

13
วิธีการแก้ปัญหาแบบฮิวริสติก "ลองใช้กรณีทดสอบ": อัลกอริทึมที่ปรากฏถูกต้อง แต่จริง ๆ แล้วไม่ถูกต้อง
ในการพยายามทดสอบว่าอัลกอริทึมสำหรับปัญหาบางอย่างถูกต้องหรือไม่จุดเริ่มต้นตามปกติคือลองใช้อัลกอริทึมด้วยมือในกรณีทดสอบง่ายๆ - ลองกับตัวอย่างกรณีปัญหารวมถึงกรณีมุมง่าย ๆ สองสามตัวอย่าง " นี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยม: มันเป็นวิธีที่ดีในการกำจัดความพยายามที่ไม่ถูกต้องอย่างรวดเร็วของอัลกอริทึมและเพื่อทำความเข้าใจเกี่ยวกับสาเหตุที่อัลกอริทึมไม่ทำงาน อย่างไรก็ตามเมื่อการเรียนรู้อัลกอริทึมนักเรียนบางคนถูกล่อลวงให้หยุดที่นั่น: หากอัลกอริทึมของพวกเขาทำงานอย่างถูกต้องกับตัวอย่างจำนวนหนึ่งรวมถึงกรณีมุมทั้งหมดที่พวกเขาสามารถคิดได้ลองพวกเขาสรุปว่าอัลกอริทึมต้องถูกต้อง มีนักเรียนคนหนึ่งที่ถามอยู่เสมอ: "ทำไมฉันต้องพิสูจน์อัลกอริทึมของฉันให้ถูกต้องถ้าฉันลองได้ในบางกรณีทดสอบ?" ดังนั้นคุณจะหลอก "ฮิวริสติกแบบทดสอบกรณี" ได้อย่างไร ฉันกำลังมองหาตัวอย่างที่ดีเพื่อแสดงว่าฮิวริสติกนี้ไม่เพียงพอ กล่าวอีกนัยหนึ่งฉันกำลังมองหาหนึ่งหรือมากกว่าหนึ่งตัวอย่างของอัลกอริทึมที่เผินๆดูเหมือนว่ามันอาจจะถูกต้องและผลลัพธ์ที่ได้คำตอบที่ถูกต้องในอินพุตขนาดเล็กทั้งหมดที่ทุกคนมีแนวโน้มที่จะเกิดขึ้น ไม่ทำงาน อัลกอริทึมอาจทำงานได้อย่างถูกต้องกับอินพุตขนาดเล็กทั้งหมดและล้มเหลวสำหรับอินพุตขนาดใหญ่เท่านั้นหรือล้มเหลวเฉพาะสำหรับอินพุตที่มีรูปแบบที่ผิดปกติ โดยเฉพาะฉันกำลังมองหา: อัลกอริทึม ข้อบกพร่องจะต้องอยู่ในระดับอัลกอริทึม ฉันไม่ได้กำลังมองหาข้อผิดพลาดในการใช้งาน (ตัวอย่างเช่นอย่างน้อยที่สุดตัวอย่างควรเป็นผู้ไม่เชื่อเรื่องภาษาและข้อบกพร่องควรเกี่ยวข้องกับความกังวลด้านอัลกอริทึมมากกว่าปัญหาด้านวิศวกรรมซอฟต์แวร์หรือปัญหาการใช้งาน) อัลกอริทึมที่บางคนอาจมีความน่าเชื่อถือ รหัสเทียมควรมีลักษณะที่ถูกต้องอย่างน้อยน่าจะเป็นไปได้ (เช่นรหัสที่ obfuscated หรือน่าสงสัยว่าไม่ได้เป็นตัวอย่างที่ดี) คะแนนโบนัสหากเป็นอัลกอริทึมที่นักเรียนบางคนคิดขึ้นมาเมื่อพยายามแก้ไขปัญหาการบ้านหรือการสอบ อัลกอริทึมที่จะผ่านกลยุทธ์การทดสอบด้วยตนเองอย่างสมเหตุสมผลด้วยความน่าจะเป็นสูง คนที่ลองใช้กรณีทดสอบเล็ก ๆ น้อย ๆ ด้วยมือไม่น่าจะค้นพบข้อบกพร่อง ตัวอย่างเช่น "จำลอง QuickCheck ด้วยมือในกรณีทดสอบขนาดเล็กโหล" ไม่น่าจะเปิดเผยว่าอัลกอริทึมไม่ถูกต้อง เป็นอัลกอริทึมที่กำหนดขึ้นโดยเฉพาะ ฉันเคยเห็นนักเรียนหลายคนคิดว่า "ลองใช้กรณีทดสอบด้วยมือ" เป็นวิธีที่สมเหตุสมผลในการตรวจสอบว่าอัลกอริธึมที่กำหนดขึ้นถูกต้องหรือไม่ แต่ฉันสงสัยว่านักเรียนส่วนใหญ่จะไม่คิดว่าการลองใช้กรณีทดสอบสองสามอันเป็นวิธีที่ดี อัลกอริทึม สำหรับอัลกอริธึมความน่าจะเป็นมักจะไม่มีวิธีที่จะบอกได้ว่าเอาต์พุตใด ๆ ที่ถูกต้องหรือไม่ …

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

4
(เมื่อใด) คือการค้นหาตารางแฮช O (1)?
มักจะกล่าวว่าการค้นหาตารางแฮชทำงานในเวลาคงที่: คุณคำนวณค่าแฮชซึ่งให้ดัชนีสำหรับการค้นหาอาร์เรย์ แต่สิ่งนี้ไม่สนใจการชน ในกรณีที่เลวร้ายที่สุดทุกรายการเกิดขึ้นในถังเดียวกันและเวลาค้นหากลายเป็นเชิงเส้น ( )Θ(n)Θ(n)\Theta(n) มีเงื่อนไขเกี่ยวกับข้อมูลที่สามารถทำการค้นหาตารางแฮชอย่างแท้จริงหรือไม่ เป็นค่าเฉลี่ยเท่านั้นหรือตารางแฮชมีค้นหาตัวพิมพ์ที่เลวร้ายที่สุด?O ( 1 )O(1)O(1)O(1)O(1)O(1)O(1) หมายเหตุ: ฉันมาจากมุมมองของโปรแกรมเมอร์ที่นี่ เมื่อฉันเก็บข้อมูลในตารางแฮชมันมักจะเป็นสตริงหรือโครงสร้างข้อมูลคอมโพสิตบางส่วนและข้อมูลจะเปลี่ยนแปลงในช่วงอายุของตารางแฮช ดังนั้นในขณะที่ฉันชื่นชมคำตอบเกี่ยวกับแฮ็กที่สมบูรณ์แบบพวกเขาน่ารัก แต่เป็นข้อมูลเล็ก ๆ น้อย ๆ และไม่สามารถใช้งานได้จริงจากมุมมองของฉัน การติดตามผล PS: ข้อมูลประเภทใดที่มีการดำเนินการตารางแฮช O (1)

5
อัลกอริทึมการเรียงลำดับนี้เป็นอย่างไร³ (n³) และไม่Θ (n²) เป็นกรณีที่เลวร้ายที่สุด?
ฉันเพิ่งเริ่มเรียนหลักสูตรโครงสร้างข้อมูลและอัลกอริธึมและผู้ช่วยสอนของฉันให้รหัสหลอกต่อไปนี้สำหรับการเรียงลำดับอาร์เรย์ของจำนวนเต็ม: void F3() { for (int i = 1; i < n; i++) { if (A[i-1] > A[i]) { swap(i-1, i) i = 0 } } } อาจไม่ชัดเจน แต่ที่นี่คือขนาดของอาร์เรย์ที่เราพยายามเรียงลำดับnnnA ในกรณีใด ๆ ผู้ช่วยสอนอธิบายให้ชั้นเรียนรู้ว่าอัลกอริทึมนี้อยู่ในเวลา (แย่ที่สุดฉันเชื่อ) แต่ไม่ว่าฉันจะผ่านมันไปกี่ครั้งด้วยอาเรย์เรียงกลับด้าน มันดูเหมือนว่าฉันที่มันควรจะเป็นและไม่ได้3)Θ(n3)Θ(n3)\Theta(n^3)Θ(n2)Θ(n2)\Theta(n^2)Θ(n3)Θ(n3)\Theta(n^3) คนที่จะสามารถอธิบายให้ฉันทำไมนี้เป็นΘ(n3)Θ(n3)Θ(n^3)และไม่Θ(n2)Θ(n2)Θ(n^2) ?

3
ทำไมการค้นหาแบบไบนารี่จึงเร็วกว่าการค้นหาแบบไตรภาค
การค้นหาอาเรย์ขององค์ประกอบโดยใช้การค้นหาแบบไบนารี่จะใช้เวลาในกรณีที่ซ้ำที่สุดการทำซ้ำเพราะในแต่ละขั้นตอนเราตัดแบ่งครึ่งของพื้นที่การค้นหาของเรา หากเราใช้ 'การค้นหาแบบไตรภาค' แทนเราจะตัดพื้นที่การค้นหาของเราสองในสามในแต่ละการวนซ้ำดังนั้นกรณีที่แย่ที่สุดควรใช้การซ้ำ ...log 2 N log 3 N &lt; log 2 NNNNlog2Nlog2⁡N\log_2 Nlog3N&lt;log2Nlog3⁡N&lt;log2⁡N\log_3 N < \log_2 N ดูเหมือนว่าการค้นหาแบบไตรภาคเร็วกว่าแล้วทำไมเราถึงใช้การค้นหาแบบไบนารี่?

2
คำสั่งของคำจำกัดความการเติบโตจาก Reynolds & Tymann
ฉันกำลังอ่านหนังสือที่ชื่อว่าPrinciples of Computer Science (2008) โดย Carl Reynolds และ Paul Tymann (จัดพิมพ์โดย Schaum's Outlines) บทที่สองแนะนำอัลกอริทึมพร้อมตัวอย่างของการค้นหาตามลำดับซึ่งจะวนซ้ำตามรายการชื่อและส่งกลับ TRUE หากพบชื่อที่กำหนดในรายการ ผู้เขียนพูดต่อไป (หน้า 17): เราบอกว่า "ลำดับการเติบโต" ของอัลกอริธึมการค้นหาตามลำดับคือ n สัญกรณ์สำหรับสิ่งนี้คือ T (n) นอกจากนี้เรายังบอกว่าอัลกอริทึมที่มีลำดับการเจริญเติบโตอยู่ภายในปัจจัยคงที่ของ T (n) มีค่า theta ของ NL พูด "การค้นหาตามลำดับมีทีต้าของ n" ขนาดของปัญหาคือ n ความยาวของรายการที่ค้นหา ฉันพบว่ามันยากที่จะติดตาม หนังสือเล่มนี้เต็มไปด้วยข้อผิดพลาดดังนั้นฉันไม่แน่ใจว่าฉันทำอะไรหายไปหรือมีการพิมพ์ผิดในย่อหน้าด้านบน โดยทั่วไปภาษาอังกฤษฉันไม่ค่อยเห็นประโยคจบด้วย "... พูด" ฉันสับสนมาก T หมายถึงอะไร หนังสือเล่มนี้ไม่ได้อธิบาย มันเป็นเวลาหรือสำหรับที? …

3
ความซับซ้อนของอัลกอริทึมเป็นแบบจำลองสำหรับภาษาที่ใช้งานได้อย่างไร
ความซับซ้อนของอัลกอริทึมได้รับการออกแบบให้ไม่ขึ้นกับรายละเอียดในระดับที่ต่ำกว่า แต่ขึ้นอยู่กับโมเดลที่จำเป็นเช่นการเข้าถึงอาร์เรย์และการแก้ไขโหนดในทรีใช้เวลา O (1) นี่ไม่ใช่กรณีในภาษาที่ใช้งานได้จริง รายการ Haskell ใช้เวลาเชิงเส้นในการเข้าถึง การแก้ไขโหนดในทรีเกี่ยวข้องกับการสร้างสำเนาใหม่ของทรี ควรมีแบบจำลองทางเลือกของความซับซ้อนของอัลกอริทึมสำหรับภาษาที่ใช้งานได้หรือไม่?

4
วิธีการวัด“ การเรียงลำดับ”
ฉันสงสัยว่ามีวิธีมาตรฐานในการวัด "sortness" ของอาร์เรย์หรือไม่? อาเรย์ที่มีจำนวนค่ามัธยฐานของค่าการรุกรานที่เป็นไปได้จะถือว่าไม่ได้เรียงลำดับสูงสุดหรือไม่ โดยที่ฉันหมายความว่ามันเป็นพื้นเท่าที่จะทำได้จากการเรียงลำดับหรือเรียงกลับกัน

2
asymptotically shuffling ไร้เดียงสาแค่ไหน?
เป็นที่ทราบกันดีว่าอัลกอริทึม 'ไร้เดียงสา' สำหรับการสับเปลี่ยนอาเรย์โดยการสลับแต่ละไอเท็มกับอีกอันที่สุ่มเลือกไม่ทำงานอย่างถูกต้อง: for (i=0..n-1) swap(A[i], A[random(n)]); โดยเฉพาะตั้งแต่ที่แต่ละnnnซ้ำหนึ่งของnnnเลือกที่จะทำ (กับความน่าจะเป็นชุด) มีn nnnn^nที่เป็นไปได้ 'เส้นทาง' ผ่านการคำนวณ; เพราะจำนวนการเรียงสับเปลี่ยนที่เป็นไปได้n ! n!n!ไม่แบ่งเท่า ๆ กันตามจำนวนของเส้นทางn nnnn^nมันเป็นไปไม่ได้ที่อัลกอริธึมนี้จะสร้างnแต่ละอัน! n!n!การเรียงสับเปลี่ยนที่มีความน่าจะเป็นเท่ากัน (แต่อย่างใดอย่างหนึ่งควรใช้การสลับแบบFischer-Yatesซึ่งจะเปลี่ยนการโทรเพื่อเลือกหมายเลขสุ่มจาก [0..n) ด้วยการโทรเพื่อเลือกหมายเลขแบบสุ่มจาก [i..n); เป็นสิ่งที่สงสัยกับคำถามของฉัน) สิ่งที่ฉันสงสัยคือการสับเปลี่ยนไร้เดียงสาจะเป็นไปได้อย่างไร โดยเฉพาะอย่างยิ่งการให้P ( n )P(n)P(n)เป็นชุดของพีชคณิตทั้งหมดและC ( ρ )C(ρ)C(\rho)เป็นจำนวนเส้นทางผ่านขั้นตอนวิธีการที่ไร้เดียงสาที่ผลิตที่เกิดการเปลี่ยนแปลงρ ∈ P ( n )ρ∈P(n)\rho\in P(n)สิ่งที่เป็นพฤติกรรมเชิงของการทำงาน M(n)=n!nnmaxρ∈P(n)C(ρ)M(n)=n!nnmaxρ∈P(n)C(ρ)\qquad \displaystyle M(n) = \frac{n!}{n^n}\max_{\rho\in P(n)} C(\rho) และ m(n)=n!nnminρ∈P(n)C(ρ)m(n)=n!nnminρ∈P(n)C(ρ)\qquad \displaystyle m(n) …

4
O และΩเกี่ยวข้องกับกรณีที่เลวร้ายที่สุดและดีที่สุดได้อย่างไร?
วันนี้เรามีการหารือในการบรรยายขั้นตอนวิธีการที่ง่ายมากสำหรับการหาองค์ประกอบในอาร์เรย์ที่เรียงลำดับการใช้ค้นหาแบบทวิภาค เราถูกขอให้ระบุความซับซ้อนเชิงซีมของมันสำหรับอาร์เรย์ขององค์ประกอบnnn ความคิดของฉันคือว่าไม่ชัดแจ้งO(logn)O(log⁡n)O(\log n)หรือO(log2n)O(log2⁡n)O(\log_2 n)มีความเฉพาะเจาะจงมากขึ้นเนื่องจากlog2nlog2⁡n\log_2 nเป็นจำนวนการดำเนินการในกรณีที่เลวร้ายที่สุด แต่ผมสามารถทำได้ดีกว่ายกตัวอย่างเช่นถ้าผมตีสืบค้นองค์ประกอบเป็นครั้งแรก - แล้วขอบเขตที่ต่ำเป็นΩ ( 1 )Ω(1)\Omega(1) ) ผู้บรรยายเสนอวิธีแก้ปัญหาเป็นΘ ( บันทึกn )Θ(log⁡n)\Theta(\log n)เนื่องจากเรามักจะพิจารณาเฉพาะกรณีที่แย่ที่สุดสำหรับอัลกอริทึม แต่เมื่อพิจารณาเฉพาะกรณีที่เลวร้ายที่สุดประเด็นของการมีOOOและคืออะไรΩΩ\Omegaเมื่อกรณีที่เลวร้ายที่สุดของปัญหาที่กำหนดมีความซับซ้อนเดียวกัน ( ΘΘ\Thetaจะเป็นสิ่งที่เราต้องการใช่ไหม?) สิ่งที่ฉันหายไปที่นี่?

3
ฮาร์ดแวร์ / การนำไปใช้จะมีผลต่อความซับซ้อนของเวลา / พื้นที่ของอัลกอริทึมหรือไม่
ฉันไม่ใช่นักเรียน CS ดังนั้นนี่อาจเป็นคำถามที่โง่ แต่โปรดอดทนกับฉัน ... ในยุคก่อนคอมพิวเตอร์เราสามารถใช้โครงสร้างข้อมูลอาเรย์กับบางอย่างเช่นอาเรย์ของลิ้นชักเท่านั้น เนื่องจากต้องระบุตำแหน่งลิ้นชักด้วยดัชนีที่สอดคล้องกันก่อนที่จะแยกค่าออกมาความซับซ้อนของเวลาในการค้นหาอาร์เรย์คือโดยสมมติว่าเป็นการค้นหาแบบไบนารีO ( l o g( n ) )O(log(n))O(log(n)) อย่างไรก็ตามการประดิษฐ์คอมพิวเตอร์สร้างความแตกต่างใหญ่ คอมพิวเตอร์สมัยใหม่สามารถอ่านจาก RAM ได้อย่างรวดเร็วจนตอนนี้เราพิจารณาความซับซ้อนของเวลาในการค้นหาอาร์เรย์เป็น (แม้จะไม่ใช่ในทางเทคนิคเพราะมันใช้เวลามากขึ้นในการย้ายรีจิสเตอร์ในระยะไกล ฯลฯ )O ( 1 )O(1)O(1) อีกตัวอย่างหนึ่งคือพจนานุกรม Python ขณะที่หนึ่งอาจได้รับการเข้าถึงความซับซ้อนในพจนานุกรมของกับป่วยเป็นลายลักษณ์อักษรมากเกินไปวิธีมายากล (หรือขันโชคร้ายคือกุญแจมีจำนวนมากของการชนกัญชา) ก็มักจะสันนิษฐานว่าเป็นO ( 1 ) ในกรณีนี้ความซับซ้อนของเวลาขึ้นอยู่กับการใช้งานตารางแฮชของพจนานุกรม Python และการใช้ฟังก์ชั่นแฮชของคีย์O(n)O(n)O(n)__hash__O(1)O(1)O(1) สิ่งนี้หมายความว่าฮาร์ดแวร์ / การนำไปใช้นั้นมีผลต่อความซับซ้อนของเวลาของอัลกอริทึมหรือไม่? (ในขณะที่ทั้งสองตัวอย่างเป็นเรื่องเกี่ยวกับโครงสร้างข้อมูลแทนที่จะเป็นอัลกอริธึม แต่ตัวหลังถูกสร้างขึ้นในอดีตและฉันไม่เคยได้ยินเรื่องความซับซ้อนของเวลาในโครงสร้างข้อมูลดังนั้นฉันจึงใช้คำว่า "อัลกอริทึม" ที่นี่) สำหรับฉันแล้วอัลกอริธึมเป็นนามธรรมและแนวคิดซึ่งคุณสมบัติเช่นความซับซ้อนของเวลา / พื้นที่ไม่ควรได้รับผลกระทบจากการใช้งานในลักษณะที่เฉพาะเจาะจงหรือไม่

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

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

2
เหตุใด C ประเภทโมฆะจึงไม่คล้ายกับประเภทที่ว่าง / ด้านล่าง
Wikipedia ตลอดจนแหล่งข้อมูลอื่น ๆ ที่ฉันได้พบรายการvoidประเภทC เป็นหน่วยประเภทซึ่งตรงข้ามกับประเภทที่ว่างเปล่า ฉันพบว่ามันสับสนเพราะฉันคิดว่าvoidเหมาะกับนิยามของประเภทที่ว่าง / ล่าง ไม่มีค่านิยมใด ๆ อยู่voidเท่าที่ฉันจะบอกได้ ฟังก์ชั่นที่มีประเภทคืนค่าเป็นโมฆะระบุว่าฟังก์ชั่นจะไม่ส่งคืนสิ่งใดดังนั้นจึงสามารถทำงานได้เพียงผลข้างเคียงเท่านั้น ตัวชี้ชนิดvoid*เป็นชนิดย่อยของชนิดตัวชี้อื่นทั้งหมด นอกจากนี้การแปลงไปยังและจากvoid*ใน C นั้นเป็นนัย ผมไม่แน่ใจว่าถ้าจุดสุดท้ายมีบุญใด ๆ ที่เป็นข้อโต้แย้งสำหรับvoidการเป็นประเภทที่ว่างเปล่าเป็นมากหรือน้อยเป็นกรณีพิเศษที่มีความสัมพันธ์ไม่มากที่จะvoid*void ในทางกลับกันvoidตัวมันเองไม่ใช่ประเภทย่อยของประเภทอื่นทั้งหมดซึ่งเท่าที่ฉันสามารถบอกได้ว่าเป็นข้อกำหนดสำหรับประเภทที่จะเป็นประเภทด้านล่าง
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

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