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

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

1
การทำซ้ำ (การกระจาย) ที่ยาวที่สุดที่ตามมาในสตริง
คำชี้แจงปัญหาที่ไม่เป็นทางการ: รับสตริงเช่นเราต้องการให้สีตัวอักษรสีแดงและบางตัวอักษรสีน้ำเงิน (และบางส่วนไม่ได้เลย) เช่นการอ่านตัวอักษรสีแดงจากซ้ายไปขวาให้ผลเช่นเดียวกับการอ่าน ตัวอักษรสีน้ำเงินเท่านั้นACCABBABACCABBABACCABBAB ในตัวอย่างเราสามารถระบายสีพวกมันได้ดังนี้: ACCABBABACCABBABA\color{blue}{C}\color{red}{CAB}B\color{blue}{AB} ดังนั้นเราจึงบอกว่าเป็น subsequence ซ้ำC C B B B นอกจากนี้ยังมีการวนซ้ำซ้ำที่ยาวที่สุด (ซึ่งง่ายต่อการตรวจสอบ)CBCABCABCCA B B A BACCABBABACCABBAB เราสามารถคำนวณส่วนประกอบซ้ำที่ยาวที่สุดได้อย่างมีประสิทธิภาพหรือไม่ คำถามทางการ: มันยากที่จะตัดสินใจว่าจะให้สตริงกับหรือไม่ว่ามีการเรียงตัวของความยาวkซ้ำอยู่ในสตริงหรือไม่?kkkkkk ถ้าเป็นเช่นนั้น: ปัญหาใดที่สามารถลดปัญหานี้ได้ ถ้าไม่: อัลกอริทึมที่มีประสิทธิภาพคืออะไร? (เห็นได้ชัดว่าอัลกอริธึมนี้สามารถใช้ในการคำนวณการวนซ้ำที่ยาวที่สุด) คำถามโบนัส: จะมีการเรียงลำดับความยาวหากขนาดของตัวอักษรถูกล้อมด้วยค่าคงที่หรือไม่?n / 2 - o ( n )n/2−o(n)n/2 - o(n) (สิ่งนี้เป็นที่รู้จักกันว่าเป็นจริงสำหรับตัวอักษรไบนารี) แก้ไข 2: คำตอบเชิงลบเพื่อโบนัสคำถามที่เป็นที่รู้จักกันไปแล้วสำหรับตัวอักษรที่มีขนาดอย่างน้อย5ในความเป็นจริงสำหรับตัวอักษรขนาดมีสตริงกับ subsequences ซ้ำที่ยาวที่สุดของความยาวของเพียง1/2}) สตริงสุ่มเพียงพอที่จะแสดงสิ่งนี้ ผลลัพธ์มีอยู่แล้ว แต่ฉันมองข้ามไป555ΣΣΣO(n⋅Σ−1/2)O(n·Σ−1/2)O(n · Σ^{-1/2}) …

3
เครื่องมือการเขียนโปรแกรมภาพทำไมพวกเขาไม่ทำงานกับ AST โดยตรง
ฉันพบเครื่องมือการเขียนโปรแกรมแบบโอเพ่นซอร์สหลายรายการเช่น Blockly และเพื่อน ๆ และโครงการอื่น ๆ ที่โฮสต์ที่ Github แต่ไม่พบสิ่งใดที่สามารถใช้งานได้โดยตรงกับแผนผังไวยากรณ์แบบนามธรรม ทำไมถึงเป็นอย่างนั้น? ฉันถามเพราะเมื่อฉันค้นพบว่าคอมไพเลอร์ทุกตัวมีขั้นตอนในกระบวนการรวบรวมซึ่งแยกวิเคราะห์ซอร์สโค้ดกับ AST มันชัดเจนสำหรับฉันว่าเครื่องมือการเขียนโปรแกรมแบบเห็นภาพบางอย่างสามารถใช้ประโยชน์จากสิ่งนี้เพื่อให้วิธีโปรแกรมเมอร์ เพื่อแก้ไข AST โดยตรงในลักษณะที่มองเห็นและเพื่อทำการปัดเศษจากต้นทางไปยังโหนดกราฟแล้วกลับไปยังแหล่งข้อมูลอีกครั้งเมื่อจำเป็น ตัวอย่างหนึ่งอาจคิดว่าจากJavaScript AST Visualizerไปจนถึงเครื่องมือการเขียนโปรแกรม JavaSript เสมือนจริงนั้นมีความแตกต่างไม่มากนัก แล้วฉันจะพลาดอะไร

2
โครงสร้างข้อมูลพร้อมการค้นหาแทรกและลบในเวลาตัดจำหน่าย
มีโครงสร้างข้อมูลเพื่อรักษารายการที่สั่งซื้อซึ่งสนับสนุนการดำเนินการต่อไปนี้ในเวลาตัดจำหน่ายหรือไม่O ( 1 )O(1)O(1) GetElement (k) : ส่งคืนองค์ประกอบที่ของรายการkkk InsertAfter (x, y) : ใส่องค์ประกอบใหม่ y ลงในรายการทันทีหลังจาก x ลบ (x) : ลบ x ออกจากรายการ สำหรับการดำเนินการสองครั้งล่าสุดคุณสามารถสมมติได้ว่า x ถูกกำหนดให้เป็นตัวชี้ไปยังโครงสร้างข้อมูลโดยตรง InsertElement ส่งคืนตัวชี้ที่สอดคล้องกันสำหรับ y InsertAfter (NULL, y) แทรก y ที่จุดเริ่มต้นของรายการ ตัวอย่างเช่นเริ่มต้นด้วยโครงสร้างข้อมูลที่ว่างเปล่าการดำเนินการต่อไปนี้จะอัพเดตรายการที่สั่งซื้อตามที่แสดงด้านล่าง: InsertAfter (NULL, a) [a]⟹⟹\implies InsertAfter (NULL, b) [b, a]⟹⟹\implies InsertAfter (b, c) [b, c, a]⟹⟹\implies …

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

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

4
พิสูจน์ความลังเลของปัญหาการหยุดชะงัก
ฉันมีปัญหาในการทำความเข้าใจการพิสูจน์ความลังเลของปัญหาการหยุดชะงัก หากผลตอบแทนไม่ว่าจะเป็นโปรแกรมหรือไม่หยุดกับการป้อนข้อมูลขทำไมเราต้องผ่านรหัสของPสำหรับทั้งและข ?H(a,b)H(a,b)H(a,b)aaabbbPPPaaabbb ทำไมเราไม่ป้อนด้วยPและป้อนข้อมูลโดยพลการพูดx ?H()H()H()PPPxxx

3
อะไรคือความแตกต่างระหว่าง 'หน้า' ของหน่วยความจำและ 'กรอบ' ของหน่วยความจำ?
WPมีการอภิปรายที่เพียงพอเกี่ยวกับการเพจซึ่งฉันคิดว่าฉันเข้าใจ .. อย่างไรก็ตามฉันสับสนโดยการใช้คำว่าPage Frameซ้ำ ๆ ฉันคิดว่าเฟรมและหน้าเป็นสิ่งที่แตกต่าง มีคนช่วยอธิบายความแตกต่างได้ไหม

3
การสอน NP-ครบถ้วน - การทัวริงการลดลงเทียบกับการลดคาร์ป
ฉันสนใจในคำถามของวิธีที่ดีที่สุดในการสอนปัญหาความสมบูรณ์ของวิชาเอกวิทยาการคอมพิวเตอร์ โดยเฉพาะอย่างยิ่งเราควรสอนโดยใช้การลดคาร์ปหรือการใช้การลดทอนของทัวริง ฉันรู้สึกว่าแนวคิดของความสมบูรณ์แบบ NP และการลดลงเป็นสิ่งที่วิทยาศาสตร์คอมพิวเตอร์ทุกคนควรเรียนรู้ อย่างไรก็ตามเมื่อสอน NP-ครบถ้วนฉันได้สังเกตเห็นว่าการใช้ Karp Reduction มีข้อเสีย ก่อนอื่นการลดคาร์ปดูเหมือนจะทำให้นักเรียนบางคนสับสนโดยไม่จำเป็น ความคิดที่เข้าใจง่ายของการลดคือ "ถ้าฉันมีอัลกอริทึมในการแก้ปัญหา X จากนั้นฉันก็สามารถใช้มันเพื่อแก้ปัญหา Y ได้เช่นกัน" นั่นเป็นเรื่องที่เข้าใจได้ง่ายมาก - แต่แผนที่ดีกว่าการทัวริงการลดลงมากกว่าการลดคาร์ป เป็นผลให้ฉันเห็นนักเรียนที่พยายามพิสูจน์ความสมบูรณ์แบบของ NP ถูกทำให้หลงผิดโดยสัญชาตญาณและพิสูจน์ข้อผิดพลาด พยายามที่จะสอนการลดลงทั้งสองประเภทและเน้นในแง่มุมของการลดคาร์ปนี้บางครั้งก็รู้สึกเหมือนเป็นพิธีการที่ไม่จำเป็นและใช้เวลาเรียนไม่จำเป็นและให้ความสนใจกับนักเรียนในสิ่งที่รู้สึกเหมือนรายละเอียดทางเทคนิค มันไม่ชัดเจนเลยว่าทำไมเราใช้ความคิดที่ จำกัด มากขึ้นในการลด ฉันเข้าใจความแตกต่างระหว่างการลด Karp และการลด Turing (Cook) และวิธีที่พวกเขานำไปสู่แนวคิดที่แตกต่างของความสมบูรณ์แบบ NP ฉันตระหนักว่าการลดคาร์ปทำให้เรามีความแตกต่างที่ละเอียดยิ่งขึ้นระหว่างคลาสความซับซ้อน ดังนั้นสำหรับการศึกษาทฤษฎีความซับซ้อนอย่างจริงจังการลดคาร์ปจึงเป็นเครื่องมือที่เหมาะสม แต่สำหรับนักศึกษาวิทยาศาสตร์คอมพิวเตอร์ที่เพิ่งเรียนรู้สิ่งนี้และไม่เคยไปสู่ทฤษฎีความซับซ้อนฉันไม่แน่ใจว่าการแยกความแตกต่างที่ดีกว่านี้มีความสำคัญอย่างยิ่งหรือไม่ ในที่สุดในฐานะนักเรียนฉันจำได้ว่ารู้สึกงุนงงเมื่อฉันพบปัญหาเช่น "ซ้ำซาก" - เช่นกำหนดสูตรบูลีนตรวจสอบว่าเป็นวิชาซ้ำซาก สิ่งที่สับสนคือปัญหานี้ชัดเจนยาก: อัลกอริธึมเวลาพหุนามใด ๆ สำหรับมันจะบ่งบอกว่าP= NPP=NPP=NP; เห็นได้ชัดว่าการแก้ปัญหานี้ยากพอ ๆ กับการแก้ไขปัญหาซ้ำซาก อย่างไรก็ตามถึงแม้ว่าการหยั่งรู้เชิงสัญชาตญาณนั้นยากพอ …

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

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

5
มีตัวกรอง anti-Bloom หรือไม่?
กรองบลูมทำให้มันเป็นไปได้อย่างมีประสิทธิภาพติดตามว่าค่าต่างๆได้รับการได้พบระหว่างการประมวลผล เมื่อมีรายการข้อมูลจำนวนมากตัวกรอง Bloom จะส่งผลให้มีการบันทึกหน่วยความจำที่สำคัญบนตารางแฮช คุณสมบัติหลักของตัวกรอง Bloom ซึ่งใช้ร่วมกับตารางแฮชคือมันมักจะพูดว่า "ไม่ใหม่" หากรายการนั้นไม่ใหม่ แต่มีความน่าจะเป็นที่ไม่เป็นศูนย์ที่รายการจะถูกตั้งค่าสถานะเป็น "ไม่ใหม่ "แม้ว่ามันจะเป็นของใหม่ มี "ฟิลเตอร์ต่อต้านบลูม" ซึ่งมีพฤติกรรมตรงกันข้ามหรือไม่? กล่าวอีกนัยหนึ่ง: มีโครงสร้างข้อมูลที่มีประสิทธิภาพซึ่งระบุว่า "ใหม่" หากรายการนั้นเป็นของใหม่ แต่อาจจะพูดว่า "ใหม่" สำหรับบางรายการที่ไม่ใช่ของใหม่ การเก็บรายการที่เห็นก่อนหน้านี้ทั้งหมด (ตัวอย่างเช่นในรายการลิงก์ที่เรียงลำดับ) เป็นไปตามข้อกำหนดแรก แต่อาจใช้หน่วยความจำมาก ฉันหวังว่ามันจะไม่จำเป็นเช่นกันเนื่องจากข้อกำหนดที่สองที่ผ่อนคลาย สำหรับผู้ที่ต้องการการรักษาที่เป็นทางการมากขึ้นให้เขียนถ้าตัวกรอง Bloom คิดว่าเป็นของใหม่,มิฉะนั้นและเขียนถ้าเป็นจริงและมิฉะนั้นx b ( x ) = 0 n ( x ) = 1 x n ( x ) = 0b ( …

2
การเข้ารหัสข้อ จำกัด 1-out-of-n สำหรับนักแก้ปัญหา SAT
ฉันใช้ตัวแก้ SAT เพื่อเข้ารหัสปัญหาและเป็นส่วนหนึ่งของอินสแตนซ์ SAT ฉันมีตัวแปรบูลีนซึ่งมีจุดประสงค์ว่าหนึ่งในนั้นควรเป็นจริงและส่วนที่เหลือควรเป็นเท็จ . (บางครั้งฉันเคยเห็นสิ่งนี้อธิบายว่าเป็นการเข้ารหัส "one-hot")x1,x2,…,xnx1,x2,…,xnx_1,x_2,\dots,x_n ฉันต้องการเข้ารหัสข้อ จำกัด "ตรงหนึ่งจากต้องเป็นจริง" ใน SAT วิธีที่ดีที่สุดในการเข้ารหัสข้อ จำกัด นี้เพื่อให้นักแก้ปัญหา SAT ทำงานได้อย่างมีประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้x1,…,xnx1,…,xnx_1,\dots,x_n ฉันเห็นการเข้ารหัสข้อ จำกัด นี้ได้หลายวิธี: ข้อ จำกัด แบบคู่ ฉันสามารถเพิ่มข้อ จำกัด แบบ pairwiseสำหรับทั้งหมดเพื่อให้แน่ใจว่าอย่างน้อยที่สุดหนึ่งนั้นเป็นจริงแล้วเพิ่มเพื่อให้แน่ใจว่าอย่างน้อยก็เป็นจริง .¬xi∨¬xj¬xi∨¬xj\neg x_i \lor \neg x_ji,ji,ji,jx 1 ∨ x 2 ∨ ⋯ ∨ x nxixix_ix1∨x2∨⋯∨xnx1∨x2∨⋯∨xnx_1 \lor x_2 \lor \cdots \lor x_n สิ่งนี้เพิ่มส่วนคำสั่งและไม่มีตัวแปรบูลีนพิเศษΘ(n2)Θ(n2)\Theta(n^2) การเข้ารหัสแบบไบนารี …

3
การค้นหาการตัดต่ำสุดของกราฟที่ไม่ได้บอกทิศทาง
นี่คือคำถามจากการสอบที่ผ่านมาฉันพยายามที่จะแก้ปัญหา: สำหรับ undirected กราฟ มีน้ำหนักในเชิงบวกW ( E ) ≥ 0 , ฉันพยายามที่จะหาจุดตัดขั้นต่ำ ฉันไม่รู้วิธีการอื่นนอกเหนือจากการใช้ทฤษฎีบทการลดการไหลสูงสุด แต่กราฟนั้นไม่ได้บอกทิศทางดังนั้นฉันควรจะนำมันไปยังไง? ฉันคิดถึงการกำหนดขอบที่ปลายทั้งสองด้าน แต่แล้วจุดยอดไหนที่จะเป็นต้นกำเนิดและจุดยอดไหนที่จะเป็นจุดศูนย์กลาง? หรือมีวิธีอื่นในการหาค่าต่ำสุดหรือไม่GGGw ( e ) ≥ 0w(e)≥0w(e) \geq 0

1
นิพจน์ปกติ“ หนาแน่น” สร้าง ?
นี่คือการคาดเดาสำหรับนิพจน์ทั่วไป: สำหรับการแสดงออกปกติให้ความยาวเป็นจำนวนของสัญลักษณ์ในนั้นละเว้นเครื่องหมายวงเล็บและตัวดำเนินการ เช่นRRR|R||R||R||0∪1|=|(0∪1)∗|=2|0∪1|=|(0∪1)∗|=2|0 \cup 1| = |(0 \cup 1)^*| = 2 การคาดเดา:ถ้าและมีความยาวทุกสตริงหรือน้อยกว่านั้น *|R|>1|R|>1|R| > 1L(R)L(R)L(R)|R||R||R|L(R)=Σ∗L(R)=Σ∗L(R) = \Sigma^* นั่นคือถ้าคือ 'หนาแน่น' ถึงยาว 's แล้วจริงสร้างทุกอย่างL(R)L(R)L(R)RRRRRR บางสิ่งที่อาจเกี่ยวข้อง: ต้องการเพียงส่วนเล็ก ๆ ของเพื่อสร้างสตริงทั้งหมด ยกตัวอย่างเช่นในไบนารีจะทำงานใด ๆSRRRR=(0∪1)∗∪SR=(0∪1)∗∪SR = (0 \cup 1)^* \cup SSSS จะต้องมีดาว Kleene ในในบางจุด หากไม่มีอยู่มันจะพลาดสตริงที่มีขนาดน้อยกว่า.RRR|R||R||R| มันจะเป็นการดีที่ได้เห็นหลักฐานหรือตัวอย่าง มีบางกรณีที่ฉันผิดพลาดหรือไม่? มีใครเห็นสิ่งนี้ (หรือบางอย่างที่คล้ายกัน) มาก่อนหรือไม่

2
โครงสร้างข้อมูลแผนที่ที่มีประสิทธิภาพรองรับการค้นหาโดยประมาณ
ฉันกำลังมองหาโครงสร้างข้อมูลที่สนับสนุนการค้นหาคีย์โดยประมาณอย่างมีประสิทธิภาพ (เช่นระยะทางของ Levenshtein สำหรับสตริง) โดยคืนค่าการจับคู่ที่ใกล้เคียงที่สุดสำหรับคีย์อินพุต โครงสร้างข้อมูลที่เหมาะสมที่สุดที่ฉันเคยพบคือต้นไม้ Burkhard-Kellerแต่ฉันสงสัยว่ามีโครงสร้างข้อมูลอื่น ๆ / ดีกว่าสำหรับจุดประสงค์นี้ แก้ไข: รายละเอียดเพิ่มเติมเกี่ยวกับกรณีเฉพาะของฉัน: สายอักขระมักจะมีความแตกต่างกันมากในระดับที่ค่อนข้างใหญ่ สตริงมีความยาวสูงสุดประมาณ 20-30 ตัวอักษรโดยมีค่าเฉลี่ยใกล้เคียงกับ 10-12 ฉันสนใจในการค้นหาที่มีประสิทธิภาพมากกว่าการแทรกเนื่องจากฉันจะสร้างชุดข้อมูลสแตติกส่วนใหญ่ที่ฉันต้องการค้นหาอย่างมีประสิทธิภาพ

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