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

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

4
เหตุใดฟังก์ชันที่คำนวณได้จึงเรียกว่าฟังก์ชันแบบเรียกซ้ำ
ในทฤษฎีการคำนวณฟังก์ชันการคำนวณก็เรียกว่าฟังก์ชันแบบเรียกซ้ำ อย่างน้อยแรกพบพวกเขาไม่มีอะไรเหมือนกันกับสิ่งที่คุณเรียกว่า "recursive" ในการเขียนโปรแกรมแบบวันต่อวัน (เช่นฟังก์ชั่นที่เรียกพวกเขาเอง) ความหมายที่แท้จริงของการเกิดซ้ำในบริบทของการคำนวณคืออะไร? ทำไมฟังก์ชั่นเหล่านี้จึงเรียกว่า "เวียนเกิด"? หากต้องการกล่าวไว้ในคำอื่น ๆ : การเชื่อมต่อระหว่างสองความหมายของ "การเรียกซ้ำ" คืออะไร?

1
ความซับซ้อนของการถ่าย mod
ดูเหมือนว่าคำถามที่ควรมีคำตอบง่าย ๆ แต่ฉันไม่มีคำถามที่ชัดเจน: ถ้าฉันมีสองหมายเลขบิตสิ่งที่เป็นความซับซ้อนของการคำนวณ ?nnna,pa,pa, pamodpamodpa\bmod p การหารaaaด้วยppp จะใช้เวลา O(M(n))O(M(n))O(M(n))โดยที่M(n)M(n)M(n)คือความซับซ้อนของการคูณ แต่modmod\bmodสามารถทำงานได้เร็วขึ้นเล็กน้อยหรือไม่

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

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

1
แยกแยะขั้นตอนการตัดสินใจกับ Solver SMT เทียบกับ Theorem Prover เทียบกับ Converaint Solver
คำศัพท์เหล่านั้นทำให้ฉันสับสน ตามที่ฉันเข้าใจ เครื่องมือแก้ปัญหา SAT: ตัดสินความพึงพอใจของตรรกะเชิงประพจน์ (ใช้ DPLL หรือ Local Search) ขั้นตอนการตัดสินใจเป็นกระบวนการในการตัดสินใจความพึงพอใจของทฤษฎีอันดับหนึ่งที่สามารถตัดสินใจได้ SMT solver เป็นขั้นตอนการตัดสินใจ + ตัวแก้ SAT ทฤษฎีบทพิสูจน์ว่าบางสิ่งเช่น Dynamic Logic เช่นเครื่องมือ KeY ข้อ จำกัด การแก้ปัญหา: ฉันไม่รู้ แต่ฉันเห็นผู้คนเรียก Z3 ว่าเป็นผู้พิสูจน์ทฤษฎีบท ดังนั้นฉันไม่รู้วิธีที่จะทำให้ชัดเจนคำเหล่านั้น และคำทั่วไปมากที่สุดสำหรับพวกเขาทั้งหมดคืออะไร? ขอขอบคุณ.

2
เหตุใด push_back ใน C ++ เวกเตอร์จึงตัดจำหน่ายอย่างต่อเนื่อง
ฉันกำลังเรียนรู้ C ++ และพบว่าเวลาทำงานของฟังก์ชัน push_back สำหรับเวกเตอร์นั้นคงที่ "ตัดจำหน่าย" เอกสารอธิบายเพิ่มเติมว่า "หากการจัดสรรใหม่เกิดขึ้นการจัดสรรใหม่จะเป็นแบบเชิงเส้นในขนาดทั้งหมด" นี่ไม่ควรหมายความว่าฟังก์ชัน push_back เป็นโดยที่คือความยาวของเวกเตอร์ ท้ายที่สุดเราสนใจการวิเคราะห์กรณีที่เลวร้ายที่สุดใช่ไหม?O ( n )O(n)O(n)nnn ฉันเดาว่าสำคัญไม่เข้าใจว่าคำคุณศัพท์ "ตัดจำหน่าย" เปลี่ยนแปลงเวลาทำงานอย่างไร

4
อะไรคือความแตกต่างระหว่าง Neural Network ระบบ Deep Learning และ Deep Belief Network
อะไรคือความแตกต่างระหว่าง Neural Network ระบบ Deep Learning และ Deep Belief Network ในขณะที่ฉันจำเครือข่ายประสาทขั้นพื้นฐานของคุณเป็นสิ่งที่ค่อนข้างเป็น 3 ชั้นและฉันมีระบบความเชื่อลึกที่อธิบายว่าเป็นเครือข่ายประสาทที่ซ้อนกันอยู่ด้านบนของกันและกัน ฉันไม่เคยได้ยินมาก่อนเกี่ยวกับ Deep Learning Systems แต่ฉันสงสัยอย่างมากว่ามันเป็นคำพ้องสำหรับ Deep Belief System มีใครยืนยันได้ไหม

2
จ่ายรวมปัญหาการเรียกเก็บเงิน
มีคนคนที่โต๊ะ ฉันคนวันที่มีการจ่ายเงินหน้าฉันดอลลาร์nnnผมiiพีผมpip_i บางคนไม่ได้มีค่าใช้จ่ายที่เหมาะสมในการจ่ายตรงเพื่อให้พวกเขาขึ้นมาด้วยวิธีดังต่อไปนี้พีผมpip_i ก่อนอื่นทุกคนเอาเงินไปวางบนโต๊ะ จากนั้นแต่ละคนจะนำเงินที่ได้ชำระกลับมามากเกินไป ตั๋วเงินมีชุดราคาคงที่ (ไม่ใช่ส่วนหนึ่งของอินพุต) ตัวอย่าง: สมมติว่ามีสองคนคืออลิซและบ๊อบ อลิซเป็นหนี้$ 5 และมีห้า$ 1 ค่า บ๊อบเป็นหนี้$ 2 และมีบิลหนึ่งใบ$ 5 หลังจากอลิซกับบ็อบเอาเงินไปวางบนโต๊ะแล้วบ็อบก็จะได้เงินคืน3 ดอลลาร์และทุกคนก็มีความสุข แน่นอนมีบางครั้งที่ไม่ต้องใส่เงินทั้งหมดลงบนโต๊ะ ตัวอย่างเช่นหากอลิซมีตั๋วเงินหนึ่งพันดอลลาร์คุณไม่จำเป็นต้องให้เธอเก็บเงินทั้งหมดไว้บนโต๊ะแล้วเอาคืนส่วนใหญ่ ฉันต้องการค้นหาอัลกอริทึมที่มีคุณสมบัติดังต่อไปนี้: ข้อมูลป้อนเข้าจะระบุจำนวนคนจำนวนเงินที่แต่ละคนเป็นหนี้และจำนวนเงินของแต่ละสกุลเงินที่แต่ละคนมี อัลกอริธึมบอกให้แต่ละคนทราบว่าธนบัตรใบใดวางบนโต๊ะในรอบแรก อัลกอริทึมบอกให้แต่ละคนทราบว่าจะลบรายการใดออกจากตารางในรอบที่สอง จำนวนตั๋วเงินที่วางไว้บนโต๊ะ + จำนวนตั๋วเงินที่ลบออกจากตารางจะลดลง หากไม่มีวิธีแก้ปัญหาที่เป็นไปได้อัลกอริทึมก็จะส่งคืนข้อผิดพลาด

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

1
การเติมตารางการกำหนดเส้นทางของ Pastry ทำงานอย่างไร
คำถามนี้ถูกย้ายจากการแลกเปลี่ยนกองวิศวกรรมซอฟต์แวร์เพราะสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันพยายามใช้ตารางแฮชแบบกระจายของ Pastry แต่มีบางสิ่งที่หลีกเลี่ยงความเข้าใจของฉัน ฉันหวังว่าบางคนสามารถชี้แจงได้ คำเตือน : ฉันไม่ใช่นักเรียนวิทยาศาสตร์คอมพิวเตอร์ ฉันเรียนวิชาวิทยาการคอมพิวเตอร์สองหลักสูตรในชีวิตของฉันและไม่ได้จัดการกับสิ่งที่ซับซ้อนจากระยะไกล ฉันทำงานกับซอฟต์แวร์มาหลายปีแล้วดังนั้นฉันจึงรู้สึกว่าขึ้นอยู่กับภารกิจการนำไปปฏิบัติถ้าฉันสามารถสรุปแนวคิดได้ ดังนั้นฉันอาจจะพลาดอะไรบางอย่างที่ชัดเจน ฉันได้อ่านกระดาษที่ผู้แต่งตีพิมพ์ [1] และฉันมีความก้าวหน้าที่ดี แต่ฉันก็ยังคงติดใจอยู่กับประเด็นนี้ในตารางการจัดเส้นทาง: กระดาษอ้างว่า ตารางการจัดเส้นทางของโหนดคือถูกจัดเป็น แถวที่มีรายการแต่ละรายการ รายการที่แถวของตารางเส้นทางแต่ละอ้างถึงโหนดที่ nodeId แบ่งปัน nodeId ของโหนดปัจจุบันในตัวเลข fi rst n หลัก แต่มีหลักหนึ่งมีค่าที่เป็นไปได้หนึ่งในนอกเหนือจากหลักใน id ของโหนดปัจจุบันRRR⌈log2bN⌉⌈เข้าสู่ระบบ2ข⁡ยังไม่มีข้อความ⌉\lceil \log_{2^b} N\rceil2b−12ข-12^b - 12b−12ข-12^b - 1nnnn+1n+1n + 12b−12ข-12^b - 1n+1n+1n + 1 ย่อมาจากตัวแปรโปรแกรมเฉพาะมัก4 …

8
สิ่งที่เป็นแบบสุ่มจริงๆ
ฉันเป็นนักเรียนด้านวิทยาศาสตร์คอมพิวเตอร์และกำลังลงทะเบียนเรียนในหลักสูตรการจำลองระบบและการสร้างแบบจำลอง มันเกี่ยวข้องกับการจัดการกับระบบในชีวิตประจำวันรอบตัวเราและจำลองพวกเขาในสถานการณ์ที่แตกต่างกันโดยการสร้างตัวเลขสุ่มในเส้นโค้งการกระจายที่แตกต่างกันเช่น IID, Gaussian ฯลฯ เป็นต้น ฉันทำงานเกี่ยวกับโครงการ boids และมีคำถามหนึ่งที่ทำให้ฉันรู้สึกว่า "สุ่ม" ที่แท้จริงคืออะไร? ฉันหมายถึงเช่นทุกหมายเลขสุ่มที่เราสร้างแม้ในภาษาการเขียนโปรแกรมของเราเช่นผ่านMath.random()วิธีการใน Java เป็นหลักถูกสร้างขึ้นตาม "อัลกอริทึม" เราจะรู้ได้อย่างไรว่าลำดับของตัวเลขที่เราผลิตนั้นเป็นจริงโดยการสุ่มและมันจะช่วยเราในการจำลองแบบจำลองที่แม่นยำที่สุดเท่าที่จะเป็นไปได้?

3
การจัดประเภทของระบบพิมพ์ (แข็งแรง / อ่อน, ไดนามิก / คงที่)
กล่าวโดยย่อ: ระบบการจำแนกประเภทเป็นอย่างไรในบริบททางวิชาการ โดยเฉพาะอย่างยิ่งฉันสามารถหาแหล่งที่มีชื่อเสียงที่สร้างความแตกต่างระหว่างระบบประเภทที่แตกต่างกันได้อย่างไร ในความรู้สึกความยากลำบากของคำถามนี้ไม่ใช่ว่าฉันไม่สามารถหาคำตอบได้ แต่ฉันสามารถค้นหาได้มากเกินไปและไม่มีใครโดดเด่นเท่าที่ควร พื้นหลังฉันพยายามปรับปรุงบทความใน Haskell wiki เกี่ยวกับการพิมพ์ซึ่งในปัจจุบันอ้างว่ามีความแตกต่างดังต่อไปนี้: ไม่มีการพิมพ์: ภาษาไม่มีความคิดประเภทหรือจากมุมมองที่พิมพ์: มีประเภทเดียวในภาษา ภาษาแอสเซมบลีมีชนิด 'รูปแบบบิต' เท่านั้น Rexx และ Tk มีเฉพาะชนิด 'ข้อความ' แกน MatLab มีเฉพาะ 'เมทริกซ์ที่ซับซ้อนที่มีมูลค่า' ประเภท การพิมพ์ที่อ่อนแอ: มีประเภทที่แตกต่างเพียงไม่กี่ประเภทและอาจเป็นคำพ้องความหมายสำหรับหลายประเภท เช่น C ใช้ตัวเลขจำนวนเต็มสำหรับ booleans, จำนวนเต็ม, ตัวอักษร, ชุดบิตและการแจกแจง การพิมพ์ที่แข็งแกร่ง: ชุดเม็ดเล็กแบบละเอียดเช่นในภาษา Ada, ภาษา Wirthian (Pascal, Modula-2), Eiffel ทั้งหมดนี้ขัดกับการรับรู้ส่วนบุคคลของฉันซึ่งเป็นไปตาม: การพิมพ์ที่อ่อนแอ: ออบเจ็กต์มีประเภท แต่จะถูกแปลงเป็นประเภทอื่นโดยปริยายเมื่อบริบทต้องการ ยกตัวอย่างเช่น Perl, PHP และ …

1
การรวมกลุ่มเพลง (โจปัญหาวอลช์)
อินทรีเป็นหินหินใหญ่จาก 70s และ 80s รับผิดชอบสำหรับคลาสสิกเช่นHotel California พวกเขามีสองเสียงที่ค่อนข้างโดดเด่นซึ่งเป็นที่นักกีตาร์ Joe Walsh ปรากฏอยู่ (ตัวอย่างเช่นในLife in the Fast Lane ) และเป็นที่ที่เขาไม่อยู่ เพลงหลังนั้นให้ความรู้สึกที่น่าเศร้าและน่าเบื่อมากกว่า ฉันอยากรู้ว่าเข้าใจระดับที่อัลกอริทึมการเรียนรู้ (ไม่ได้รับอนุญาต) จะสามารถตรวจจับความแตกต่างระหว่างเสียงทั้งสองได้อย่างไร ใคร ๆ ก็นึกว่ามันจะง่ายที่จะบอกความแตกต่างระหว่างสปีดเมทัลกับดนตรีคลาสสิค แต่สิ่งที่เกี่ยวกับเสียงของวงดนตรีเดียวกัน ฉันจะตั้งค่าการทดสอบเช่นนี้ได้อย่างไร สมมติว่าฉันมีไฟล์เสียงที่เกี่ยวข้องในบางรูปแบบมาตรฐานแล้ว โปรดทราบว่าสิ่งนี้ควรนำไปใช้กับวงดนตรีร็อคอื่น ๆ เช่น AC / DC ที่มีการเปลี่ยนนักร้องนำในปี 1980 และอาจเป็นแนวเพลงอื่น ๆ ด้วยอาจเป็นเพลงที่ทันสมัยกว่า

1
วิธีพื้นฐานคือ matroids และ greedoids ในการออกแบบอัลกอริทึม?
ในขั้นต้นmatroidsถูกนำไปพูดคุยความคิดของการเป็นอิสระเชิงเส้นของชุดของส่วนย่อยที่บางชุดพื้นดินฉันปัญหาบางอย่างที่มีโครงสร้างนี้อนุญาตให้อัลกอริทึมโลภค้นหาวิธีแก้ปัญหาที่ดีที่สุด แนวคิดของgreedoidsต่อมาได้รับการแนะนำให้รู้จักกับโครงสร้างทั่วไปนี้เพื่อจับปัญหามากขึ้นที่ช่วยให้การแก้ปัญหาที่ดีที่สุดที่จะพบได้โดยวิธีการโลภEEEผมผมI โครงสร้างเหล่านี้เกิดขึ้นบ่อยเพียงใดในการออกแบบอัลกอริทึม นอกจากนี้บ่อยครั้งที่อัลกอริทึมโลภมักจะไม่สามารถจับภาพสิ่งที่จำเป็นในการค้นหาคำตอบที่ดีที่สุด แต่อาจยังพบวิธีแก้ปัญหาที่ดีโดยประมาณ (ตัวอย่างเช่นการบรรจุในถังขยะ) ระบุว่ามีวิธีวัดว่า "ปิด" ปัญหาคือ greedoid หรือ matroid หรือไม่?

1
มีเชือกของ Van Emde Boas ที่เทียบเท่ากับเชือกไหม?
บางคนที่ฉันรู้จักกำลังวางแผนที่จะใช้ตัวแก้ไขข้อความในอนาคตอันใกล้นี้ซึ่งทำให้ฉันคิดว่าโครงสร้างข้อมูลชนิดใดที่รวดเร็วสำหรับตัวแก้ไขข้อความ โครงสร้างที่ใช้มากที่สุดจะเห็นได้ชัดเชือกหรือบัฟเฟอร์ช่องว่าง ต้น Van Emde Boasเป็นคิวลำดับความสำคัญที่เร็วที่สุดรอบ ๆ หากคุณไม่คำนึงถึงขอบเขตบนจำนวนรายการที่คุณสามารถใส่ลงไปและค่าใช้จ่ายในการเริ่มต้นจำนวนมาก คำถามของฉันคือว่ามีโครงสร้างข้อมูลบางส่วนที่เร็วเท่ากับทรี Emde Boas หรือไม่ แต่รองรับการทำงานของโปรแกรมแก้ไขข้อความ เราต้องรองรับอักขระได้ไม่เกินในโครงสร้างข้อมูลของเรา (ดังนั้นหากเราจะสนับสนุนอักขระ ASCII ได้สูงสุด 4GB) เราได้รับอนุญาตเวลาในการเริ่มต้นโครงสร้างข้อมูลใหม่ เราต้องการสนับสนุนการดำเนินงานต่อไปนี้:mmmlogm=32log⁡m=32\log m = 32m−−√m\sqrt{m} แทรกอักขระที่ตำแหน่งใน (และเพิ่มตำแหน่งของอักขระที่ตามมาทุก ๆ 1)iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) ลบตัวอักษรที่ตำแหน่งในบันทึกเมตร)iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) กลับตัวอักษรที่ตำแหน่งในบันทึกเมตร)iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) ดังนั้นการแทรก (0, 'a') ตามด้วยการแทรก (0, 'b') ให้ผลลัพธ์เป็น "ba" จะดีกว่านี้: กลับมาเป็น 'ชี้' เพื่อดัชนีบางในบันทึกเมตร)iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) ได้รับ …

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