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

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

6
การเรียนรู้ทฤษฎีการพิสูจน์อัตโนมัติ
ฉันกำลังเรียนรู้ทฤษฎีการพิสูจน์โดยอัตโนมัติ / นักแก้ปัญหา / ผู้ช่วยพิสูจน์ด้วยตนเองและโพสต์คำถามเกี่ยวกับกระบวนการเริ่มต้นที่นี่ โปรดทราบว่าหัวข้อเหล่านี้ไม่สามารถย่อยได้ง่ายโดยไม่มีพื้นหลังใน logics (ทางคณิตศาสตร์) หากคุณมีปัญหาเกี่ยวกับคำศัพท์พื้นฐานโปรดอ่านสิ่งเหล่านี้เช่นLogics in Computer Scienceโดย M. Huth และ M. Ryan (โดยเฉพาะบทที่หนึ่งสองและสี่) หรือAn Introduction to Mathematical Logic และ Type Theoryโดย P แอนดรู สำหรับการแนะนำสั้น ๆ ลงในลำดับตรรกะที่สูงขึ้น (HOL) ดูที่นี่ ฉันดูCoqและอ่านบทแรกของการเพิ่มขึ้นของอิซาเบลในหมู่คนอื่น ๆ ; ประเภทของผู้ให้บริการทฤษฎีบทอัตโนมัติ ฉันรู้จัก Prolog มาสองสามทศวรรษแล้วและตอนนี้ฉันได้เรียนรู้ F # ดังนั้น ML, O'Caml และ LISP จึงเป็นโบนัส Haskell เป็นสัตว์ร้ายต่างชนิดกัน …

3
เหตุใดมนุษย์จึงสามารถแก้ปัญหา“ ที่ไม่อาจตัดสินใจได้” บางอย่างได้
การจับคู่รูปแบบที่มีลำดับสูงเป็นปัญหาที่ไม่สามารถตัดสินใจได้ นั่นหมายความว่าไม่มีอัลกอริธึมที่ให้สมการa => bที่ไหนaและbเป็นคำเปิดบนแคลคูลัสแลมบ์ดาเพียงพิมพ์พบการทดแทนSเช่นนั้นaS => bSซึ่ง=>ย่อมาจาก "มีรูปแบบปกติ Bn เดียวกัน" แต่มนุษย์สามารถแก้ไขปัญหานั้นได้อย่างมีประสิทธิภาพ ตัวอย่างเช่นให้ปัญหาต่อไปนี้: a = (λt . t (F (λ f x . (f (f (f x))))) (F (λ f x . (f (f x))))) b = (λ t . t (λ f x . (f (f (f (f (f (f x))))))) …

5
ความแตกต่างระหว่างการเขียนโปรแกรมแบบขนานและแบบพร้อมกัน?
เมื่อดูที่การเขียนโปรแกรมพร้อมกันคำสองคำที่ใช้กันทั่วไปคือพร้อมกันและขนาน และบางภาษาโปรแกรมเฉพาะเรียกร้องการสนับสนุนสำหรับการเขียนโปรแกรมแบบขนานเช่นJava สิ่งนี้หมายความว่าการเขียนโปรแกรมแบบขนานและพร้อมกันนั้นแตกต่างกันจริงหรือ

1
แสดงว่า {xy ∣ | x | = | y |, x ≠ y} ไม่มีบริบท
ฉันจำคำถามต่อไปนี้เกี่ยวกับภาษาที่คาดคะเนได้ว่าเป็นบริบท แต่ฉันไม่สามารถหาหลักฐานของความจริงได้ ฉันอาจนำคำถามนี้ไปใช้ผิดครั้งหรือไม่? อย่างไรก็ตามนี่คือคำถาม: แสดงว่าภาษาไม่มีบริบทL={xy∣|x|=|y|,x≠y}L={xy∣|x|=|y|,x≠y}L = \{xy \mid |x| = |y|, x\neq y\}

2
วิธีแสดงให้เห็นว่าฟังก์ชั่นไม่สามารถคำนวณได้?
ฉันรู้ว่ามีทัวริงอยู่ถ้าฟังก์ชั่นคำนวณได้ จากนั้นวิธีแสดงให้เห็นว่าฟังก์ชั่นนั้นไม่สามารถคำนวณได้หรือไม่มีทัวริงใด ๆ มีอะไรที่เหมือนกับบทปั๊มน้ำ?

6
การจัดการกับการล่วงล้ำ: ปัญหา NP-complete
สมมติว่าฉันเป็นโปรแกรมเมอร์และฉันมีปัญหาที่สมบูรณ์แบบที่ฉันต้องแก้ปัญหา มีวิธีการใดบ้างที่สามารถจัดการกับปัญหา NPC มีแบบสำรวจหรืออะไรที่คล้ายกันในหัวข้อนี้?

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

9
เหตุใดภาษาการเขียนโปรแกรมบางภาษาจึงทัวริงสมบูรณ์ แต่ขาดความสามารถบางอย่างของภาษาอื่น
ฉันพบปัญหาแปลก ๆ เมื่อเขียนล่ามที่ (ควร) hooks ไปยังโปรแกรม / ฟังก์ชั่นภายนอก: ฟังก์ชั่นใน 'C' และ 'C ++' ไม่สามารถขอฟังก์ชั่นแปรผันได้เช่นฉันไม่สามารถสร้างฟังก์ชั่นที่เรียกว่า 'printf' ด้วยอาร์กิวเมนต์เดียวกันที่แน่นอนที่ได้รับและแทนที่จะต้องเรียกใช้เวอร์ชันอื่นที่ใช้วัตถุแปรปรวน นี่เป็นปัญหาอย่างมากเนื่องจากฉันต้องการสร้างวัตถุที่มีตะขอที่ไม่ระบุชื่อ ดังนั้นฉันคิดว่านี่แปลกตั้งแต่Forth , JavaScriptและบางทีภาษาอื่น ๆ สามารถทำได้อย่างง่ายดายโดยไม่ต้องหันไปใช้ภาษาแอสเซมบลี / รหัสเครื่อง เนื่องจากภาษาอื่นสามารถทำสิ่งนี้ได้อย่างง่ายดายนั่นหมายความว่าระดับของปัญหาที่แต่ละภาษาโปรแกรมสามารถแก้ไขได้แตกต่างกันไปตามภาษาแม้ว่าภาษาเหล่านี้จะทัวริงสมบูรณ์หรือไม่

11
ทำไมทุกคนต้องการ CISC
ในการบรรยายระบบคอมพิวเตอร์ของเราเราได้รับการแนะนำให้รู้จักกับโปรเซสเซอร์ MIPS มันถูกพัฒนาขึ้นอีกครั้งในช่วงระยะเวลาและในความเป็นจริงก็ค่อนข้างง่ายที่จะเข้าใจ มันใช้การออกแบบRISCซึ่งเป็นคำสั่งพื้นฐานที่มีการเข้ารหัสเป็นประจำและมีเพียงไม่กี่คำสั่งเพื่อให้สายไฟง่าย มันถูกกล่าวว่าCISCเป็นไปตามปรัชญาที่แตกต่าง ฉันดูสั้น ๆ ที่ชุดคำสั่ง x86และตกใจ ฉันไม่สามารถนึกภาพได้ว่าทุกคนต้องการสร้างโปรเซสเซอร์ที่ใช้ชุดคำสั่งที่ซับซ้อนมากเพียงใด! ดังนั้นฉันคิดว่าจะต้องมีข้อโต้แย้งที่ดีว่าทำไมส่วนใหญ่ของตลาดโปรเซสเซอร์ใช้สถาปัตยกรรม CISC พวกเขาคืออะไร

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

5
การวนซ้ำสามารถแทนที่การเรียกซ้ำได้หรือไม่
ฉันได้รับการเห็นทั่วกองมากเกินเช่นที่นี่ , ที่นี่ , ที่นี่ , ที่นี่ , ที่นี่และอื่น ๆ บางอย่างที่ฉันไม่สนใจที่จะพูดถึงว่า "โปรแกรมใด ๆ ที่ใช้เรียกซ้ำสามารถแปลงเป็นโปรแกรมที่ใช้เพียงซ้ำ" มีแม้แต่กระทู้ upvoted สูงพร้อมคำตอบ upvoted อย่างมากที่กล่าวว่าใช่เป็นไป ตอนนี้ฉันไม่ได้พูดว่าพวกเขาผิด เป็นเพียงคำตอบที่ตอบโต้ความรู้น้อยของฉันและความเข้าใจเกี่ยวกับการคำนวณ ฉันเชื่อว่าทุกฟังก์ชั่นวนซ้ำสามารถแสดงเป็นการเรียกซ้ำได้และวิกิพีเดียมีคำแถลงถึงผลกระทบดังกล่าว อย่างไรก็ตามฉันสงสัยว่าการสนทนานั้นเป็นจริง สำหรับหนึ่งฉันสงสัยว่าฟังก์ชั่นแบบเรียกซ้ำไม่สามารถแสดงซ้ำ ฉันยังสงสัยว่าการปฏิบัติการหลายมิติสามารถแสดงออกซ้ำ ๆ ได้ ในคำตอบของเขา(ซึ่งฉันไม่เข้าใจโดยวิธี) กับคำถามของฉัน@YuvalFIlmus กล่าวว่ามันเป็นไปไม่ได้ที่จะแปลงลำดับของการดำเนินการทางคณิตศาสตร์ใด ๆ ให้เป็นลำดับของการเพิ่ม หากคำตอบของ YF นั้นถูกต้องแน่นอน (ฉันเดาว่ามันเป็น แต่เหตุผลของเขาอยู่เหนือหัวฉัน) นี่ก็ไม่ได้หมายความว่าไม่ใช่การเรียกซ้ำทุกครั้งที่สามารถเปลี่ยนเป็นการทำซ้ำได้? เพราะถ้าเป็นไปได้ที่จะแปลงการเรียกซ้ำทั้งหมดเป็นการวนซ้ำฉันจะสามารถแสดงการดำเนินการทั้งหมดเป็นลำดับของการเพิ่ม คำถามของฉันคือ: การเรียกซ้ำทุกครั้งสามารถเปลี่ยนเป็นการทำซ้ำได้หรือไม่และทำไม โปรดให้คำตอบกับนักเรียนมัธยมปลายที่สดใสหรือปริญญาตรีปีแรกจะเข้าใจ ขอขอบคุณ. ป.ล. ฉันไม่ทราบว่าการเรียกซ้ำแบบดั้งเดิมคืออะไร (ฉันรู้เกี่ยวกับฟังก์ชัน Ackermann และนั่นไม่ใช่การเรียกซ้ำแบบดั้งเดิม แต่ยังคงคำนวณได้ ALL …

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

3
อัลกอริทึมของ Peterson และ Dekker ที่ตัดกัน
ฉันพยายามที่จะเข้าใจอัลกอริทึมของ Peterson และ Dekker ซึ่งคล้ายกันมากและแสดงความสมมาตรมากมาย ฉันพยายามกำหนดอัลกอริทึมในภาษานอกระบบดังนี้: Peterson's: "I want to enter." flag[0]=true; "You can enter next." turn=1; "If you want to enter and while(flag[1]==true&&turn==1){ it's your turn I'll wait." } Else: Enter CS! // CS "I don't want to enter any more." flag[0]=false; Dekker's: "I want to enter." flag[0]=true; "If …

2
โครงสร้างข้อมูลที่มีประสิทธิภาพสำหรับการสร้างเครื่องมือตรวจสอบการสะกดคำอย่างรวดเร็ว
ฉันกำลังพยายามเขียนตัวตรวจการสะกดซึ่งควรใช้กับพจนานุกรมที่มีขนาดค่อนข้างใหญ่ ฉันต้องการวิธีที่มีประสิทธิภาพในการจัดทำดัชนีข้อมูลพจนานุกรมของฉันโดยใช้ระยะทางDamerau-Levenshteinเพื่อกำหนดว่าคำใดที่ใกล้เคียงที่สุดกับคำที่สะกดผิด ฉันกำลังมองหาโครงสร้างข้อมูลที่จะให้ความประนีประนอมระหว่างความซับซ้อนของพื้นที่กับความซับซ้อนของรันไทม์ได้ดีที่สุด จากสิ่งที่ฉันพบบนอินเทอร์เน็ตฉันมีโอกาสในการขายไม่กี่เกี่ยวกับประเภทของโครงสร้างข้อมูลที่จะใช้: Trie นี่เป็นความคิดแรกของฉันและดูใช้งานได้ง่ายและควรมีการค้นหา / แทรกอย่างรวดเร็ว การค้นหาโดยประมาณโดยใช้ Damerau-Levenshtein ควรง่ายต่อการใช้งานที่นี่เช่นกัน แต่มันไม่ได้ดูมีประสิทธิภาพมากนักในแง่ของความซับซ้อนของพื้นที่เนื่องจากคุณมักจะมีค่าใช้จ่ายจำนวนมากกับที่เก็บข้อมูลพอยน์เตอร์ Patricia Trie ดูเหมือนว่าจะใช้เนื้อที่น้อยกว่า Trie ปกติเนื่องจากคุณไม่ต้องเสียค่าใช้จ่ายในการเก็บพอยน์เตอร์ แต่ฉันกังวลเกี่ยวกับการแยกส่วนข้อมูลในกรณีที่พจนานุกรมมีขนาดใหญ่มากเหมือนที่ฉันมี ต้นไม้ต่อท้าย ฉันไม่แน่ใจเกี่ยวกับสิ่งนี้ดูเหมือนว่าบางคนจะพบว่ามีประโยชน์ในการทำเหมืองข้อความ แต่ฉันไม่แน่ใจว่าสิ่งที่จะให้ในแง่ของประสิทธิภาพสำหรับตัวตรวจสอบการสะกด Ternary Search Tree สิ่งเหล่านี้ดูดีมากและในแง่ของความซับซ้อนควรอยู่ใกล้ (ดีกว่า) กับ Patricia Tries แต่ฉันไม่แน่ใจเกี่ยวกับการแยกส่วนหากมันจะดีกว่าแย่กว่า Patricia Tries ต้นไม้ระเบิด ดูเหมือนว่าจะเป็นลูกผสมและฉันก็ไม่แน่ใจว่าจะได้ประโยชน์อะไรจาก Tries และสิ่งที่คล้ายกัน แต่ฉันได้อ่านมาหลายครั้งแล้วว่ามันมีประสิทธิภาพมากสำหรับการทำเหมืองข้อความ ฉันต้องการรับความคิดเห็นเกี่ยวกับโครงสร้างข้อมูลที่ดีที่สุดที่จะใช้ในบริบทนี้และสิ่งที่ทำให้ดีกว่าที่อื่น หากฉันขาดโครงสร้างข้อมูลบางอย่างที่เหมาะสมกว่าสำหรับเครื่องตรวจการสะกดคำฉันก็สนใจเช่นกัน

4
คลาสของฟังก์ชันที่อธิบายโดย O (n log n) คืออะไร?
ใน "บิ๊กโอ" สัญลักษณ์ทั่วไปมีชื่อสามัญ (แทนที่จะพูดว่า "โอ้ปัจจัยคงที่"): O (1)คือ "คงที่" O (บันทึก n)คือ "ลอการิทึม" O (n)คือ "เชิงเส้น" O (n ^ 2)คือ "กำลังสอง" O (n * log n)คือ ??? มันเป็นแค่ "n log n" หรือมีชื่อพิเศษเหมือนด้านบนหรือไม่?

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