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

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

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

8
จะพิสูจน์ภาษาได้อย่างไร?
มีหลายวิธีในการพิสูจน์ว่าภาษาไม่ปกติแต่ฉันต้องทำอย่างไรเพื่อพิสูจน์ว่าภาษาบางอย่างเป็นปกติ ตัวอย่างเช่นหากฉันได้รับเป็นปกติฉันจะพิสูจน์ได้อย่างไรว่าต่อไปนี้เป็นปกติเช่นกันL ′LLLL′L′L' L′:={w∈L:uv=w for u∈Σ∗∖L and v∈Σ+}L′:={w∈L:uv=w for u∈Σ∗∖L and v∈Σ+}\qquad \displaystyle L' := \{w \in L: uv = w \text{ for } u \in \Sigma^* \setminus L \text{ and } v \in \Sigma^+ \} ฉันสามารถวาดออโตเมติก จำกัด แบบไม่มีการกำหนดเพื่อพิสูจน์สิ่งนี้ได้หรือไม่?

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 หมายถึงอะไร หนังสือเล่มนี้ไม่ได้อธิบาย มันเป็นเวลาหรือสำหรับที? …

5
ทำไมโปรโตคอลอินเทอร์เน็ตจำนวนมากจึงใช้ข้อความ?
จากสิ่งที่ฉันได้พบเป็นมากจำนวนมากของโปรโตคอลที่เดินทางผ่านทางอินเทอร์เน็ตเป็น "ข้อความตาม" มากกว่าไบนารี โปรโตคอลที่เป็นปัญหานั้นรวมถึง แต่ไม่ จำกัด เพียง HTTP, SMTP, FTP (ฉันคิดว่าอันนี้เป็นข้อความทั้งหมดหรือไม่), WHOIS, IRC ในความเป็นจริงบางส่วนของโปรโตคอลเหล่านี้กระโดดผ่านห่วงบางเมื่อใดก็ตามที่พวกเขาต้องการที่จะส่งข้อมูลไบนารี มีเหตุผลเบื้องหลังนี้ไหม? เห็นได้ชัดว่าโปรโตคอลบนพื้นฐานข้อความมีค่าใช้จ่ายเล็กน้อยเนื่องจากต้องการส่งข้อมูลเพิ่มเติมเพื่อส่งข้อมูลในปริมาณเท่ากัน (ดูตัวอย่างด้านล่าง) ประโยชน์ที่เกินดุลนี้คืออะไร โดยการใช้ข้อความฉันหมายถึงตัวละครส่วนใหญ่ที่ใช้ในโปรโตคอลอยู่ระหว่าง0x20(ช่องว่าง) และ0x7E( ~) โดยมี "speical character" เป็นครั้งคราวที่ใช้เพื่อจุดประสงค์พิเศษเช่น newlines, null, ETX และ EOT ตรงข้ามกับการส่งข้อมูลดิบข้อมูลไบนารีผ่านการเชื่อมต่อ ตัวอย่างเช่นการส่งจำนวนเต็ม123456เป็นข้อความจะเกี่ยวข้องกับการส่งสตริง123456(แสดงเป็น31 32 33 34 35 36เลขฐานสิบหก) ในขณะที่ค่าไบนารีแบบ 32 บิตจะถูกส่งเป็น (แสดงเป็นเลขฐานสิบหก) 0x0001E240(และตามที่คุณเห็น "มี" อักขระ null พิเศษ .

8
ตัวแปรถูกจัดเก็บในและดึงข้อมูลจากสแต็กของโปรแกรมอย่างไร
ขออภัยล่วงหน้าสำหรับความไร้เดียงสาของคำถามนี้ ฉันเป็นศิลปินอายุ 50 ปีที่พยายามเข้าใจคอมพิวเตอร์อย่างถูกต้องเป็นครั้งแรก ดังนั้นที่นี่ไป ฉันพยายามเข้าใจว่าประเภทข้อมูลและตัวแปรได้รับการจัดการโดยคอมไพเลอร์อย่างไร (โดยทั่วไปฉันรู้ว่ามันมีจำนวนมาก) ฉันขาดอะไรบางอย่างในการทำความเข้าใจเกี่ยวกับความสัมพันธ์ระหว่างหน่วยเก็บข้อมูลใน "สแต็ก" และประเภทค่าและที่เก็บข้อมูลใน "กอง" และประเภทอ้างอิง (เครื่องหมายคำพูดมีความหมายว่าฉันเข้าใจว่าเงื่อนไขเหล่านี้เป็นนามธรรม ในบริบทที่เรียบง่ายเช่นเดียวกับที่ฉันวางกรอบคำถามนี้) อย่างไรก็ตามแนวคิดง่าย ๆ ของฉันคือประเภทเช่น Booleans และจำนวนเต็มไปที่ "สแต็ค" เพราะพวกเขาสามารถเพราะพวกเขาเป็นที่รู้จักหน่วยงานในแง่ของพื้นที่จัดเก็บและขอบเขตการควบคุมได้อย่างง่ายดายตาม แต่สิ่งที่ฉันไม่ได้รับก็คือแอปพลิเคชันอ่านแล้วว่าตัวแปรในสแต็กถ้าฉันประกาศและกำหนดxเป็นจำนวนเต็มพูดx = 3และที่เก็บถูกสงวนไว้ในสแต็คจากนั้นค่าของ3มันจะถูกเก็บไว้ที่นั่น ฟังก์ชั่นเดียวกันฉันประกาศและกำหนดyเป็นพูด4แล้วจากนั้นฉันก็ใช้xในการแสดงออกอื่น (พูดz = 5 + x) โปรแกรมสามารถอ่านได้อย่างไรxเพื่อประเมินzเมื่อมันอยู่ด้านล่างyบนกอง? ฉันขาดอะไรบางอย่างชัดเจน มันเป็นที่ตั้งบนสแต็คเป็นเพียงเกี่ยวกับอายุการใช้งาน / ขอบเขตของตัวแปรและว่าสแต็คทั้งหมดสามารถเข้าถึงโปรแกรมได้ตลอดเวลา? ถ้าเป็นเช่นนั้นนั่นหมายความว่ามีบางดัชนีอื่น ๆ ที่เก็บที่อยู่ของตัวแปรในสแต็กเพื่อให้สามารถดึงค่าได้หรือไม่? แต่ฉันคิดว่าจุดทั้งหมดของสแต็คคือค่านั้นถูกเก็บไว้ในที่เดียวกับที่อยู่ตัวแปรหรือไม่ ในใจที่อ่อนแอของฉันดูเหมือนว่าหากมีดัชนีอื่นนี้เราก็กำลังพูดถึงบางสิ่งบางอย่างที่มากกว่ากอง ฉันสับสนอย่างชัดเจนและฉันแค่หวังว่าจะมีคำตอบง่ายๆสำหรับคำถามง่าย ๆ ของฉัน ขอบคุณที่อ่านมาไกลขนาดนี้

4
ทำไมต้นไม้สีแดงดำจึงเป็นที่นิยม
ดูเหมือนว่าทุกที่ที่ฉันมองมีการใช้โครงสร้างข้อมูลโดยใช้ต้นไม้สีแดงดำ ( std::setใน C ++, SortedDictionaryใน C #, ฯลฯ ) มีต้นไม้ปกคลุม (a, b), สีแดง - ดำและ AVL ในชั้นเรียนอัลกอริทึมของฉันนี่คือสิ่งที่ฉันได้ออกไป (จากการถามอาจารย์, มองผ่านหนังสือสองสามเล่มและ googling เล็กน้อย): ต้นไม้ AVL มีความลึกเฉลี่ยน้อยกว่าต้นไม้สีแดงดำดังนั้นการค้นหาค่าในต้นไม้ AVL จึงเร็วขึ้นอย่างต่อเนื่อง ต้นไม้สีแดงดำทำการเปลี่ยนแปลงโครงสร้างน้อยกว่าเพื่อความสมดุลตัวเองมากกว่าต้นไม้ AVL ซึ่งอาจทำให้พวกเขาเร็วขึ้นสำหรับการแทรก / ลบ ฉันกำลังพูดถึงสิ่งที่อาจเกิดขึ้นเพราะสิ่งนี้จะขึ้นอยู่กับต้นทุนของการเปลี่ยนแปลงโครงสร้างของต้นไม้เนื่องจากมันจะขึ้นอยู่กับรันไทม์และการดำเนินการ (อาจแตกต่างกันโดยสิ้นเชิงในภาษาที่ใช้งานได้เมื่อต้นไม้ไม่เปลี่ยนรูป) มีมาตรฐานออนไลน์มากมายที่เปรียบเทียบ AVL กับต้นไม้สีแดง - ดำ แต่สิ่งที่ทำให้ฉันสะดุดคือศาสตราจารย์ของฉันพูดโดยทั่วไปว่าโดยปกติคุณจะทำสองอย่าง: ไม่ว่าคุณจะไม่สนใจเรื่องประสิทธิภาพมากนักซึ่งในกรณีนี้ความแตกต่างระหว่าง 10-20% ของ AVL กับสีแดง - ดำในกรณีส่วนใหญ่ไม่สำคัญเลย หรือคุณสนใจเกี่ยวกับการแสดงอย่างมากในกรณีที่คุณทิ้งทั้งต้นไม้ AVL และต้นไม้สีแดงดำและไปกับต้นไม้ …

9
มีคิวลำดับความสำคัญที่มีการแยก
มีโครงสร้างข้อมูลจำนวนมากที่ใช้อินเตอร์เฟสลำดับความสำคัญ - คิว: Insert: ใส่องค์ประกอบเข้าไปในโครงสร้าง Get-Min: คืนองค์ประกอบที่เล็กที่สุดในโครงสร้าง Extract-Min: ลบองค์ประกอบที่เล็กที่สุดในโครงสร้าง โครงสร้างข้อมูลทั่วไปที่ใช้อินเทอร์เฟซนี้คือ (นาที) ฮีป โดยปกติแล้วเวลาที่ใช้งาน (ตัดจำหน่าย) ของการดำเนินการเหล่านี้คือ: แทรก: (บางครั้ง )O ( บันทึกn )O(1)O(1)\mathcal{O}(1)O(logn)O(log⁡n)\mathcal{O}(\log n) Get-Min:O(1)O(1)\mathcal{O}(1) สารสกัด - ขั้นต่ำ:O(logn)O(log⁡n)\mathcal{O}(\log n) Fibonacci กองประสบความสำเร็จในครั้งที่ทำงานเหล่านี้ตัวอย่างเช่น ตอนนี้คำถามของฉันคือต่อไปนี้: มีโครงสร้างข้อมูลที่มีเวลาทำงาน (ตัดจำหน่าย) ต่อไปนี้หรือไม่? แทรก: O(logn)O(log⁡n)\mathcal{O}(\log n) Get-Min: O ( 1 )O(1)\mathcal{O}(1) สารสกัดจากขั้นต่ำ: O ( 1 )O(1)\mathcal{O}(1) หากเราสามารถสร้างโครงสร้างดังกล่าวในเวลาO (n)O(n)\mathcal{O}(n)กำหนดอินพุตที่เรียงลำดับจากนั้นเราสามารถเช่นหาจุดตัดของเส้นบนอินพุตที่เรียงลำดับล่วงหน้าด้วยo ( nเข้าสู่ระบบn)o(nlog⁡n)o\left(\frac{n}{\log …

7
มีอะไรที่ต้องทำกับซีพียูแบบมัลติคอร์หรือไม่?
เมื่อพิจารณาว่าโปรแกรมของเราเป็นมิตรกับหลายเธรดทีมของฉันงงงวยว่ามีอะไรที่ไม่สามารถทำได้บน CPU แบบคอร์เดียวอย่างแน่นอน ฉันโพสต์ว่าการประมวลผลกราฟิกต้องใช้การประมวลผลแบบขนานอย่างหนาแน่น แต่พวกเขาอ้างว่าสิ่งต่างๆเช่น DOOM ทำบน CPU แบบ single-core ที่ไม่มี GPU มีอะไรที่ต้องทำในตัวประมวลผลแบบมัลติคอร์หรือไม่? สมมติว่ามีเวลาไม่สิ้นสุดสำหรับการพัฒนาและการทำงาน

5
ทำไมการวิจัยเกี่ยวกับอัลกอริธึมทางพันธุกรรมจึงชะลอตัว?
ในขณะที่กำลังพูดถึงหัวข้อระดับอินโทรในวันนี้รวมถึงการใช้อัลกอริทึมทางพันธุกรรม ฉันบอกว่าการวิจัยชะลอตัวลงในสาขานี้ เหตุผลที่กำหนดคือคนส่วนใหญ่มุ่งเน้นไปที่การเรียนรู้ของเครื่องและการทำเหมืองข้อมูล อัปเดต:ถูกต้องหรือไม่ และถ้าเป็นเช่นนั้น ML / DM มีข้อได้เปรียบอะไรบ้างเมื่อเทียบกับ GA

2
หาค่ามัธยฐานของอาเรย์ไม่ได้เรียงลำดับใน
เพื่อหาค่ามัธยฐานของอาร์เรย์ที่ไม่ได้เรียงลำดับที่เราสามารถทำให้นาทีกองในเวลาสำหรับnองค์ประกอบและจากนั้นเราสามารถแยกหนึ่งโดยหนึ่งn / 2องค์ประกอบที่จะได้รับค่ามัธยฐาน แต่วิธีการนี้จะใช้เวลาO ( n log n )เวลาO ( n บันทึกn )O(nlog⁡n)O(n\log n)nnnn / 2n/2n/2O ( n บันทึกn )O(nlog⁡n)O(n \log n) เราสามารถทำเช่นเดียวกันโดยวิธีการบางอย่างในเวลา ? ถ้าเราทำได้แล้วได้อย่างไรO(n)O(n)O(n)

2
เครื่อง Combinator Y ทำตัวเป็นตัวอย่างว่า“ แลมบ์ดาแคลคูลัสไม่สอดคล้องกันอย่างไร”?
ในหน้าวิกิพีเดียสำหรับผู้แก้ไขจุดรวมคงที่เขียนข้อความที่ค่อนข้างลึกลับ Y combinator เป็นตัวอย่างของสิ่งที่ทำให้แคลคูลัสแลมบ์ดาไม่สอดคล้องกัน ดังนั้นจึงควรพิจารณาด้วยความสงสัย อย่างไรก็ตามมันมีความปลอดภัยที่จะต้องพิจารณา combinator Y เมื่อกำหนดไว้ในตรรกะทางคณิตศาสตร์เท่านั้น ฉันเคยเข้าร่วมนวนิยายสายลับบ้างไหม? อะไรในโลกที่มีความหมายโดยแถลงการณ์ที่ -calculus นั้น"ไม่สอดคล้อง"และมันควรจะ"ถูกมองด้วยความสงสัย" ?λλ\lambda

7
ต้นไม้ทอดต่ำสุดเทียบกับเส้นทางที่สั้นที่สุด
ความแตกต่างระหว่างอัลกอริทึม Spanning Tree ขั้นต่ำและอัลกอริธึมพา ธ ที่สั้นที่สุดคืออะไร ในคลาสโครงสร้างข้อมูลของฉันเราครอบคลุมอัลกอริธึมแผนผังต้นไม้ขั้นต่ำสองอัน (Prim's และ Kruskal's) และอัลกอริธึมพา ธ สั้นที่สุด (Dijkstra's) Spanning Tree ขั้นต่ำเป็นแผนผังในกราฟที่ครอบคลุมทุกจุดยอดและน้ำหนักรวมของต้นไม้น้อยที่สุด เส้นทางที่สั้นที่สุดนั้นค่อนข้างชัดเจนมันเป็นเส้นทางที่สั้นที่สุดจากจุดสุดยอดหนึ่งไปอีกจุดหนึ่ง สิ่งที่ฉันไม่เข้าใจคือเนื่องจากต้นไม้ที่สแปนนิ่งขั้นต่ำมีน้ำหนักรวมเพียงเล็กน้อยเส้นทางในต้นไม้จะเป็นเส้นทางที่สั้นที่สุดหรือไม่ ใครช่วยอธิบายสิ่งที่ฉันหายไปได้บ้าง ความช่วยเหลือใด ๆ ที่ชื่นชม

2
ความหมายของคืออะไร?
นี่เป็นคำถามพื้นฐาน แต่ฉันคิดว่าเหมือนกับเนื่องจากคำที่ใหญ่กว่าควรมีอิทธิพลเหนือเราไปไม่สิ้นสุด? นอกจากนี้ที่จะแตกต่างจากO (\ นาที (m, n)) นั่นถูกต้องใช่ไหม? ฉันเห็นสัญกรณ์นี้โดยเฉพาะเมื่อพูดถึงอัลกอริธึมกราฟ ตัวอย่างเช่นคุณจะเห็นเป็นประจำ: O (| V | + | E |) (เช่นดูที่นี่ )O(m+n)O(m+n)O(m+n)O(max(m,n))O(max(m,n))O(\max(m,n))O(min(m,n))O(min(m,n))O(\min(m,n))O(|V|+|E|)O(|V|+|E|)O(|V| + |E|)

3
เส้นทางที่ยาวที่สุดในต้นไม้ที่ไม่ได้ถูกส่งทิศทางด้วยการสำรวจเส้นทางเดียว
มีอัลกอริธึมมาตรฐานนี้สำหรับการค้นหาเส้นทางที่ยาวที่สุดในต้นไม้ที่ไม่ได้ใช้เส้นทางโดยใช้การค้นหาสองครั้งแรก: เริ่ม DFS จากจุดสุดยอดแบบสุ่มและหาจุดสุดยอดที่ไกลที่สุดจากมัน บอกว่ามันเป็นวี 'vvvv′v′v' ตอนนี้เริ่ม DFS จากเพื่อค้นหาจุดสุดยอดจากนั้น เส้นทางนี้เป็นเส้นทางที่ยาวที่สุดในกราฟv′v′v' คำถามคือสิ่งนี้สามารถทำได้อย่างมีประสิทธิภาพมากขึ้น? เราสามารถทำได้ด้วย DFS หรือ BFS เดียวได้หรือไม่? (สิ่งนี้สามารถอธิบายได้อย่างเท่าเทียมกันว่าเป็นปัญหาของการคำนวณเส้นผ่านศูนย์กลางของต้นไม้ที่ไม่ได้บอกทิศทาง)

2
การกำหนดความสามารถของเครื่องสถานะขั้นต่ำ (หรือแปลกใหม่) เครื่อง
ดูจุดสิ้นสุดของโพสต์นี้สำหรับการชี้แจงเกี่ยวกับคำจำกัดความของ min-heap ออโตมาตา สามารถจินตนาการได้ว่าใช้โครงสร้างข้อมูลที่หลากหลายสำหรับจัดเก็บข้อมูลเพื่อใช้งานโดยเครื่องของรัฐ ตัวอย่างเช่นการกดออโตมาเก็บข้อมูลในสแต็กและเครื่องทัวริงใช้เทป เครื่องแสดงสถานะโดยใช้คิวและเครื่องที่ใช้สองชุดซ้อนกันหรือหลายเทปได้แสดงให้เห็นว่าเทียบเท่ากับกำลังของเครื่องจักรทัวริง ลองนึกภาพเครื่อง min-heap มันทำงานเหมือนกับหุ่นยนต์กดลงโดยมีข้อยกเว้นดังต่อไปนี้: แทนที่จะดูสิ่งสุดท้ายที่คุณเพิ่มลงใน heap คุณจะได้ดูองค์ประกอบที่เล็กที่สุดเท่านั้น (ด้วยการสั่งซื้อที่กำหนดไว้ตามเครื่องต่อเครื่อง) ที่อยู่บนฮีป แทนที่จะเอาสิ่งสุดท้ายที่คุณเพิ่มลงใน heap ออกคุณจะได้เพียงแค่ลบหนึ่งในองค์ประกอบที่เล็กที่สุด (ด้วยการเรียงลำดับที่กำหนดไว้ตามเครื่องต่อเครื่อง) ใน heap แทนที่จะเพิ่มองค์ประกอบเข้าไปที่ด้านบนของ heap คุณสามารถเพิ่มองค์ประกอบเข้ากับ heap ได้เท่านั้นโดยตำแหน่งของมันจะถูกกำหนดตามองค์ประกอบอื่น ๆ ใน heap (โดยมีการเรียงลำดับที่กำหนดไว้ในแต่ละเครื่อง) เครื่องนี้สามารถยอมรับภาษาปกติทั้งหมดเพียงแค่ไม่ใช้ฮีป นอกจากนี้ยังสามารถรับภาษาโดยการเพิ่ม's ไปกอง และลบ 'ออกจาก heap เมื่อมันอ่าน ' สามารถยอมรับภาษาที่ไม่มีบริบทอื่น ๆ ได้หลากหลาย อย่างไรก็ตามมันไม่สามารถยอมรับได้เช่น (ระบุโดยไม่มีการพิสูจน์) แก้ไข: หรือสามารถ ฉันไม่คิดว่าจะทำได้ แต่ฉันแปลกใจมาก่อนและฉันแน่ใจว่าฉันจะประหลาดใจเมื่อสมมติฐานของฉันทำให้ฉันเป็น ...{anbn∈{a,b}∗∣n≥0}{anbn∈{a,b}∗∣n≥0}\displaystyle \{a^{n}b^{n} \in \{a, …

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