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

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

1
ความแตกต่างระหว่างอัลกอริทึมภาษาและปัญหาคืออะไร?
ดูเหมือนว่าในเว็บไซต์นี้ผู้คนมักจะแก้ไขข้อผิดพลาดอื่น ๆ สำหรับ "อัลกอริทึม" และ "ปัญหา" ความแตกต่างระหว่างสิ่งเหล่านี้คืออะไร? ฉันจะรู้ได้อย่างไรว่าฉันควรพิจารณาอัลกอริทึมและการพิจารณาปัญหาอย่างไร และสิ่งเหล่านี้เกี่ยวข้องกับแนวคิดของภาษาในทฤษฎีภาษาที่เป็นทางการได้อย่างไร

4
เทคนิคทั่วไปในการลดปัญหาให้กันคืออะไร
ในทฤษฎีการคำนวณและความซับซ้อน (และสาขาอื่น ๆ ) การลดลงนั้นแพร่หลาย แสดงให้เห็นว่าปัญหาที่หนึ่ง: มีหลายชนิดหลักการยังคงเหมือนเดิมมี แต่อย่างน้อยเป็นหนักเป็นบางส่วนปัญหาอื่น ๆโดยกรณีการทำแผนที่จากกับคนที่แก้ปัญหาที่เทียบเท่าในL_1โดยพื้นฐานแล้วเราแสดงให้เห็นว่านักแก้ปัญหาสำหรับสามารถแก้ปัญหาหากเราอนุญาตให้ใช้ฟังก์ชั่นการลดเป็นตัวประมวลผลล่วงหน้าL 2 L 2 L 1 L 1 L 2L1L1L_1L2L2L_2L2L2L_2L1L1L_1L1L1L_1L2L2L_2 ฉันทำการแบ่งส่วนลดของฉันในช่วงหลายปีที่ผ่านมาและมีบางสิ่งที่ขัดขวางฉันอยู่เสมอ ในขณะที่การลดใหม่ทุกครั้งต้องใช้การสร้างที่สร้างสรรค์ (มากกว่าหรือน้อยกว่า) งานนั้นสามารถรู้สึกซ้ำได้ มีกลุ่มวิธีการบัญญัติหรือไม่? เทคนิครูปแบบและกลวิธีใดที่หนึ่งสามารถใช้เป็นประจำเพื่อสร้างฟังก์ชั่นลดขนาด นี้ควรจะกลายเป็นคำถามที่อ้างอิง ดังนั้นโปรดระมัดระวังในการให้คำตอบทั่วไปนำเสนอคำตอบที่แสดงตัวอย่างอย่างน้อยหนึ่งตัวอย่าง แต่อย่างไรก็ตามยังครอบคลุมหลาย ๆ สถานการณ์ ขอบคุณ!

2
pseudocode ของ Tarjan ทำงานอย่างไร (อธิบายต่อคนที่คุ้นเคยกับ C หรือ Java)
เรื่องสั้น Tarjanนักวิทยาศาสตร์คอมพิวเตอร์ชื่อดังเขียนหนังสือเมื่อหลายปีก่อน มันมี pseudocode ที่แปลกประหลาดอย่างแน่นอน ใครช่วยอธิบายหน่อยได้ไหม เรื่องยาว Tarjanเป็นที่รู้จักสำหรับความสำเร็จมากมายรวมทั้งความจริงที่ว่าเขาเป็น coinventor ของต้นไม้ที่กางออก เขาตีพิมพ์หนังสือ " โครงสร้างข้อมูลและอัลกอริทึมเครือข่าย " ในช่วงทศวรรษ 1980 รหัสหลอกทั้งหมดในหนังสือของ Tarjan เขียนด้วยภาษาที่เขาคิดขึ้นเอง อนุสัญญารหัสหลอกมีความน่าเชื่อถือมาก มันเกือบจะเป็นภาษาที่แท้จริงและใคร ๆ ก็จินตนาการได้ว่าสามารถเขียนคอมไพเลอร์ได้ Tarjan เขียนว่าภาษาของเขามีพื้นฐานสามประการดังต่อไปนี้: ภาษาคำสั่งที่ได้รับการปกป้องของ Dijkstra SETL ALGOL ฉันหวังว่าคนที่คุ้นเคยกับหนึ่งหรือสองภาษาข้างต้นหรืองานของ Tarjan จะสามารถตอบคำถามของฉัน ตัวอย่างของฟังก์ชั่นที่เขียนด้วยภาษา Tarjan แสดงอยู่ด้านล่าง: heap function mesh (heap nodes h1, h2); if key(h1) > key(h2) → h1 ⟷ h2 …

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

13
ฉันควรทำอย่างไรกับคนที่มีอายุระหว่าง 16-17 ปีเพื่อให้พวกเขาสนใจวิทยาศาสตร์คอมพิวเตอร์?
ฉันจะเข้าร่วมกับ 'วันเปิดเรียน' ที่มหาวิทยาลัยของฉันในอีกไม่กี่สัปดาห์ เป็นส่วนหนึ่งของเวลานี้ฉัน (พร้อมกับเพื่อนร่วมงาน) กำลังได้รับนักเรียนระดับมัธยมทั้งกลุ่มเป็นเวลาสองชั่วโมงเช่นเดียวกับห้องปฏิบัติการคอมพิวเตอร์ขนาดใหญ่พอที่จะบรรจุพวกเขาทั้งหมดและฉันต้องทำอะไรบางอย่าง กิจกรรมหรือชุดกิจกรรมกับพวกเขาเพื่อกระตุ้นให้พวกเขาทำวิทยาการคอมพิวเตอร์ (ที่มหาวิทยาลัยของฉันเป็นเลิศ แต่โดยทั่วไปแล้ว) ฉันกำลังสูญเสียที่แน่นอนว่าจะทำอย่างไรที่นี่และยินดีต้อนรับข้อเสนอแนะใด ๆ และทั้งหมด
40 education 

6
คอมพิวเตอร์ทำงานอย่างไร
ฉันเป็นคนบ้าคอมพิวเตอร์มาหลายปีแล้ว ฉันสามารถเขียนโปรแกรมในไม่กี่ภาษาและฉันยังสามารถสร้างพวกเขาได้ ฉันนั่งลงกับเพื่อนเมื่อวันก่อนและถามว่าคอมพิวเตอร์ใช้พลังงานไฟฟ้าจริง ๆ และทำอะไรกับมันได้อย่างไรและเราก็ไม่สามารถเข้าใจได้และ Google ก็ไม่ได้ช่วยอะไรเช่นกัน ฉันหมายถึงคอมพิวเตอร์ใช้กระแสไฟฟ้าคงที่และเปลี่ยนเป็น 1 และ 0 ของแล้วทำอะไรกับ 1 และ 0 เหมือนเปิดไฟใน 15 วินาที? ผมเข้าใจประตู (AND, OR NOR, NAND, NOT) และเล็ก ๆ น้อย ๆ เกี่ยวกับไดโอด , ตัวต้านทานและทรานซิสเตอร์แต่ฉันคิดนี้จะเป็นสถานที่ที่สมบูรณ์แบบที่จะมีมันอธิบายได้ในแง่ laymens จริง! ใครช่วยชี้ฉันในทิศทางที่ถูกต้องหรือให้คำอธิบายสั้น ๆ กับฉันได้ไหม

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


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

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

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

3
ทำไม Mersenne Twister ถึงถูกมองว่าดี?
Mersenne Twister ได้รับการยกย่องอย่างกว้างขวางว่าดี Heck แหล่ง CPythonบอกว่า "เป็นหนึ่งในเครื่องกำเนิดไฟฟ้าที่ได้รับการทดสอบอย่างกว้างขวางมากที่สุดที่มีอยู่" แต่สิ่งนี้หมายความว่าอย่างไร เมื่อถูกขอให้แสดงรายการคุณสมบัติของเครื่องกำเนิดนี้สิ่งที่ฉันสามารถเสนอได้ส่วนใหญ่จะไม่ดี: มันมีขนาดใหญ่และยืดหยุ่นไม่ได้ (เช่นไม่มีการค้นหาหรือสตรีมหลายรายการ) มันล้มเหลวในการทดสอบทางสถิติมาตรฐานแม้จะมีขนาดใหญ่ มันมีปัญหาร้ายแรงประมาณ 0 ซึ่งบอกว่ามันสุ่มตัวเองค่อนข้างแย่ มันเร็วมาก และอื่น ๆ เมื่อเทียบกับ RNG แบบง่าย ๆ เช่น XorShift * มันก็ซับซ้อนเช่นกัน ดังนั้นฉันจึงหาข้อมูลเกี่ยวกับสาเหตุที่สิ่งนี้คิดว่าดี กระดาษต้นฉบับให้ความเห็นจำนวนมากในช่วง "ซุปเปอร์ดาราศาสตร์" และการแบ่งตัว 623 มิติ ในหลายมาตรการที่รู้จักกันการทดสอบตามความสม่ำเสมอของมิติที่สูงขึ้นเช่นการทดสอบสเปกตรัม (cf, Knuth [1981]) และการทดสอบการกระจายตัว k ที่อธิบายไว้ด้านล่างนี้ถือว่ามีความแข็งแกร่งที่สุด แต่สำหรับคุณสมบัตินี้เครื่องกำเนิดไฟฟ้าจะถูกตีด้วยเคาน์เตอร์ที่มีความยาวเพียงพอ! สิ่งนี้ไม่มีความเห็นเกี่ยวกับการกระจายในท้องที่ซึ่งเป็นสิ่งที่คุณสนใจจริง ๆ ในเครื่องกำเนิดไฟฟ้า (แม้ว่า "ท้องถิ่น" อาจหมายถึงสิ่งต่าง ๆ ) และแม้แต่ CSPRNG …

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

5
อะไรคือ“ แฮช”
ฉันเคยได้ยินคำว่า "แฮช" ที่ใช้ในบริบทต่าง ๆ (ภายในโลกแห่งการคำนวณ) ที่มีความหมายต่างกัน ตัวอย่างเช่นในหนังสือ Learn Python the Hard Way ในบทที่เกี่ยวกับพจนานุกรมว่ากันว่า "Python เรียกพวกเขาว่า" dicts "" ภาษาอื่น ๆ เรียกพวกเขาว่า "hash" "ดังนั้นพจนานุกรม hash คืออะไร? การใช้งานทั่วไปอื่น ๆ ของคำที่เกี่ยวข้องกับการเข้ารหัส ฉันเคยได้ยินคน (& อ่าน) ด้วยการใช้คำว่า "แฮช" เป็นฟังก์ชั่นเฉพาะในการวางโปรแกรมระดับสูง แล้วมันคืออะไรกันแน่? ทุกคน (ตามเวลาและใครมีความรู้) ได้โปรดอธิบาย nitty-gritties ของ "hash (หรือ hash)" ได้หรือไม่?

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

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