วิทยาศาสตร์คอมพิวเตอร์

ถาม - ตอบสำหรับนักเรียนนักวิจัยและผู้ปฏิบัติงานด้านวิทยาการคอมพิวเตอร์

3
สำหรับทุกฟังก์ชั่นที่คำนวณได้มีปัญหาที่สามารถแก้ไขได้ดีที่สุดในเวลาหรือไม่?
สำหรับฟังก์ชั่นคำนวณทุกไม่มีอยู่ปัญหาที่สามารถแก้ไขได้ที่ดีที่สุดในเวลาหรือมีฟังก์ชันคำนวณดังกล่าวว่าปัญหาที่สามารถแก้ไขได้ในทุกสามารถ ยังสามารถแก้ไขได้ในเวลา ?Θ ( f ( n ) ) f O ( f ( n ) ) o ( f ( n ) )fffΘ(f(n))Θ(f(n))\Theta(f(n))fffO(f(n))O(f(n))O(f(n))o(f(n))o(f(n))o(f(n)) คำถามนี้โผล่เข้ามาในหัวของฉันเมื่อวานนี้ ฉันกำลังคิดเกี่ยวกับเรื่องนี้มาสักพักแล้ว แต่ไม่สามารถเข้าใจได้ ฉันไม่รู้จริงๆว่าฉันจะเป็น google อย่างไรฉันจึงถามที่นี่ นี่คือสิ่งที่ฉันเกิดขึ้น: ความคิดแรกของฉันคือคำตอบคือใช่: สำหรับทุกฟังก์ชันที่คำนวณได้ปัญหา "เอาต์พุตจุด" (หรือสร้างสตริงที่มีจุดหรืออะไรก็ตาม) ไม่สามารถแก้ไขได้อย่างชัดเจนในเวลา ดังนั้นเราจะต้องแสดงให้เห็นว่าจะสามารถแก้ไขได้ในเวลา ไม่มีปัญหาใช้รหัสเทียมต่อไปนี้:f ( n ) f ( n ) o ( f ( n …

1
ประหยัดในการเริ่มต้นอาร์เรย์
ฉันเพิ่งอ่านว่ามันเป็นไปได้ที่จะมีอาร์เรย์ที่ไม่จำเป็นต้องเริ่มต้นคือมันเป็นไปได้ที่จะใช้พวกเขาโดยไม่ต้องใช้เวลาพยายามตั้งสมาชิกแต่ละคนเป็นค่าเริ่มต้น เช่นคุณสามารถเริ่มใช้อาร์เรย์ราวกับว่ามันได้รับการเริ่มต้นโดยค่าเริ่มต้นโดยไม่ต้องเริ่มต้นได้ (ขออภัยฉันจำไม่ได้ว่าอ่านตรงไหน) ตัวอย่างเช่นสาเหตุที่อาจเป็นเรื่องน่าประหลาดใจ: สมมติว่าคุณกำลังพยายามที่จะจำลอง ที่เลวร้ายที่สุดกรณี Hashtable (สำหรับแต่ละแทรก / search / ลบ) ของจำนวนเต็มในช่วง[ 1 , n 2 ]O (1)O(1)\mathcal{O}(1)[ 1 , n2][1,n2][1, n^2] คุณสามารถจัดสรรอาเรย์ที่มีขนาดบิต2บิตและใช้แต่ละบิตเพื่อแสดงการมีอยู่ของจำนวนเต็มใน hashtable หมายเหตุ: หน่วยความจำจัดสรรถือว่าO ( 1 )เวลาn2n2n^2O (1)O(1)\mathcal{O}(1) ตอนนี้ถ้าคุณไม่ได้มีการเริ่มต้นอาร์เรย์นี้ทั้งหมดลำดับใด ๆ ของการพูดดำเนินการเมื่อวัน Hashtable ตอนนี้กรณีที่เลวร้ายO ( n )nnnO (n)O(n)\mathcal{O}(n) ดังนั้นในความเป็นจริงคุณจะต้องมีการนำแฮช "สมบูรณ์แบบ" มาใช้ซึ่งลำดับของการปฏิบัติการใช้พื้นที่Θ ( n 2 )แต่ทำงานในเวลาO ( n ) …

1
ปัญหาการตัดสินใจเช่นว่าอัลกอริทึมใด ๆ ยอมรับอัลกอริทึมที่เร็วกว่าแบบเอ็กซ์โปเนนเชียล
ในอัลกอริทึมของHromkovič สำหรับปัญหาที่ยาก (รุ่นที่ 2) มีทฤษฎีบทนี้ (2.3.3.3, หน้า 117): มี (decidable) ตัดสินใจปัญหาคือเช่นว่าสำหรับขั้นตอนวิธีการทุกที่แก้มีขั้นตอนวิธีการอื่นที่ยังแก้และนอกจากนี้บรรลุเป้าหมายA P A ′ PPPPAAAPPPA'A′A'PPP ∀∞n∈N.TimeA′(n)=log2TimeA(n)∀∞n∈N.TimeA′(n)=log2⁡TimeA(n)\qquad \forall^\infty n \in \mathbb{N}. \mathrm{Time}_{A'}(n) = \log_2 \mathrm{Time}_A(n) TimeA(n)TimeA(n)\mathrm{Time}_A(n)เป็นตัวรันไทม์ที่แย่ที่สุดของในอินพุตของขนาดและแปลว่า "สำหรับทุกคน แต่มีจำนวน จำกัด " n ∀ ∞AAAnnn∀∞∀∞\forall^\infty ไม่ได้รับการพิสูจน์และเราไม่รู้ว่าจะทำอย่างไรกับเรื่องนี้ มันค่อนข้างตอบโต้ได้ง่ายจริงๆแล้ว ทฤษฎีบทสามารถพิสูจน์ได้อย่างไร?

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

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

3
ฟังก์ชัน ML ของประเภท 'a ->' b
อาจารย์ของเราขอให้เราคิดถึงฟังก์ชั่นใน OCaml ที่มีรูปแบบ 'a -> 'b เช่นฟังก์ชั่นของอาร์กิวเมนต์หนึ่งตัวที่อาจเป็นอะไรก็ได้และสามารถคืนสิ่งที่แตกต่างออกไปได้ ฉันคิดว่าจะใช้raiseในฟังก์ชั่นที่ไม่สนใจอาร์กิวเมนต์: let f x = raise Exit แต่อาจารย์กล่าวว่ามีวิธีแก้ปัญหาที่ไม่ต้องการฟังก์ชันใด ๆ ในไลบรารีมาตรฐาน ฉันสับสน: คุณจะสร้างได้'bอย่างไรถ้าคุณไม่มีในตอนแรก ฉันถามที่นี่มากกว่า Stack Overflow เพราะฉันต้องการที่จะเข้าใจสิ่งที่เกิดขึ้นฉันไม่ต้องการเพียงแค่เห็นโปรแกรมที่ไม่มีคำอธิบาย

2
อัลกอริทึมการตรวจสอบประเภท
ฉันเริ่มต้นการวิจัยบรรณานุกรมส่วนบุคคลเกี่ยวกับอัลกอริทึมการตรวจสอบประเภทและต้องการคำแนะนำ อัลกอริทึมการตรวจสอบประเภทกลยุทธ์และเทคนิคทั่วไปที่ใช้มากที่สุดคืออะไร? ฉันสนใจอัลกอริทึมการตรวจสอบประเภทที่ซับซ้อนโดยเฉพาะอย่างยิ่งในภาษาที่พิมพ์แบบคงที่ที่รู้จักกันอย่างกว้างขวางเช่น C ++, Java 5+, Scala หรืออื่น ๆ IE, อัลกอริทึมการตรวจสอบประเภทที่ไม่ง่ายมากเนื่องจากการพิมพ์ภาษาพื้นฐานง่าย ๆ (เช่น Java 1.4 และต่ำกว่า) ฉันไม่สนใจภาษาที่เฉพาะเจาะจง X, Y หรือ Z ฉันสนใจในการตรวจสอบอัลกอริทึมโดยไม่คำนึงถึงภาษาที่พวกเขากำหนดเป้าหมาย หากคุณให้คำตอบเช่น "ภาษา L ที่คุณไม่เคยได้ยินเกี่ยวกับสิ่งที่พิมพ์อย่างยิ่งและการพิมพ์มีความซับซ้อนมีอัลกอริทึมการตรวจสอบประเภทที่ A, B และ C โดยการตรวจสอบ X และ Y โดยใช้อัลกอริทึม Z" หรือ " กลยุทธ์ X และ Y ที่ใช้สำหรับ Scala และตัวแปร Z ของ A ที่ใช้สำหรับ …

3
ภาษานี้ถูกกำหนดโดยใช้ช่วงเวลาคู่ปกติหรือไม่?
ปล่อย L ={ an| ∃หน้า≥ n พี, p + 2 เป็นจำนวนมาก} L={an|∃พี≥n พี, พี+2 เป็นนายก}.\qquad L = \{a^n \mid \exists_{p \geq n}\ p\,,\ p+2 \text{ are prime}\}. คือปกติ?LLL คำถามนี้มองที่น่าสงสัยได้อย่างรวดเร็วก่อนและฉันได้รู้ว่ามันมีการเชื่อมต่อกับการคาดเดาที่สำคัญคู่ ปัญหาของฉันคือการคาดเดายังไม่ได้รับการแก้ไขดังนั้นฉันไม่แน่ใจว่าฉันจะตัดสินใจได้อย่างไรว่าภาษาดังกล่าวเป็นปกติ

1
ลดปัญหาเส้นทาง 3SAT ไปยัง Hamiltonian ได้ง่าย
มีการลดลงของหนังสือ Sipser "รู้เบื้องต้นเกี่ยวกับทฤษฎีการคำนวณ" ในหน้า 286 จาก 3SAT ถึงปัญหาเส้นทางมิลโตเนียน มีการลดลงที่ง่ายขึ้น? โดยง่ายฉันหมายถึงการลดที่จะเข้าใจได้ง่ายขึ้น (สำหรับนักเรียน) มีการลดลงที่ใช้จำนวนตัวแปรเชิงเส้นหรือไม่? การลดลงของ Sipser ใช้ตัวแปรโดยที่คือจำนวนของ clauses และคือจำนวนของตัวแปร ในคำอื่น ๆ ก็เป็นไปได้สำหรับการลดลงจะระเบิดขนาดจากไป2) มีการลดลงอย่างง่าย ๆ หรือไม่ที่ขนาดของเอาต์พุตของการลดเป็นเส้นตรงในขนาดของอินพุตO ( k n )O(kn)O(kn)kkknnnsssO ( s2)O(s2)O(s^2) หากไม่สามารถทำได้มีเหตุผลหรือไม่ นั่นจะหมายถึงผลลัพธ์ที่ไม่ทราบแน่ชัดในความซับซ้อน / อัลกอริทึมหรือไม่?

4
กลยุทธ์ในการทำความเข้าใจ TCS
ฉันเป็นนักศึกษาระดับบัณฑิตศึกษาที่เรียนวิชาทฤษฎีการคำนวณและฉันมีปัญหาร้ายแรงในการผลิตเนื้อหาเมื่อฉันถูกขอให้ทำ ฉันสามารถติดตามตำราเรียน (รู้เบื้องต้นเกี่ยวกับทฤษฎีการคำนวณโดย Michael Sipser) และการบรรยาย อย่างไรก็ตามเมื่อถูกขอให้พิสูจน์บางอย่างหรือหาคำอธิบายอย่างเป็นทางการของ TM ที่เฉพาะเจาะจงฉันแค่หายใจไม่ออก ฉันจะทำอย่างไรในสถานการณ์เช่นนี้? ฉันเดาว่าปัญหาของฉันคือการเข้าใจแนวคิดนามธรรมอย่างสมบูรณ์จนถึงจุดที่ฉันสามารถใช้ได้จริง มีวิธีที่มีแบบแผนในการเข้าใกล้แนวคิดใหม่ที่เป็นนามธรรมและในที่สุดก็สร้างสัญชาตญาณ?

5
ความแตกต่างในการเขียนโปรแกรมแบบไดนามิก: ตัวอย่างที่จำเป็น!
ฉันทำงานเกี่ยวกับการเขียนโปรแกรมแบบไดนามิกมาระยะหนึ่งแล้ว วิธีบัญญัติของการประเมินการเรียกใช้การเขียนโปรแกรมแบบไดนามิกคือการสร้างตารางของค่าที่จำเป็นทั้งหมดและกรอกข้อมูลทีละแถว ดูตัวอย่างจากCormen, Leiserson และ al: "Introduction to Algorithms"สำหรับการแนะนำ ฉันมุ่งเน้นที่รูปแบบการคำนวณบนโต๊ะในสองมิติ (การกรอกข้อมูลแบบแถวต่อแถว) และตรวจสอบโครงสร้างของการพึ่งพาเซลล์นั่นคือเซลล์ใดที่ต้องทำก่อนที่จะคำนวณอื่นได้ เราแสดงด้วยชุดของดัชนีของเซลล์ที่เซลล์ของฉันขึ้นอยู่กับ โปรดทราบว่าΓจะต้องไม่มีรอบΓ(i)Γ(i)\Gamma(\mathbf{i})ii\mathbf{i}ΓΓ\Gamma ฉันสรุปจากฟังก์ชันจริงที่คำนวณและมีสมาธิกับโครงสร้างแบบเรียกซ้ำ อย่างเป็นทางการผมพิจารณา recurrrence ที่จะเขียนโปรแกรมแบบไดนามิกถ้ามันมีรูปแบบddd d(i)=f(i,Γ˜d(i))d(i)=f(i,Γ~d(i))\qquad d(\mathbf{i}) = f(\mathbf{i}, \widetilde{\Gamma}_d(\mathbf{i})) กับ , ~ Γ d ( ฉัน ) = { ( J , d ( ญ ) ) | เจ ∈ Γ d ( ฉัน ) }และฉบางคน …

4
การกำหนดเวลาแบบมีส่วนร่วมหยุดกระบวนการชั่วคราวเมื่อดำเนินการ I / O
การอ้างอิงระบบปฏิบัติการหลายแห่งบอกว่าด้วยการทำงานหลายอย่างร่วมกัน (เมื่อเทียบกับการยึดเอาเสียก่อน) กระบวนการจะรักษา CPU จนกว่าจะระงับตัวเองโดยสมัครใจ หากกระบวนการที่กำลังดำเนินการตามคำขอ I / O ที่ไม่สามารถตอบสนองได้ทันที (เช่นขอให้ใช้รหัสจังหวะที่ยังไม่พร้อมใช้งาน) ตัวกำหนดตารางเวลาจะระงับหรือไม่เก็บ CPU ไว้จนกว่าจะสามารถให้บริการได้จริงหรือไม่ [แก้ไขเพื่อแทนที่ "บล็อกบน i / o" ด้วย "ทำการร้องขอ I / O ที่ไม่สามารถทำได้ทันที"]

2
การดำเนินการ 'ความแตกต่าง' เพิ่มความหมายให้กับภาษาคิวรีที่มี 'เข้าร่วม' อยู่แล้วหรือไม่?
ตัวดำเนินการที่ตั้งค่าความแตกต่าง (เช่นEXCEPTในตัวแปร SQL บางตัว) เป็นหนึ่งในตัวดำเนินการพื้นฐานจำนวนมากของพีชคณิตเชิงสัมพันธ์ อย่างไรก็ตามมีฐานข้อมูลบางอย่างที่ไม่สนับสนุนตัวดำเนินการความแตกต่างโดยตรง แต่การสนับสนุนLEFT JOIN(ชนิดของการรวมภายนอก) และในทางปฏิบัติสามารถใช้แทนการตั้งค่าความแตกต่างเพื่อให้ได้ผลเช่นเดียวกัน สิ่งนี้หมายความว่าพลังการแสดงออกของภาษาแบบสอบถามเหมือนกันแม้ว่าจะไม่มีตัวดำเนินการความแตกต่างที่กำหนดไว้ตราบใดที่LEFT JOINยังคงมีการใช้งานตัวดำเนินการอยู่ เราจะพิสูจน์ความจริงข้อนี้ได้อย่างไร?

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

4
วิธีแสดงให้เห็นว่าภาษาปกติ“ ตรงกันข้าม” นั้นเป็นภาษาปกติ
ฉันติดคำถามต่อไปนี้: "ภาษาปกติเป็นภาษาที่แน่นอนที่ได้รับการยอมรับโดยออโต จำกัด เนื่องจากข้อเท็จจริงนี้แสดงให้เห็นว่าหากภาษาได้รับการยอมรับจากออโตเมติก จำกัดบางอันดังนั้นก็เป็นที่ยอมรับของบางอัน จำกัดประกอบด้วยทุกคำ ของย้อนกลับ "LLLLRLRL^{R}LRLRL^{R}LLL

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