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

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

7
องค์ประกอบหนึ่งที่แตกต่างกันในสองอาร์เรย์ วิธีการค้นหาอย่างมีประสิทธิภาพ?
ฉันกำลังเตรียมการสัมภาษณ์การเขียนโปรแกรมและฉันไม่สามารถหาวิธีที่มีประสิทธิภาพที่สุดในการแก้ปัญหานี้ได้ สมมติว่าเรามีสองอาร์เรย์ประกอบด้วยตัวเลขที่ไม่เรียงกัน Array 2 มีหมายเลขที่ Array 1 ไม่มี ทั้งสองอาร์เรย์มีหมายเลขที่ตั้งแบบสุ่มไม่จำเป็นต้องอยู่ในลำดับเดียวกันหรือในดัชนีเดียวกัน ตัวอย่างเช่น: Array 1 [78,11, 143, 84, 77, 1, 26, 35 .... n] Array 2 [11,84, 35, 25, 77, 78, 26, 143 ... 21 ... n + 1] อัลกอริทึมที่เร็วที่สุดสำหรับการค้นหาหมายเลขที่แตกต่างคืออะไร? เวลาทำงานคืออะไร ในตัวอย่างนี้จำนวนที่เราจะค้นหาคือ 21 ความคิดของฉันคือการทำงานผ่าน Array 1 และลบค่านั้นออกจากอาร์เรย์ 2 ซ้ำแล้วซ้ำอีกจนกว่าคุณจะเสร็จสิ้น นี่ควรจะเป็นเวลาประมาณใช่ไหม?O ( n บันทึกn …

3
อัลกอริทึมเพื่อลดพื้นที่ผิวปริมาณที่กำหนด
พิจารณางานอัลกอริทึมต่อไปนี้: อินพุต: จำนวนเต็มบวกพร้อมกับการแยกตัวประกอบเฉพาะของการ ค้นหา: จำนวนเต็มบวกที่ลดขึ้นอยู่กับข้อ จำกัด ที่x , y , z x y + y z + x z x y z = nnnnx , y, zx,y,zx,y,zx y+ yZ+ x zxy+yz+xzxy+yz+xzx yZ= nxyz=nxyz=n ความซับซ้อนของปัญหานี้คืออะไร? มีอัลกอริธึมเวลาพหุนามหรือไม่? มันเป็น NP-hard หรือไม่? ปัญหานี้ถามโดยทั่วไปว่า: จากของแข็งที่เป็นรูปสี่เหลี่ยมผืนผ้าทั้งหมดที่มีปริมาตรเป็นและมิติใดเป็นจำนวนเต็มทั้งหมดอันใดที่มีพื้นที่ผิวน้อยที่สุดnnn ปัญหานี้เกิดขึ้นจาก Dan Meyer ภายใต้ชื่อThe Problem Problem ที่อาจารย์คณิตศาสตร์ 1,000 คนไม่สามารถแก้ไขได้ จนถึงขณะนี้ไม่มีครูคณิตศาสตร์ที่เขาทำงานด้วยได้พบอัลกอริทึมที่เหมาะสมสำหรับปัญหานี้ …

11
คือเหตุผลที่ ?
ฉันต้องการทราบว่ามีกฎที่จะพิสูจน์เรื่องนี้หรือไม่ ตัวอย่างเช่นถ้าผมใช้กฎหมายการจำหน่ายฉันจะได้รับเท่านั้นB)( ∨ ) ∧ ( ∨ ¬ B )(A∨A)∧(A∨¬B)(A \lor A) \land (A \lor \neg B)

4
ไม่มีอัลกอริทึมการเรียงลำดับพร้อมคุณสมบัติที่ต้องการทั้งหมดหรือไม่?
บนเว็บไซต์อัลกอริทึมการเรียงลำดับจะทำการอ้างสิทธิ์ต่อไปนี้: อัลกอริทึมการเรียงลำดับในอุดมคติจะมีคุณสมบัติดังต่อไปนี้: มีเสถียรภาพ: คีย์ที่เท่าเทียมกันจะไม่ถูกจัดลำดับใหม่ ทำงานในสถานที่ที่ต้องการพื้นที่เพิ่มเติมO ( 1 )O(1)O(1) การเปรียบเทียบคีย์แย่ที่สุดO ( n ⋅ lg)( n ) )O(n⋅LG⁡(n))O(n\cdot\lg(n)) กรณีที่เลวร้ายที่สุดในการแลกเปลี่ยนO ( n )O(n)O(n) Adaptive: เพิ่มความเร็วสูงถึงเมื่อข้อมูลเกือบจะถูกจัดเรียงหรือเมื่อมีคีย์เฉพาะไม่กี่ตัวO ( n )O(n)O(n) ไม่มีอัลกอริทึมที่มีคุณสมบัติเหล่านี้ทั้งหมดดังนั้นตัวเลือกการเรียงลำดับอัลกอริทึมจึงขึ้นอยู่กับแอปพลิเคชัน คำถามของฉันคือจริงหรือไม่ ไม่มีอัลกอริทึม [การเรียงลำดับ] ที่มีคุณสมบัติเหล่านี้ทั้งหมด และถ้าเป็นเช่นนั้นทำไม มันเกี่ยวกับคุณสมบัติเหล่านี้ที่ทำให้พวกเขาทั้งหมดเป็นไปไม่ได้ที่จะเติมเต็ม?

5
การบีบอัดข้อมูลโดยใช้ตัวเลขเฉพาะ
ฉันเพิ่งพบบทความที่น่าสนใจต่อไปนี้ซึ่งอ้างว่าบีบอัดชุดข้อมูลแบบสุ่มได้อย่างมีประสิทธิภาพมากกว่า 50% เสมอโดยไม่คำนึงถึงประเภทและรูปแบบของข้อมูล โดยทั่วไปจะใช้หมายเลขเฉพาะเพื่อสร้างการแทนค่าของ data data ขนาด 4 ไบต์ซึ่งง่ายต่อการแตกไฟล์เนื่องจากทุกหมายเลขเป็นผลิตภัณฑ์เฉพาะของ primes เพื่อเชื่อมโยงลำดับเหล่านี้กับช่วงเวลาที่มันใช้พจนานุกรม คำถามของฉันคือ: เป็นไปได้จริง ๆ ตามที่ผู้เขียนแนะนำหรือไม่ ตามกระดาษที่ผลของพวกเขามีประสิทธิภาพมากและเสมอข้อมูลบีบอัดให้มีขนาดเล็ก ขนาดพจนานุกรมจะใหญ่หรือไม่ สิ่งนี้ไม่สามารถใช้ในการบีบอัดข้อมูลที่ถูกบีบอัดซ้ำโดยใช้อัลกอริทึมเดียวกันซ้ำได้หรือไม่ เป็นที่ชัดเจนและได้รับการพิสูจน์แล้วว่าเทคนิคดังกล่าว (ซึ่งข้อมูลที่ถูกบีบอัดถูกบีบอัดซ้ำหลาย ๆ ครั้งที่เป็นไปได้ลดขนาดไฟล์ลงอย่างมาก) เป็นไปไม่ได้ จริง ๆ แล้วจะไม่มี bijection ระหว่างชุดของข้อมูลสุ่มทั้งหมดและข้อมูลที่บีบอัด เหตุใดจึงรู้สึกเช่นนี้เป็นไปได้ แม้ว่าเทคนิคจะยังไม่สมบูรณ์แบบ แต่ก็สามารถปรับให้เหมาะสมและปรับปรุงให้ดีขึ้นอย่างเห็นได้ชัด ทำไมสิ่งนี้จึงไม่เป็นที่รู้จัก / ศึกษาอย่างกว้างขวางมากขึ้น? หากการอ้างสิทธิ์และผลการทดลองเหล่านี้เป็นจริงการคำนวณแบบใหม่นี้ไม่สามารถนำมาคำนวณได้หรือไม่

4
จำนวนการเปรียบเทียบน้อยที่สุดจำเป็นต้องเรียงลำดับ (เรียงลำดับ) 5 องค์ประกอบ
ค้นหาจำนวนการเปรียบเทียบที่น้อยที่สุดที่จำเป็นในการจัดเรียง (เรียงลำดับ) ห้าองค์ประกอบและกำหนดอัลกอริทึมที่เรียงลำดับองค์ประกอบเหล่านี้โดยใช้การเปรียบเทียบจำนวนนี้ การแก้ไข :มี 5! = 120 ผลลัพธ์ที่เป็นไปได้ ดังนั้นต้นไม้ไบนารีสำหรับขั้นตอนการเรียงลำดับจะมีอย่างน้อย 7 ระดับ ที่จริงแล้ว ≥ 120 หมายถึง h ≥ 7. แต่การเปรียบเทียบ 7 ครั้งนั้นไม่เพียงพอ จำนวนการเปรียบเทียบที่น้อยที่สุดที่จำเป็นในการจัดเรียง (เรียงลำดับ) ห้าองค์ประกอบคือ 82h2ชั่วโมง2^hhชั่วโมงh นี่คือคำถามจริงของฉัน: ฉันพบอัลกอริทึมที่ทำในการเปรียบเทียบ 8 แต่ฉันจะพิสูจน์ได้อย่างไรว่าไม่สามารถทำได้ในการเปรียบเทียบ 7 รายการ

1
อะไรคือระบบพิมพ์ที่แข็งแกร่งที่รู้จักกันดีที่สุดซึ่งอนุมานได้?
เป็นที่ทราบกันดีว่าการอนุมานของ Hindley-Milner (การพิมพ์ -calculus พร้อม polymorphism) นั้นมีการอนุมานประเภทที่สามารถตัดสินใจได้: คุณสามารถสร้างชนิดหลักการสำหรับโปรแกรมใด ๆ โดยไม่มีคำอธิบายประกอบใด ๆλλ\lambda การเพิ่มประเภทของสไตล์ Haskell ดูเหมือนจะรักษาความสามารถในการถอดรหัสได้ แต่การเพิ่มเติมเพิ่มเติมทำให้การอนุมานโดยไม่มีการเพิ่มความคิดเห็นไม่สามารถอธิบายได้ (ตระกูลตระกูล, GADTs, ชนิดพึ่งพา, ประเภท Rank, N, Systemเป็นต้น)ωω\omega ฉันสงสัยว่า: อะไรคือระบบพิมพ์ที่แข็งแกร่งที่สุดที่มีการอนุมานได้อย่างสมบูรณ์? มันจะอยู่ที่ไหนสักแห่งระหว่าง Hindley-Milner (decidable อย่างสมบูรณ์) และ dependent-types (undecidable สมบูรณ์) มีแง่มุมของ DT ที่สามารถเพิ่มซึ่งรักษาความสามารถในการตัดสินใจอนุมานได้หรือไม่? มีงานวิจัยใดที่ทำเพื่อดูว่าสามารถผลักดันสิ่งนี้ได้ไกลแค่ไหน? ฉันรู้ว่าไม่มีระบบที่แข็งแกร่งที่สุดเพียงระบบเดียวที่มีความเป็นไปได้ที่จะเกิดการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ที่ไม่สิ้นสุดและเพิ่มขึ้นซึ่งสามารถเพิ่มเข้าไปในการอนุมาน HM แต่มีแนวโน้มว่าผู้สมัครที่ใช้งานได้ไม่กี่คนของระบบที่ถูกค้นพบ แก้ไข: เนื่องจากไม่มีระบบที่ "แข็งแกร่งที่สุด" ฉันจะยอมรับคำตอบที่แสดงถึงระบบที่น่าทึ่งซึ่งขยาย Hindley Milner ด้วยการอนุมานที่แน่นอน …

2
การแสดงออกของการคำนวณเหมือนกับ monad หรือไม่?
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 5 ปีที่ผ่านมา ฉันยังคงเรียนรู้การเขียนโปรแกรมฟังก์ชั่น (ด้วย f #) และฉันเพิ่งเริ่มอ่านเกี่ยวกับนิพจน์การคำนวณ ฉันยังไม่เข้าใจแนวคิดและสิ่งหนึ่งที่ทำให้ฉันไม่แน่ใจเมื่ออ่านบทความทั้งหมดเกี่ยวกับพระ (ส่วนใหญ่เขียนจากฐานของ Haskell) คือความสัมพันธ์ระหว่างนิพจน์การคำนวณกับพระ ต้องเขียนทั้งหมดที่นี่เป็นคำถามของฉัน (จริง ๆ แล้วสองคำถาม): การคำนวณการคำนวณ F # ทุกครั้งเป็น Monad หรือไม่? Monad ทุกคนสามารถแสดงออกด้วยการคำนวณการคำนวณ F # ได้หรือไม่? ฉันได้อ่านนี้โพสต์ของโทมัส Petricek และถ้าผมเข้าใจมันได้ดีก็ระบุว่าการแสดงออกการคำนวณมากกว่า monads แต่ผมไม่แน่ใจว่าถ้าผมแปลความหมายนี้ได้อย่างถูกต้อง

2
รากฐานทางทฤษฎีของการแบ่งแยกและการพิชิต
เมื่อพูดถึงการออกแบบอัลกอริธึมมักใช้เทคนิคต่อไปนี้: การเขียนโปรแกรมแบบไดนามิก กลยุทธ์โลภ แบ่งและพิชิต ในขณะที่วิธีการสองวิธีแรกมีรากฐานทางทฤษฎีที่รู้จักกันดีคือหลักการของ Bellman Optimality และ matroid (resp. greedoid) ทฤษฎีฉันไม่สามารถหากรอบทั่วไปสำหรับอัลกอริธึมตาม D&C ประการแรกฉันตระหนักถึงบางสิ่งบางอย่างที่เรา (หรือมากกว่าผู้เชี่ยวชาญ) ที่แนะนำในคลาสการเขียนโปรแกรมใช้งานได้เรียกว่า "โครงกระดูกอัลกอริทึม" ที่เกิดขึ้นในบริบทของ combinators ตัวอย่างของที่นี่เราให้โครงกระดูกดังกล่าวสำหรับอัลกอริธึม D&C ดังนี้: คำนิยาม : ปล่อยให้เป็นเซตที่ไม่ว่างเปล่า เราเรียกองค์ประกอบของโซลูชั่นและองค์ประกอบของ (นั่นคือส่วนย่อยของ) จะเรียกว่าเป็นปัญหา จากนั้นD & C- โครงกระดูกคือ tuple 4โดยที่:SA,SA,SA,SSSS AP:=P(A)P:=P(A)P:=\mathfrak{P}(A)AAA(Pβ,β,D,C)(Pβ,β,D,C)(P_\beta, \beta, \mathcal{D}, \mathcal{C}) PβPβP_\betaเป็นกริยามากกว่าชุดของปัญหาและเราบอกว่าปัญหาที่เกิดขึ้นเป็นพื้นฐาน IFFถือpppPβ(p)Pβ(p)P_\beta(p) ββ\betaเป็นการแมปที่กำหนดวิธีแก้ปัญหาสำหรับปัญหาพื้นฐานแต่ละข้อPβ→SPβ→SP_\beta \rightarrow S DD\mathcal{D}คือการแมป ที่แบ่งแต่ละปัญหาออกเป็นชุดย่อยของปัญหาP→P(P)P→P(P)P \rightarrow \mathfrak{P}(P) CC\mathcal{C}คือการทำแผนที่ที่เข้าร่วมการแก้ปัญหา (ขึ้นอยู่กับชนิดของ "ปัญหาการหมุน") …

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

3
เหตุใดปัญหา NP-complete จึงแตกต่างกันในแง่ของการประมาณของพวกเขา
ฉันอยากเริ่มคำถามด้วยการบอกว่าฉันเป็นโปรแกรมเมอร์และฉันไม่มีพื้นฐานด้านทฤษฎีความซับซ้อนมากมาย สิ่งหนึ่งที่ฉันสังเกตเห็นคือในขณะที่ปัญหาหลายอย่างเป็นปัญหาแบบ NP- เมื่อขยายไปสู่ปัญหาการเพิ่มประสิทธิภาพ ตัวอย่างที่ดีคือ TSP ถึงแม้ว่า TSP ทุกประเภทจะมีปัญหา NP-complete แต่ปัญหาการปรับให้เหมาะสมที่ตรงกันนั้นง่ายขึ้นและง่ายขึ้นในการประมาณค่าด้วยการทำให้เรียบง่ายต่อเนื่อง กรณีทั่วไปคือ NPO-complete, กรณีเมทริกคือ APX-complete, และกรณี Euclidean มี PTAS จริง นี่ดูเหมือนจะขัดกับฉันและฉันก็สงสัยว่ามันมีเหตุผลไหม

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

4
การเพิ่มประสิทธิภาพอัตโนมัติของการคูณเวกเตอร์เมทริกซ์ 0-1
คำถาม: มีขั้นตอนหรือทฤษฎีที่สร้างขึ้นสำหรับการสร้างรหัสที่ใช้การคูณเมทริกซ์เวกเตอร์อย่างมีประสิทธิภาพหรือไม่เมื่อเมทริกซ์นั้นหนาแน่นและเต็มไปด้วยเลขศูนย์และอันเดียว ตามหลักการแล้วรหัสที่ได้รับการปรับปรุงจะใช้ประโยชน์จากข้อมูลที่คำนวณก่อนหน้านี้อย่างเป็นระบบเพื่อลดงานซ้ำซ้อน ในคำอื่น ๆ ฉันมีเมทริกซ์ และผมต้องการที่จะทำบาง precomputation ขึ้นอยู่กับที่จะทำให้การคำนวณเป็นที่มีประสิทธิภาพที่สุดเมื่อผมมารู้ทีหลังได้รับเวกเตอร์โวลต์MMMMMMMvMvMvvvv MMMเป็นเมทริกซ์ไบนารีหนาแน่นที่เป็นรูปสี่เหลี่ยมผืนผ้าที่รู้จักกันใน "เวลารวบรวม" ในขณะที่เป็นเวกเตอร์จริงที่ไม่รู้จักซึ่งรู้จักกันใน "เวลารัน" เท่านั้นvvv ตัวอย่างที่ 1: (หน้าต่างบานเลื่อน) ให้ฉันใช้ตัวอย่างเล็ก ๆ ง่ายๆเพื่ออธิบายประเด็นของฉัน พิจารณาเมทริกซ์ เผื่อว่าเราใช้เมทริกซ์นี้เพื่อเวกเตอร์จะได้รับW = Mv จากนั้นรายการของผลลัพธ์คือ \ start {align} w_1 & = v_1 + v_2 + v_3 + v_5 \\ w_2 & = v_2 + v_3 + v_4 + v_5 + …

2
ทฤษฎีหมวดหมู่หมายถึงอะไรยังไม่รู้ว่าจะจัดการกับฟังก์ชันที่มีลำดับสูงกว่าได้อย่างไร
ในการอ่านคำตอบของ Uday Reddy ต่อความสัมพันธ์ระหว่างหน้าที่ใน SML กับทฤษฎีหมวดหมู่คืออะไร? รัฐ Uday ทฤษฎีหมวดหมู่ยังไม่ทราบวิธีจัดการกับฟังก์ชั่นที่มีลำดับสูงกว่า สักวันมันจะ เนื่องจากฉันคิดว่าทฤษฎีหมวดหมู่สามารถใช้เป็นรากฐานสำหรับคณิตศาสตร์ได้ดังนั้นจึงควรเป็นไปได้ที่จะได้รับฟังก์ชันคณิตศาสตร์และฟังก์ชันลำดับสูงทั้งหมด ดังนั้นสิ่งที่มีความหมายตามทฤษฎีหมวดหมู่ยังไม่ทราบวิธีการจัดการกับฟังก์ชั่นการสั่งซื้อที่สูงขึ้น? การพิจารณาทฤษฎีหมวดหมู่เป็นพื้นฐานสำหรับคณิตศาสตร์หรือไม่

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

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