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

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

1
เหตุใด introsort จึงใช้ heapsort แทนที่จะรวมกัน
เป็นส่วนหนึ่งของการบ้านที่ครอบคลุมการใช้งานIntrosortฉันถูกถามว่าทำไมใช้ heapsort มากกว่าการรวม (หรืออื่น ๆO ( n บันทึก( n ) )O(nเข้าสู่ระบบ⁡(n))O(n\log(n)) อัลกอริทึมสำหรับเรื่องนั้น) Introsort เป็นอัลกอริธึมการเรียงลำดับแบบไฮบริดที่ให้ทั้งประสิทธิภาพเฉลี่ยที่รวดเร็วและ (asymptotically) ประสิทธิภาพที่ดีที่สุดสำหรับกรณีที่เลวร้ายที่สุด มันเริ่มต้นด้วย quicksort และสลับไปที่ heapsort เมื่อความลึกของการเรียกซ้ำเกินกว่าระดับตาม (ลอการิทึมของ) จำนวนองค์ประกอบที่เรียงลำดับ ( Wikipedia , ดึงข้อมูล 2014 - May-06) เหตุผลเดียวที่ฉันคิดได้ก็คือฮีปพอร์ตคือ "ในที่" ... แต่ฉันไม่เข้าใจจริงๆว่าทำไมเรื่องนี้ถึงมีความสำคัญ

1
เหตุใดความแม่นยำของโมดูลัสจุดลอยตัวจึงมีความสำคัญ
ภาษาถิ่น Smalltalk ส่วนใหญ่ใช้โมดูลัสลอยตัวแบบไร้เดียงสาที่ไร้เดียงสา (fmod / เศษที่เหลือ) ฉันเพิ่งเปลี่ยนสิ่งนี้เพื่อปรับปรุง Squeak / Pharo และท้ายที่สุดการยึดติดกับ Smalltalk อื่น ๆ ตามมาตรฐาน (IEEE 754, ISO / IEC 10967) ตามที่ฉันได้ทำไปแล้วสำหรับการดำเนินการจุดลอยตัวอื่น ๆ อย่างไรก็ตามสำหรับการยอมรับการเปลี่ยนแปลงเหล่านั้นฉันคาดหวังว่าการยึดมั่นในมาตรฐานจะไม่เพียงพอที่จะโน้มน้าวใจเพื่อน ๆ ของฉันดังนั้นการอธิบายว่าในสถานการณ์ใดความแม่นยำนี้สำคัญมากจะช่วยฉันได้มาก ฉันไม่สามารถหาตัวอย่างที่ดีได้ด้วยตัวเองจนถึงตอนนี้ มีใครที่นี่รู้หรือไม่ว่าทำไม / เมื่อ / ที่ไหน (IOW ซึ่งอัลกอริทึมใด) ความแม่นยำของโมดูลัสนั้นจะสำคัญหรือไม่?

2
อัลกอริทึมการเปลี่ยนหน้านาฬิกา - หน้าปัจจุบันอยู่แล้ว
เมื่อทำการจำลองอัลกอริธึมการเปลี่ยนหน้านาฬิกาเมื่อการอ้างอิงมาซึ่งมีอยู่ในหน่วยความจำแล้วเข็มนาฬิกายังเพิ่มขึ้นหรือไม่? นี่คือตัวอย่าง: ด้วย 4 ช่องโดยใช้อัลกอริทึมการเปลี่ยนหน้านาฬิกา รายการอ้างอิง: 1 2 3 4 1 2 5 1 3 2 4 5 รายการเริ่มต้นจะมีลักษณะเช่นนี้: -> [1][1] [2][1] [3][1] [4][1] การอ้างอิงครั้งต่อไปของการแทรกจะเป็น 1 จากนั้น 2 มือจะยังคงชี้ไปที่ 1 หลังจาก 1 และหลังจาก 2 หรือไม่ กล่าวอีกนัยหนึ่งหลังจากใส่ 5 นาฬิกาจะมีลักษณะดังนี้: -> [5][1] [2][0] [3][0] [4][0] ?

1
อะไรคือความผิดปกติที่เหมาะสมระหว่างภาษาทางการ?
ภาษาอย่างเป็นทางการ มากกว่าตัวอักษรเป็นส่วนหนึ่งของนั่นคือชุดของคำมากกว่าตัวอักษรว่า สองภาษาอย่างเป็นทางการและมีค่าเท่ากันถ้าชุดที่สอดคล้องกันเป็น extensionally เท่ากับเป็นส่วนย่อยของL' เราสามารถใช้ภาษาในทฤษฎีความซับซ้อนเพื่อทำให้แนวคิดของ "ปัญหา" เป็นระเบียบ ใคร ๆ ก็บ่นว่า "โดยทั่วไป" ความเสมอภาคมิติไม่สามารถอธิบายได้ แต่ฉันเชื่อว่าสิ่งนี้จะถูกเข้าใจผิดLLLΣΣ\SigmaΣ* * * *Σ∗\Sigma^*LLLL'L′L'L ∪L'L∪L′L\cup L' ฉันไตร่ตรองปัญหาต่อไปนี้มาระยะหนึ่งแล้ว: สองภาษาและบนตัวอักษรและ (โดย , ,และLLLL′L′L'Σ={a,b}Σ={a,b}\Sigma=\{a,b\}Σ′={c,d}Σ′={c,d}\Sigma'=\{c,d\}aaabbbcccdddเป็นตัวอักษรที่แตกต่างกัน) จะต้องไม่เท่ากันแม้ว่าพวกเขาจะอธิบายว่า "ปัญหา" เดียวกัน " แต่พวกมันควรจะเป็นไอโซมอร์ฟิคหากพวกเขาอธิบายปัญหา "ที่เหมือนกัน" อย่างแท้จริง " สิ่งที่ฉันอยากรู้มีความเป็นไปได้ในเรื่องของมอร์ฟิซึ่มส์ที่เหมาะสมกับทฤษฎีความซับซ้อน ตอนแรกฉันคิดว่า "นักแปล" ที่อ่อนแอในการคำนวณเช่นเครื่อง จำกัด - รัฐสามารถใช้เพื่อกำหนด isomorphisms ที่ได้รับอนุญาต แต่สิ่งนี้ดูเหมือนจะพังลงแล้วสำหรับการแปลเชิงวากยสัมพันธ์เล็กน้อยระหว่างสูตรตรรกะเชิงตรรกะที่เทียบเท่า (ดูตัวอย่างตารางนี้พร้อมกับคำจำกัดความของคู่ ในตรรกะเชิงเส้นA⊥A⊥A^\bot ) วันนี้ฉันมีความคิดต่อไปนี้: คำจำกัดความของภาษาที่สอดคล้องกับ "ปัญหาการตัดสินใจ" บางอย่างมักจะมีสองส่วน: (1) …

2
การอนุมานประเภท + การบรรทุกเกินพิกัด
ฉันกำลังมองหาอัลกอริทึมการอนุมานแบบสำหรับภาษาที่ฉันกำลังพัฒนา แต่ฉันไม่พบสิ่งที่ตรงกับความต้องการของฉันเพราะพวกเขามักจะเป็น: à la Haskell ด้วยความหลากหลาย แต่ไม่มีโฆษณามากเกินไป à la C ++ (อัตโนมัติ) ที่คุณมีการโหลดมากเกินไปแบบ ad-hoc แต่ฟังก์ชั่นเป็น monomorphic โดยเฉพาะอย่างยิ่งระบบพิมพ์ของฉันคือ (ลดความซับซ้อน) (ฉันใช้ไวยากรณ์ Haskellish แต่นี่คือภาษาที่ไม่เชื่อเรื่องพระเจ้า): data Type = Int | Double | Matrix Type | Function Type Type และฉันมีโอเปอเรเตอร์ * ซึ่งมีโอเวอร์โหลดค่อนข้างมาก Int -> Int -> Int (Function Int Int) -> Int -> Int Int …

1
มีข้อบกพร่องอะไรเกี่ยวกับวิธีการ "บันทึก - อิน - อินพุต" ของการคำนวณแบบย้อนกลับได้?
ฉันเป็นนักศึกษาระดับปริญญาตรีเพิ่งเริ่มอ่านเกี่ยวกับการคำนวณแบบย้อนกลับได้ ฉันรู้ว่าเนื่องจากหลักการของ Landauer ทำให้การคำนวณกลับไม่สามารถกระจายความร้อน (และกลับไม่ได้) ฉันนำมันขึ้นมาพร้อมกับอาจารย์ของฉันซึ่งไม่เคยได้ยินเรื่องการคำนวณย้อนกลับมาก่อนและเขาก็มีปัญหาในการเข้าใจว่าทำไมทฤษฎีการคำนวณแบบพลิกกลับได้นั้นไม่สำคัญ ประเด็นของเขาคือคุณสามารถบันทึกอินพุตได้เสมอเช่นสำหรับฟังก์ชั่นใด ๆ ฉ: { 0 , 1}n→ { 0 , 1}nฉ:{0,1}n→{0,1}nf: \{ 0, 1 \}^n \rightarrow \{ 0, 1 \}^n ที่คุณต้องการทำให้ย้อนกลับได้กำหนดฟังก์ชั่นใหม่ ฉr e v e r s ฉันb l e: { 0 , 1}n→ { 0 , 1}2 nฉRอีโวลต์อีRsผมขล.อี:{0,1}n→{0,1}2nf_{reversible}: \{ 0, 1 \}^n \rightarrow …

1
การรับรู้ทางน้ำในภาพถ่ายทางอากาศ - รูปหลายเหลี่ยมจากภาพการตรวจจับขอบ
ฉันกำลังพยายามจดจำเส้นทางน้ำจากภาพถ่ายทางอากาศ (พูดจาก Google Maps) รัฐบาลท้องถิ่นมักจะมีข้อมูล GIS ที่บอกว่าทางน้ำ (และถนนอาคาร ฯลฯ ) อยู่ที่ไหน แต่ข้อมูลน้ำในนั้นมักจะไม่ถูกต้องบ้างและเราอาจปรับปรุงให้ดีขึ้นโดยใช้ภาพถ่ายทางอากาศ ดังนั้นเราจึงมีข้อมูลบางอย่างที่ไม่น่าเชื่อถือเสมอไป ฉันรู้วิธีการประมวลผลข้อมูลภาพขั้นพื้นฐาน (น่าเสียดายที่ฉันยังไม่มีภาพตัวอย่างที่จะแสดงที่นี่ฉันพยายามจินตนาการว่าฉันสามารถทำสิ่งนี้ได้อย่างไรไม่มีรหัสที่ใช้งานได้): ฉันสามารถรวบรวมชุดสีบางค่าโดยใช้บิตของทางน้ำในภาพและคิดว่าพิกเซลใดที่อยู่ใกล้กับสีเหล่านี้มากที่สุดอาจใช้กับฟีเจอร์ประเภทอื่นเช่นหญ้าถนนอาคาร ฯลฯ หากฉันตั้งค่าขีด จำกัด ว่าพิกเซลใดที่ "ใกล้พอ" ฉันจะได้รับพิกเซลจำนวนหนึ่งซึ่งอาจเป็นทางน้ำ (แต่จะมีเสียงรบกวนมาก) ฉันสามารถเปลี่ยนภาพให้เป็นโทนสีเทาและใช้อัลกอริธึมการตรวจจับขอบมาตรฐานเพื่อหาว่าขอบอยู่ที่ไหน อีกครั้งสิ่งนี้ทำให้ฉันมีพิกเซลเหมือนขอบเขต แต่จะมีจุดรบกวนและขอบจะคิดเกินไปและ / หรือมีช่องว่าง สิ่งที่ฉันต้องการเป็นผลลัพธ์คือชุดของรูปหลายเหลี่ยมที่แสดงถึงเส้นทางน้ำที่เป็นไปได้ ฉันต้องการใช้ขอบที่ตรวจพบเพื่อสร้างรูปหลายเหลี่ยมและข้อมูลสีเพื่อตัดสินใจว่าส่วนใดของน้ำซึ่งอาจใช้ประโยชน์จากข้อมูลรัฐบาลที่เรามีอยู่แล้ว มีวิธีทราบจากผลลัพธ์ของอัลกอริธึมการตรวจจับขอบไปจนถึงชุดรูปหลายเหลี่ยมปิดที่ดีหรือไม่? หรือเคล็ดลับอื่น ๆ เกี่ยวกับวิธีการแก้ไขปัญหานี้หากมีวิธีที่ดีกว่า

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

6
เทคนิคการตรวจสอบโปรแกรมสามารถป้องกันข้อบกพร่องของประเภทของ Heartbleed ไม่ให้เกิดขึ้นได้หรือไม่?
ในเรื่องของ Heartbleed bug บรูซชไนเออร์เขียน Crypto-Gram เมื่อวันที่ 15 เมษายนว่า '' ภัยพิบัติ 'เป็นคำที่ถูกต้อง ในระดับ 1 ถึง 10 นี่คือ 11 ' ฉันอ่านเมื่อหลายปีก่อนว่าเคอร์เนลของระบบปฏิบัติการบางระบบได้รับการตรวจสอบอย่างเข้มงวดด้วยระบบตรวจสอบโปรแกรมที่ทันสมัย ด้วยเหตุนี้จึงสามารถป้องกันไม่ให้เกิดข้อผิดพลาดในประเภทของ Heartbleed ผ่านการประยุกต์ใช้เทคนิคการตรวจสอบโปรแกรมในวันนี้หรือไม่จริงหรือแม้กระทั่งเป็นไปไม่ได้

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

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

2
การเลือกพารามิเตอร์สำหรับขั้นตอนวิธีเชิงพันธุกรรม
เราจะเลือกจำนวนพารามิเตอร์ที่เหมาะสมสำหรับอัลกอริธึมทางพันธุกรรมเพื่อสร้างแบบจำลองระบบที่กำหนดได้อย่างไร? ตัวอย่างเช่นสมมติว่าคุณต้องการเพิ่มประสิทธิภาพการผลิตรถยนต์และคุณมี 1,000 วัดประสิทธิภาพต่อชั่วโมงในงานต่าง ๆ สำหรับพนักงาน 1,000 คนที่แตกต่างกัน ดังนั้นคุณมี 1,000,000 จุดข้อมูล ส่วนใหญ่เหล่านี้มีแนวโน้มที่จะมีความสัมพันธ์ที่ไม่ค่อยจะประสิทธิภาพโดยรวมของโรงงานของคุณ แต่ไม่ได้จึงไม่ค่อยที่คุณสามารถพูดได้ว่าพวกเขาจะไม่เกี่ยวข้องกับความเชื่อมั่นทางสถิติ คุณจะเลือกอินพุตสำหรับ GA ของคุณอย่างไรเพื่อที่คุณจะได้ไม่ต้องมีอิสระ 1,000,000+ องศาทำให้เกิดการลู่เข้าที่ช้ามากหรือไม่มีการลู่เข้าเลย โดยเฉพาะขั้นตอนวิธีใดบ้างที่เราสามารถใช้เพื่อเลือกล่วงหน้าหรือกำจัดคุณลักษณะที่เลือกได้ วิธีการหนึ่งที่ฉันได้ใช้ตัวเองอยู่ในสถานการณ์นี้จะพัฒนาตัวเลือกพารามิเตอร์ตัวเองดังนั้นผมอาจจะมีพ่อแม่เหมือน{a,b,c}, {b,d,e,q,x,y,z}และอื่น ๆ ฉันจะทำให้เด็กกลายพันธุ์เพื่อเพิ่มหรือลดคุณสมบัติ ใช้งานได้ดีกับคุณสมบัติโหล แต่ปัญหาคือว่ามันไม่มีประสิทธิภาพถ้ามีองศาอิสระจำนวนมาก ในกรณีนี้คุณกำลังดู10^nชุดค่าผสม (ในตัวอย่างด้านบน10^1,000,000) ซึ่งทำให้การกรองคุณสมบัติบางอย่างมีความสำคัญอย่างยิ่งเพื่อให้ได้ประสิทธิภาพที่มีประโยชน์

1
ค้นหาเส้นทาง k-shortest ระหว่างสองโหนด
รับ digraph ถ่วงน้ำหนัก G = V, EG=V,EG=V,Eและฟังก์ชั่นน้ำหนัก d( u , v )d(ยู,โวลต์)d(u,v)โดยปกติเราสามารถใช้อัลกอริทึมของ Dijkstra เพื่อรับเส้นทางที่สั้นที่สุด สิ่งที่ฉันสนใจคือทำอย่างไรจึงจะได้2ไม่มีวัน2nd2^{nd}เส้นทางที่สั้นที่สุด 3R d3Rd3^{rd}- สั้นที่สุดและอื่น ๆ คำถาม: มีอัลกอริทึมที่มีประสิทธิภาพในการรับเส้นทางที่สั้นที่สุดระหว่างสองโหนดในกราฟถ่วงน้ำหนักหรือไม่ มีอัลกอริธึมที่มีประสิทธิภาพในการรับเส้นทางที่สั้นที่สุดระหว่างสองโหนดในกราฟถ่วงน้ำหนักหรือไม่? คำตอบของทั้งคู่ก็โอเค แต่ฉันสงสัยว่าคำตอบของคำถามที่สองนั้นสามารถทำได้อย่างมีประสิทธิภาพมากกว่า kkk โทรหาคำตอบสำหรับคำถามแรก

2
กำลังมองหาชุดการใช้งานที่มีหน่วยความจำขนาดเล็ก
ฉันกำลังมองหาการนำไปใช้ของชนิดข้อมูลชุด นั่นคือเราต้อง รักษาเซตย่อยแบบไดนามิก SSS (ขนาด nnn) จากเอกภพของขนาดด้วยยู= { 0 , 1 , 2 , 3 , … , u - 1 }ยู={0,1,2,3,...,ยู-1}U = \{0, 1, 2, 3, \dots , u – 1\}ยูยูu การดำเนินงานinsert(x)(เพิ่มองค์ประกอบxในSSS ) และfind(x)(ตรวจสอบว่าองค์ประกอบxเป็นสมาชิกของSSS ) ฉันไม่สนใจเกี่ยวกับการดำเนินงานอื่น ๆ สำหรับการวางแนวในการใช้งานฉันกำลังทำงานกับเรามีคุณ≈1010ยู≈1010u \approx 10^{10}{10} ฉันรู้ของการใช้งานที่ให้การดำเนินงานทั้งสองในเวลาO ( 1 )O(1)O(1)ดังนั้นฉันกังวลส่วนใหญ่เกี่ยวกับขนาดของโครงสร้างข้อมูล ฉันคาดว่าหลายพันล้านรายการรายการ แต่ต้องการหลีกเลี่ยงการแลกเปลี่ยนให้มากที่สุด ฉันยินดีเสียสละเวลาทำงานหากจำเป็น ค่าตัดจำหน่ายรันไทม์ของO ( …

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

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