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

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

1
ค้นหาพหุนามในการค้นหาสองหรือสามครั้ง
กล่องดำของf(x)f(x)f(x)หมายความว่าฉันสามารถประเมินพหุนามได้ทุกจุดf(x)f(x)f(x) การป้อนข้อมูล : กล่องสีดำของ monic พหุนามปริญญาdf(x)∈Z+[x]f(x)∈Z+[x]f(x) \in\mathbb{Z}^+[x]ddd เอาท์พุท:ค่าสัมประสิทธิ์ของพหุนาม(x)f ( x )dddf(x)f(x)f(x) อัลกอริทึมของฉัน:อนุญาต f(x)=xd+ad−1xd−1+⋯+a1x+a0f(x)=xd+ad−1xd−1+⋯+a1x+a0f(x) = x^{d} + a_{d-1} x^{d-1} + \cdots + a_1 x + a_0 ประเมินค่าพหุนามที่dหลาย ๆ จุดโดยใช้กล่องดำและรับระบบสมการเชิงเส้น ตอนนี้ฉันสามารถแก้ระบบสมการเชิงเส้นเพื่อให้ได้ค่าสัมประสิทธิ์ที่ต้องการf(x)f(x)\mathcal{f(x)}ddd อย่างไรก็ตามในกรณีนี้ฉันต้องการแบบสอบถามจำนวนมากไปยังกล่องดำ ฉันต้องการที่จะลดจำนวนแบบสอบถาม มีวิธีใดที่จะลดจำนวนข้อความค้นหาให้เหลือเพียงสองหรือสามข้อO(d)O(d)\mathcal{O(d)}

2
โปรแกรมความถูกต้องสเปค
จากวิกิพีเดีย: ในทางวิทยาการคอมพิวเตอร์เชิงทฤษฎีความถูกต้องของอัลกอริทึมถูกยืนยันเมื่อมีการกล่าวว่าอัลกอริทึมนั้นถูกต้องตามข้อกำหนด แต่ปัญหาคือการได้สเปค "ที่เหมาะสม" ไม่ใช่งานที่ไม่สำคัญและไม่มีวิธีการที่ถูกต้อง 100% (เท่าที่ฉันรู้) เพื่อให้ได้สิ่งที่ถูกต้องมันเป็นเพียงการประมาณดังนั้นถ้าเราจะ ใช้เพรดิเคตเป็นสเปคเพียงเพราะมัน "ดูเหมือน" เหมือน "หนึ่ง" ทำไมไม่ลองใช้โปรแกรมให้ถูกต้องเพียงเพราะมัน "ดู" ถูกต้อง?



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) -> list factors = new list if number < 0 factors.append(-1) number = -number i = 2 while i <= number while number % i == 0 factors.append(i) number …

4
ระบบปฏิบัติการสามารถทำงานบนชิปตัวเดียวกับที่ควรจะจัดการได้อย่างไร
จากการอ่านของฉันเกี่ยวกับระบบปฏิบัติการ (อ่านเนื้อหาพื้นฐานใน Wikipedia, เว็บไซต์เทคโนโลยี ฯลฯ ) ฉันได้เรียนรู้ว่าระบบปฏิบัติการเป็นโปรแกรมที่อนุญาตให้โปรแกรมและแอปพลิเคชันโต้ตอบกับฮาร์ดแวร์ได้อย่างมีประสิทธิภาพและปลอดภัย อย่างไรก็ตามฉันสับสนเกี่ยวกับวิธีที่ระบบปฏิบัติการกำกับดูแลการทำงานของคอมพิวเตอร์เมื่อจำเป็นต้องดำเนินการเอง ฉันหมายถึงอะไร วิธีที่ฉันจินตนาการถึงระบบปฏิบัติการให้ทำงานคือบนคอมพิวเตอร์จะมีซีพียูสองตัว หนึ่งที่รันระบบปฏิบัติการตลอดเวลาและอื่น ๆ ที่ใช้ระบบปฏิบัติการเพื่อเรียกใช้คอมพิวเตอร์ อย่างไรก็ตามปรากฎว่าระบบปฏิบัติการกำลังทำงานบน CPU เดียวกันกับที่กระบวนการอื่นเป็น นี่เป็นเหมือนผู้จัดการที่ต้องทำงานในสายการผลิตเดียวกับพนักงานของเขาและจะได้รับการใช้เครื่องมือไฟฟ้าเมื่อมีพนักงานคนอื่นทำกับพวกเขา เขาจะไม่เป็นผู้จัดการที่มีประสิทธิภาพมากเพราะเขาจะไม่มีความสามารถในการออกคำสั่งหากพนักงานของเขาไม่มีระเบียบวินัยเล็กน้อย ดังนั้นจะเป็นไปได้อย่างไรที่ระบบปฏิบัติการจะใช้เวลาส่วนหนึ่งของ CPU เดียวกันที่ต้องแชร์ระหว่างกระบวนการอื่นทั้งหมด ท้ายนี้การทำงานออกมาเป็นอย่างไร

3
จุดประสงค์ของการใช้ NIL คืออะไรเพื่อแสดงโหนดว่าง
ในหลักสูตรอัลกอริทึมและโครงสร้างข้อมูลของฉันอาจารย์สไลเดอร์และหนังสือ ( Introduction to Algorithms รุ่นที่ 3 ) ใช้คำNILที่แสดงถึงตัวอย่างเช่นลูกของโหนด (ในต้นไม้) ที่ไม่มีอยู่ ครั้งหนึ่งระหว่างการบรรยายแทนที่จะพูดNILเพื่อนร่วมชั้นของฉันพูดnullและอาจารย์แก้ไขเขาและฉันก็ไม่เข้าใจว่าทำไมอาจารย์เน้นคำนี้ มีเหตุผลที่คนใช้คำNILแทนnullหรือnoneหรือคำอื่น ๆ ? ไม่NILได้มีความหมายบางอย่างโดยเฉพาะอย่างยิ่งที่คนอื่นไม่ได้? มีเหตุผลทางประวัติศาสตร์บ้างไหม? โปรดทราบว่าฉันได้เห็นบางสถานที่รอบ ๆ เว็บเช่นคำที่nullใช้แทนNILแต่โดยปกติจะใช้คำสุดท้าย

4
ค้นหาเวกเตอร์บิตที่ไม่ได้ซ้อนทับกัน
ผมให้คุณรายการnnn bitvectors ของความกว้างของkkkkเป้าหมายของคุณคือส่งคืน bitvector สองตัวจากรายการที่ไม่มี 1s ร่วมกันหรือเพื่อรายงานว่าไม่มีคู่ดังกล่าวอยู่ ตัวอย่างเช่นถ้าผมให้คุณ[00110,01100,11000][00110,01100,11000][00110, 01100, 11000]แล้วทางออกเดียวคือ{00110,11000}{00110,11000}\{00110, 11000\} } อีกวิธีหนึ่งอินพุต[111,011,110,101][111,011,110,101][111, 011, 110, 101]ไม่มีวิธีแก้ปัญหา และรายชื่อใด ๆ ที่มีทุกศูนย์ bitvector 000...0000...0000...0และองค์ประกอบอื่นeeeมีวิธีการแก้ปัญหาที่น่ารำคาญ{e,000...0}{e,000...0}\{e, 000...0\} } นี่เป็นตัวอย่างที่ยากขึ้นเล็กน้อยโดยไม่มีวิธีแก้ปัญหา (แต่ละแถวเป็นบิตเวกเตอร์สี่เหลี่ยมสีดำคือ 1 วินาทีและสี่เหลี่ยมสีขาวเป็น 0s): ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ □ □ …

3
สิ่งที่รับประกันทำให้ระบบปฏิบัติการแบบเรียลไทม์“ นุ่ม” นั้นมีให้
ฉันคิดว่าฉันรู้ว่าระบบปฏิบัติการแบบเรียลไทม์ "ยาก" คืออะไร เป็นระบบปฏิบัติการที่มีตัวกำหนดตารางเวลาที่จัดทำสัญญากับแอ็พพลิเคชันโปรแกรมเมอร์ แอปพลิเคชันให้กำหนดเวลากับแต่ละคำขอการจัดสรรทรัพยากร หากคำขอกำหนดเวลาเป็นไปได้ผู้จัดตารางเวลารับประกันว่าแต่ละทรัพยากรจะถูกจัดสรรให้กับแอปพลิเคชันที่ร้องขอก่อนกำหนดส่ง การรับประกันนั้นเพียงพอที่จะทำให้โปรแกรมเมอร์แอปพลิเคชันสามารถให้เหตุผลเกี่ยวกับเวลาแฝงสูงสุดและปริมาณงานขั้นต่ำของคำขอเฉพาะ คำจำกัดความทั้งหมดที่ฉันพบในระบบ "แบบเรียลไทม์" แบบนิ่ม "ดูเหมือนไม่มีความหมายสำหรับฉัน Wikipedia พูดว่า ประโยชน์ของผลลัพธ์จะลดลงหลังจากวันครบกำหนดดังนั้นจึงลดคุณภาพการบริการของระบบ uhhhh ตกลง. ตามเกณฑ์ที่ว่า Windows 95 นั้นเป็นระบบแบบเรียลไทม์และ 3BSD ก็เช่นกันและเป็น Linux Wikipedia ไม่ได้เป็นแหล่งที่มาที่ดี แต่ความนิยมของ Google ในอีกไม่กี่ครั้งที่ผ่านมานั้นไม่ค่อยดีนัก ตัวอย่างเช่นhttp://users.ece.cmu.edu/~koopman/des_s99/real_time/พูดว่า ในระบบแบบเรียลไทม์ที่อ่อนนุ่มสามารถยอมรับการดำเนินการที่ลดลงในการโหลดสูงสุดที่เกิดขึ้นน้อยมาก นั่นไม่ใช่สัญญานั่นเป็นวิธีแฟนซีที่จะไม่พูดอะไร ตัวอย่างของการรับประกัน / สัญญาแบบเรียลไทม์นุ่ม ๆ ที่เสนอโดยระบบปฏิบัติการจริงคืออะไร ฉันกำลังหาคำตอบของแบบฟอร์ม: ใน (ชื่อระบบปฏิบัติการ) หากโปรแกรมเมอร์ทำ (what-programmer-needs-to-do) ดังนั้นระบบปฏิบัติการรับประกัน (what-the-system-guarantee)

4
ทำไมจำนวนฉันทามติสำหรับการทดสอบและตั้ง 2
ตามที่วิกิพีเดีย , การดำเนินการทดสอบและตั้งค่าสามารถแก้ไขปัญหาฉันทามติที่ปราศจากการรอคอยสำหรับกระบวนการที่เกิดขึ้นพร้อมกันไม่เกินสองกระบวนการ ทำไมมันไม่สามารถแก้ปัญหามากกว่าสองกระบวนการได้?

3
เส้นทางการเหนี่ยวนำที่สร้างสรรค์?
ฉันกำลังอ่านหนังสือ HoTTและฉันมีช่วงเวลายากลำบากในการบอกทาง เมื่อฉันดูประเภทในส่วน1.12.1 : ผมไม่มีปัญหาการทำความเข้าใจสิ่งที่หมายถึง (ผมเพิ่งได้เขียนประเภทจากหน่วยความจำเพื่อตรวจสอบว่า)ind=A:∏C:∏x,y:A(x=Ay)→U((∏x:AC(x,x,reflx))→∏x,y:A∏p:x=AyC(x,y,p)),ind=A:∏C:∏x,y:A(x=Ay)→U((∏x:AC(x,x,reflx))→∏x,y:A∏p:x=AyC(x,y,p)),\text{ind}_{=_A}:\prod_{C:\prod\limits_{x,y:A}(x=_Ay)\to \mathcal{U}} \left( \left(\prod_{x:A}C(x,x,\text{refl}_x)\right) \to \prod_{x,y:A}\prod_{p:x=_Ay} C(x,y,p) \right), สิ่งที่ฉันมีปัญหาคือคำสั่งถัดไปมาก: ความประทับใจครั้งแรกของฉันคือการแสดงออกครั้งสุดท้ายนี้ไม่ได้กำหนดฟังก์ชั่นผลลัพธ์ f : ∏ x , y : A ∏ p : x = A y C ( x , y , p ) ,with the equalityind=A(C,c,x,x,reflx):≡c(x)with the equalityind=A(C,c,x,x,reflx):≡c(x)\text{with the equality}\quad \text{ind}_{=_A}(C,c,x,x,\text{refl}_x):\equiv c(x)f:∏x,y:A∏p:x=AyC(x,y,p),f:∏x,y:A∏p:x=AyC(x,y,p),f:\prod_{x,y:A}\prod_{p:x=_Ay} C(x,y,p), แต่เพียงระบุคุณสมบัติของมัน นั่นคือตรงกันข้ามกับตัวอย่างก่อนหน้าของหลักการการเหนี่ยวนำ …

4
มีใครสร้างระบบจริงที่เขียนโปรแกรมคอมพิวเตอร์จากสเปค?
มีใครเคยเขียนระบบ (ซอฟต์แวร์หรือคำอธิบายโดยละเอียดบนกระดาษพร้อมตัวอย่างง่ายๆ) ที่สร้างโปรแกรมคอมพิวเตอร์หรือไม่? ฉันป้อนและสร้างโปรแกรมที่แสดงรายการหมายเลขเฉพาะน้อยกว่า 10 ถูกกำหนดเป็น อาจารย์บอกว่าพวกเขาทำได้ แต่ไม่มีใครให้ตัวอย่างที่สมบูรณ์จริง ๆPr i m e ( x ) ∧ x &lt; 10PRผมม.อี(x)∧x&lt;10Prime(x) \wedge x<10Pr i m e ( x )PRผมม.อี(x)Prime(x)1 &lt; x ∧ ∄ส. t . 1 &lt; A ∧ A &lt; x ∧ x = A × B , พร้อม A, B …

8
OOP แก้ปัญหาในทางปฏิบัติอย่างไร
ผมได้ศึกษาหนังสือ"C ++ Demystified" ตอนนี้ฉันเริ่มอ่าน"การเขียนโปรแกรมเชิงวัตถุใน Turbo C ++ รุ่นแรก (รุ่นที่ 1)"โดย Robert Lafore ฉันไม่มีความรู้เกี่ยวกับการเขียนโปรแกรมใด ๆ ซึ่งอยู่นอกเหนือหนังสือเหล่านี้ หนังสือเล่มนี้อาจล้าสมัยเพราะอายุ 20 ปี ฉันมีฉบับล่าสุดฉันใช้รุ่นเก่าเพราะฉันชอบส่วนใหญ่ฉันแค่ศึกษาแนวคิดพื้นฐานของ OOP ที่ใช้ใน C ++ ผ่านหนังสือรุ่นแรกของ Lafore หนังสือของ Lafore เน้นว่า "OOP" มีประโยชน์สำหรับโปรแกรมขนาดใหญ่และซับซ้อนเท่านั้น มีการกล่าวในหนังสือ OOP ทุกเล่ม (รวมถึงในหนังสือของ Lafore) ว่ากระบวนทัศน์กระบวนงานมีแนวโน้มที่จะเกิดข้อผิดพลาดเช่นข้อมูลทั่วโลกและมีความเสี่ยงจากการทำงานได้ง่าย ว่ากันว่าโปรแกรมเมอร์สามารถทำผิดพลาดอย่างสุจริตในภาษาขั้นตอนเช่นโดยการทำหน้าที่ที่เสียหายข้อมูลโดยไม่ตั้งใจ พูดอย่างสุจริตฉันกำลังโพสต์คำถามของฉันเพราะฉันไม่เข้าใจคำอธิบายที่ให้ไว้ในหนังสือเล่มนี้: การเขียนโปรแกรมเชิงวัตถุใน C ++ (รุ่นที่ 4)ฉันไม่เข้าใจข้อความเหล่านี้ที่เขียนไว้ในหนังสือของ Lafore: การเขียนโปรแกรมเชิงวัตถุได้รับการพัฒนาเนื่องจากข้อ จำกัด ถูกค้นพบในแนวทางก่อนหน้าของการเขียนโปรแกรม .... เนื่องจากโปรแกรมมีขนาดใหญ่ขึ้นและซับซ้อนยิ่งขึ้นแม้แต่วิธีการเขียนโปรแกรมที่มีโครงสร้างก็เริ่มแสดงสัญญาณของความเครียด ... …

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

5
วิธีการพิสูจน์ปัญหาไม่สมบูรณ์ NP?
มีเทคนิคทั่วไปในการพิสูจน์ปัญหาที่ไม่สมบูรณ์แบบหรือไม่? ฉันได้รับคำถามนี้จากการสอบที่ขอให้ฉันแสดงว่าปัญหาบางอย่าง (ดูด้านล่าง) นั้นเป็นปัญหาแบบสมบูรณ์หรือไม่ ฉันไม่สามารถคิดถึงทางออกที่แท้จริงและเพิ่งพิสูจน์ว่าเป็นใน P. แน่นอนว่านี่ไม่ใช่คำตอบที่แท้จริง NP-Complete หมายถึงชุดของปัญหาที่อยู่ใน NP และปัญหา NP ทั้งหมดสามารถลดลงได้ ดังนั้นหลักฐานใด ๆ ควรขัดแย้งอย่างน้อยหนึ่งในสองเงื่อนไขนี้ ปัญหาเฉพาะนี้เป็น P (และเป็น NP) ดังนั้นฉันติดอยู่กับการพิสูจน์ว่ามีปัญหาบางอย่างใน NP ที่ไม่สามารถลดปัญหานี้ได้ วิธีนี้สามารถพิสูจน์ได้บนโลก? นี่คือปัญหาเฉพาะที่ฉันได้รับจากการสอบ: ให้เป็นชุดของสตริงในรูปแบบปกติที่ไม่ต่อเนื่อง ให้D N F S A Tเป็นภาษาของสตริงจากD N Fที่เป็นที่พอใจโดยการกำหนดตัวแปรบางอย่าง แสดงว่าD N F S A Tอยู่ใน NP-Complete หรือไม่DNFDNFDNFDNFSATDNFSATDNFSATDNFDNFDNFDNFSATDNFSATDNFSAT

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