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

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

3
โครงสร้างข้อมูลที่มีประสิทธิภาพรองรับการแทรกการลบและ MostFrequent
สมมติว่าเรามีชุดDDDและสมาชิกแต่ละคนเป็นคู่ข้อมูลและคีย์ เราต้องการโครงสร้างข้อมูลที่จะสนับสนุนการดำเนินการต่อไปนี้:DDD แทรกเข้า ,(d,k)(d,k)(d,k)DDD ลบสมาชิก (ไม่จำเป็นต้องค้นหาเพื่อค้นหาเช่นชี้ไปที่สมาชิกใน )eeeeeeeeeDDD MostFrequent ซึ่งส่งคืนสมาชิกเช่นนั้นเป็นหนึ่งในคีย์ที่พบบ่อยที่สุดใน (โปรดทราบว่าคีย์ที่บ่อยที่สุดไม่จำเป็นต้องไม่ซ้ำกัน)e∈De∈De \in De.keye.keye.keyDDD การใช้โครงสร้างข้อมูลนี้อย่างมีประสิทธิภาพคืออะไร โซลูชันของฉันคือฮีปสำหรับคีย์และความถี่ที่จัดลำดับความสำคัญด้วยความถี่พร้อมกับตารางแฮชที่ฟังก์ชันแฮชจะแมปสมาชิกที่มีคีย์เดียวกันกับสล็อตเดียวกันในตารางแฮช สิ่งนี้สามารถให้สำหรับการดำเนินการสองครั้งแรกและสำหรับครั้งที่สาม (เวลาที่เลวร้ายที่สุดในการรันกรณี)Θ(lgn)Θ(lg⁡n)\Theta(\lg n)Θ(1)Θ(1)\Theta(1) ฉันสงสัยว่ามีวิธีแก้ปัญหาที่มีประสิทธิภาพมากกว่านี้ไหม (หรือโซลูชันที่เรียบง่ายกว่าที่มีประสิทธิภาพเท่ากันใช่หรือไม่)

1
เงื่อนไข Planarity สำหรับ Planar 1-in-3 SAT
ภาพถ่าย 3SATนั้นสมบูรณ์แบบ อินสแตนซ์ภาพถ่าย 3SAT เป็นอินสแตนซ์ 3SAT ซึ่งกราฟที่สร้างขึ้นโดยใช้กฎต่อไปนี้คือภาพถ่าย: เพิ่มจุดยอดสำหรับทุกๆและ¯ x ixผมxผมx_ixผม¯xผม¯\bar{x_i} เพิ่มจุดสุดยอดสำหรับทุกข้อคJคJC_j เพิ่มขอบสำหรับทุกคู่( xผม, xผม¯)(xผม,xผม¯)(x_i,\bar{x_i}) เพิ่มขอบจากจุดสุดยอด (หรือ¯ x i ) ให้กับแต่ละจุดสุดยอดที่เป็นตัวแทนของส่วนที่มีอยู่xผมxผมx_ixผม¯xผม¯\bar{x_i} เพิ่มขอบระหว่างตัวแปรทั้งสองติดต่อกัน ( x1, x2) , ( x2, x3) , . . , ( xn, x1)(x1,x2),(x2,x3),...,(xn,x1)(x_1,x_2),(x_2,x_3),...,(x_n,x_1) โดยเฉพาะอย่างยิ่งกฎที่ 5 สร้าง "กระดูกสันหลัง" ที่แยกส่วนคำสั่งในสองภูมิภาคที่แตกต่างกัน Planar 1-in-3 SATนั้นสมบูรณ์แบบด้วยเช่นกัน ( xผม, xฉัน+ 1)(xผม,xผม+1)(x_i,x_{i+1})

2
IELR (1) -parser คืออะไร
ฉันพยายามสอนตัวเองเกี่ยวกับการใช้วัวกระทิง manpage bison (1) พูดเกี่ยวกับ bison: สร้าง LR deterministic LR หรือตัวแยกวิเคราะห์ LR (GLR) ทั่วไปที่ใช้ LALR (1), IELR (1), หรือ canonical LR (1) ตารางตัวแยกวิเคราะห์ ตัวแยกวิเคราะห์ IELR คืออะไร บทความที่เกี่ยวข้องทั้งหมดที่ฉันค้นพบในเว็บไซต์ทั่วโลกนั้นได้รับการชำระเงินแล้ว

2
คำถามบางข้อเกี่ยวกับการคำนวณแบบขนานและคลาส NC
ฉันมีคำถามที่เกี่ยวข้องจำนวนมากเกี่ยวกับสองหัวข้อนี้ ขั้นแรกให้ข้อความที่ซับซ้อนมากที่สุดจะปัดเฉพาะคลาสNCNC\mathbb{NC}เท่านั้น มีทรัพยากรที่ดีที่ครอบคลุมการวิจัยในเชิงลึกมากขึ้นหรือไม่? ตัวอย่างเช่นสิ่งที่กล่าวถึงคำถามทั้งหมดของฉันด้านล่าง นอกจากนี้ฉันสมมติว่าNCNC\mathbb{NC}ยังคงเห็นงานวิจัยจำนวนพอสมควรเนื่องจากลิงก์เชื่อมโยงไปยังการขนาน แต่ฉันอาจผิด ส่วนในสวนสัตว์ที่ซับซ้อนไม่ได้ช่วยอะไรมาก ประการที่สองการคำนวณบน semigroup อยู่ในหากเราถือว่าการดำเนินการของ semigroup นั้นต้องใช้เวลาคงที่ แต่จะเกิดอะไรขึ้นถ้าการดำเนินการไม่ใช้เวลาคงที่เช่นเดียวกับจำนวนเต็มที่ไม่ได้ จำกัด มีปัญหาใด ๆ ที่ยังไม่ทราบN C iหรือไม่?NC1NC1\mathbb{NC}^1NCiNCi\mathbb{NC}^i ประการที่สามเนื่องจากมีอัลกอริทึมในการแปลงอัลกอริธึม logspace ใด ๆ ให้เป็นเวอร์ชั่นคู่ขนานหรือไม่?L⊆NC2L⊆NC2\mathbb{L} \subseteq \mathbb{NC}^2 ประการที่สี่เสียงเหมือนคนส่วนใหญ่คิดว่าในลักษณะเดียวกับที่P ≠ N P สัญชาตญาณที่อยู่เบื้องหลังสิ่งนี้คืออะไร?NC≠PNC≠P\mathbb{NC} \ne \mathbb{P}P≠NPP≠NP\mathbb{P} \ne \mathbb{NP} ประการที่ห้าข้อความที่ฉันได้อ่านทุกกล่าวถึงชั้นแต่ให้ตัวอย่างของปัญหามันไม่มี ยังมี .... บ้าง?RNCRNC\mathbb{RNC} สุดท้ายคำตอบนี้กล่าวถึงปัญหาในมีเวลาดำเนินการแบบขนานเชิงเส้นย่อย ตัวอย่างของปัญหาเหล่านี้มีอะไรบ้าง มีคลาสความซับซ้อนอื่น ๆ ที่มีอัลกอริทึมแบบขนานที่ไม่ทราบว่าอยู่ใน N Cหรือไม่PP\mathbb{P}NCNC\mathbb{NC}

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

1
การนับคู่ผกผัน
แอปพลิเคชั่นการแบ่งและพิชิตแบบคลาสสิกคือการแก้ปัญหาต่อไปนี้: รับอาร์เรย์ของที่แตกต่างกัน, องค์ประกอบเทียบเคียงนับจำนวนของคู่ผกผันในอาร์เรย์: คู่เช่นว่าและเจa[1…n]a[1…n]a[1\dots n](i,j)(i,j)(i,j)a[i]>a[j]a[i]>a[j]a[i] \gt a[j]i<ji<ji \lt j วิธีการหนึ่งในการทำเช่นนี้คือผสาน Merge Sort แต่ยังนับจำนวนคู่ผกผันในปัญหาย่อยด้วย ในระหว่างขั้นตอนการผสานเราจะนับจำนวนคู่ผกผันที่ครอบคลุมปัญหาย่อย (สอง) และเพิ่มเข้าไปในการนับของปัญหาย่อย ขณะนี้เป็นสิ่งที่ดีและให้อัลกอริทึมเวลาสิ่งนี้ทำให้เกิดความสับสนO(nlogn)O(nlog⁡n)O(n\log n) หากเรามีข้อ จำกัด เพิ่มเติมที่อาเรย์เป็นแบบอ่านอย่างเดียวเราสามารถทำสำเนาและจัดการกับการคัดลอกหรือใช้โครงสร้างข้อมูลเพิ่มเติมเช่นสถิติการสั่งซื้อแบบต้นไม้ไบนารีที่สมดุลเพื่อทำการนับซึ่งทั้งสองอย่างใช้พื้นที่Θ(n)Θ(n)\Theta(n) คำถามปัจจุบันคือพยายามพื้นที่ให้ดีขึ้นโดยไม่กระทบต่อเวลาใช้งาน กล่าวคือ มีอัลกอริธึมเวลาเพื่อนับจำนวนคู่ผกผันซึ่งทำงานบนอาเรย์แบบอ่านอย่างเดียวและใช้พื้นที่ย่อยเชิงเส้น (เช่น ) หรือไม่O(nlogn)O(nlog⁡n)O(n\log n)o(n)o(n)o(n) สมมติรูปแบบ RAM ค่าใช้จ่ายสม่ำเสมอและองค์ประกอบที่ใช้เวลาพื้นที่และการเปรียบเทียบระหว่างพวกเขาคือ(1)O(1)O(1)O(1)O(1)O(1)O(1) การอ้างอิงจะทำ แต่คำอธิบายจะดีกว่า :-) ฉันพยายามค้นหาเว็บ แต่ไม่พบคำตอบที่เป็นบวก / ลบสำหรับสิ่งนี้ ฉันคิดว่านี่เป็นเพียงความอยากรู้อยากเห็น

1
สำหรับทัวริงเครื่อง
ฉันสงสัยว่ามาว่าภาษาต่อไปนี้เป็นRRR\mathrm R LM1={⟨M2⟩∣∣M2 is a TM, and L(M1)=L(M2), and |⟨M1⟩|>|⟨M2⟩|}LM1={⟨M2⟩|M2 is a TM, and L(M1)=L(M2), and |⟨M1⟩|>|⟨M2⟩|}L_{M_1}=\Bigl\{\langle M_2\rangle \;\Big|\;\; M_2 \text{ is a TM, and } L(M_1)=L(M_2), \text{ and } |\langle M_1\rangle| > | \langle M_2 \rangle| \Bigr\} (ฉันรู้ว่ามันอยู่ในเนื่องจากมีคำตอบสำหรับคำถามแบบปรนัยนี้ แต่ไม่มีคำอธิบาย)RR\mathrm R ฉันคิดทันทีว่า เนื่องจากเรารู้ว่าการตรวจสอบว่าสองเครื่องยอมรับภาษาเดียวกันนั้นไม่สามารถตัดสินใจได้จริง ๆ ฉันคิดว่า: มันเป็น "เท็จ" ทันที แต่มันไม่สามารถเป็นเช่นนั้นได้ มีทัวริงจำนวนมากที่ยอมรับคำตอบเดียวกันและมีการเข้ารหัสที่แตกต่างกันLM1∉ …

1
เมื่อไหร่
จากบทความของ Wikipediaนั้น L ในหมายถึง "การสแกนจากซ้ายไปขวา" และ "R" หมายถึง "การสืบทอดที่ถูกต้องที่สุด" อย่างไรก็ตามในเอกสารต้นฉบับของ Knuth บนไวยากรณ์เขากำหนด (หน้า 610) เป็นภาษาที่ "สามารถแปลได้จากซ้ายไปขวาด้วยถูกผูกมัด"L R ( k )LR(k)LR(k)L R ( k )LR(k)LR(k)L R ( k)LR(k)LR(k)kkk ฉันคาดเดาว่าคำศัพท์ใหม่นี้ได้รับเลือกให้เติมเต็มแยกวิเคราะห์ "จากซ้ายไปขวาสแกนมาจากซ้ายสุด" ที่กล่าวว่าฉันไม่ทราบเมื่อคำศัพท์เปลี่ยนความหมายL L ( k )LL(k)LL(k) ไม่มีใครรู้ว่าตัวย่อใหม่ของมาจากไหน?L R ( k )LR(k)LR(k)

2
มันตัดสินใจได้ไหมว่า TM จะไปถึงตำแหน่งบนเทปหรือไม่?
ฉันมีคำถามเหล่านี้จากการสอบแบบเก่าที่ฉันพยายามจะแก้ สำหรับปัญหาแต่ละใส่เป็นการเข้ารหัสบางทัวริงเครื่องMMMM สำหรับจำนวนเต็มและสามปัญหาต่อไปนี้:c>1c>1c>1 เป็นจริงหรือไม่ว่าสำหรับทุกอินพุต , M จะไม่ผ่านเครื่องหมาย| x | ตำแหน่ง+ cเมื่อทำงานบนx ?xxx|x|+c|x|+c|x|+cxxx เป็นจริงหรือไม่ว่าสำหรับทุกอินพุต , M จะไม่ผ่านค่าสูงสุด{ | x | - c , 1 }ตำแหน่งเมื่อเรียกใช้บนx ?xxxmax{|x|−c,1}max{|x|−c,1}\max \{|x|-c,1 \}xxx เป็นความจริงหรือเปล่าที่อินพุตทุกตัวM ไม่ผ่านตำแหน่ง( | x | + 1 ) / cเมื่อทำงานบนx ?xxx(|x|+1)/c(|x|+1)/c(|x|+1)/cxxx มีปัญหากี่ข้อที่ตัดสินใจได้? หมายเลขปัญหา (1) ตามความเห็นของฉันอยู่ในถ้าฉันเข้าใจถูกต้องตั้งแต่ฉันสามารถเรียกใช้อินพุตทั้งหมดแบบขนานและหยุดถ้าอินพุตบางตัวมาถึงตำแหน่งนี้และเพื่อแสดงว่ามันไม่ได้อยู่ในRฉันสามารถลดส่วนประกอบได้ ของตู้เอทีเอ็มไปเลย ฉันสร้างเครื่องจักรทัวริงM ′ดังต่อไปนี้: สำหรับอินพุตyฉันตรวจสอบว่าyเป็นประวัติของการคำนวณหรือไม่ถ้าใช่แล้วM ′ทำงานถูกต้องและไม่หยุดถ้าไม่แล้วจะหยุดcoRE∖RcoRE∖R\text {coRE} \smallsetminus \text …

1
คาดว่าจำนวนของการแลกเปลี่ยนในการจัดเรียงฟอง
รับอาร์เรย์ของจำนวนเต็มองค์ประกอบในอาร์เรย์แต่ละคนสามารถเพิ่มขึ้นจำนวนคงที่กับบางส่วนน่าจะเป็น ,&lt;n ฉันต้องหาจำนวนสว็อปที่คาดว่าจะเกิดขึ้นเพื่อจัดเรียงอาเรย์โดยใช้การเรียงลำดับแบบบับเบิลN ขP [ ผม] 0 ≤ ฉัน&lt; nAAANNNbbbp[i]p[i]p[i]0≤i&lt;n0≤i&lt;n0 \leq i < n ฉันได้ลองทำสิ่งต่อไปนี้แล้ว: ความน่าจะเป็นขององค์ประกอบสำหรับสามารถคำนวณได้ง่ายจากความน่าจะเป็นที่กำหนดi &lt; jA[i]&gt;A[j]A[i]&gt;A[j]A[i] > A[j]i&lt;ji&lt;ji < j จากการใช้ข้างต้นฉันได้คำนวณจำนวน swaps ที่คาดไว้เป็น: double ans = 0.0; for ( int i = 0; i &lt; N-1; i++ ){ for ( int j = i+1; j &lt; N; j++ …

2
พิสูจน์ว่าทุกเส้นทางที่ยาวที่สุดมีจุดยอดอย่างน้อยหนึ่งจุดร่วมกัน
หากกราฟเชื่อมต่อกันและไม่มีเส้นทางที่มีความยาวมากกว่าแสดงว่าทุกเส้นทางในGของความยาวkมีจุดยอดอย่างน้อยหนึ่งจุดร่วมกัน GGGkkkGGGkkk ฉันคิดว่าจุดสุดยอดทั่วไปควรอยู่กลางเส้นทางทั้งสอง เพราะถ้ากรณีนี้ไม่ได้แล้วเราจะได้มีเส้นทางของความยาว&gt;k&gt;k>k k ฉันถูกไหม?

2
การแลกเปลี่ยนพื้นที่เวลาสำหรับปัญหาองค์ประกอบที่ขาดหายไป
นี่เป็นปัญหาที่รู้จักกันดี รับอาร์เรย์A[1…n]A[1…n]A[1\dots n]ของจำนวนเต็มบวกเอาท์พุทจำนวนเต็มบวกที่เล็กที่สุดที่ไม่ได้อยู่ในอาร์เรย์ ปัญหาสามารถแก้ไขได้ในพื้นที่และเวลาO(n)O(n)O(n) : อ่านอาร์เรย์ติดตามในพื้นที่ไม่ว่าจะเป็นเกิดขึ้นสแกนหาองค์ประกอบที่เล็กที่สุดO(n)O(n)O(n)1,2,…,n+11,2,…,n+11,2,\dots,n+1 ฉันสังเกตเห็นว่าคุณสามารถแลกเปลี่ยนพื้นที่เวลา ถ้าคุณมีหน่วยความจำเท่านั้นคุณสามารถทำมันได้ในรอบและได้รับเวลา(kn) ในกรณีพิเศษมีอัลกอริทึมกำลังสอง - เวลาคงที่แน่นอนO(nk)O(nk)O(\frac{n}{k})kkkO(kn)O(kn)O(k n) คำถามของฉันคือ: สิ่งนี้เป็นการแลกเปลี่ยนที่ดีที่สุดหรือไม่คือ ? โดยทั่วไปแล้วเราจะพิสูจน์ขอบเขตดังกล่าวได้อย่างไรtime⋅space=Ω(n2)time⋅space=Ω(n2)\operatorname{time} \cdot \operatorname{space} = \Omega(n^2) สมมติว่ารุ่น RAM พร้อมเลขคณิตที่ จำกัด และการเข้าถึงอาร์เรย์ใน O (1) แบบสุ่ม แรงบันดาลใจสำหรับปัญหานี้: แลกเปลี่ยนพื้นที่เวลาสำหรับ palindromes ในรูปแบบเทปเดียว (ดูตัวอย่างที่นี่ )

1
ปัญหาความครอบคลุม (ตัวส่งและตัวรับ)
ฉันพยายามที่จะแก้ปัญหาความคุ้มครองต่อไปนี้ มีตัวส่งสัญญาณพร้อมพื้นที่ครอบคลุม 1 กม. และตัวรับสัญญาณตัดสินใจในที่ตัวรับสัญญาณทั้งหมดได้รับการคุ้มครองโดยตัวส่งสัญญาณใด ๆ ผู้เปิดเผยและเครื่องส่งสัญญาณทั้งหมดจะถูกแทนด้วยพิกัดและของพวกเขาnnnnnnO(nlogn)O(nlog⁡n)O(n\log n)xxxyyy วิธีการแก้ปัญหาที่ทันสมัยที่สุดที่ฉันจะมาพร้อมกับใช้เวลาlog) สำหรับตัวรับสัญญาณทุกตัวเรียงลำดับตัวส่งทั้งหมดตามระยะทางถึงตัวรับสัญญาณปัจจุบันจากนั้นนำตัวส่งสัญญาณด้วยระยะทางที่สั้นที่สุดและระยะทางที่สั้นที่สุดนี้ควรอยู่ภายใน 0.5 กม.O(n2logn)O(n2log⁡n)O(n^2\log n) แต่วิธีการที่มีลักษณะไร้เดียงสาชอบมากดีขึ้นในเวลาซับซ้อน2) เพียงคำนวณระยะทางทั้งหมดระหว่างเครื่องส่งสัญญาณและตัวรับสัญญาณทุกคู่O(n2)O(n2)O(n^2) ฉันไม่แน่ใจว่าฉันสามารถใช้อัลกอริธึมการค้นหาระยะในปัญหานี้ได้ไหม ตัวอย่างเช่น kd-trees ทำให้เราสามารถค้นหาช่วงดังกล่าวได้ แต่ฉันไม่เคยเห็นตัวอย่างและฉันไม่แน่ใจว่ามีการค้นหาแบบวงกลมสำหรับแวดวงหรือไม่ ความซับซ้อนที่ได้รับถือว่าวิธีการแก้ปัญหาควรคล้ายกับการเรียงลำดับO(nlogn)O(nlog⁡n)O(n\log n)

2
การแทนตัวเลขเชิงลบและจำนวนเชิงซ้อนโดยใช้แคลคูลัสแลมบ์ดา
บทเรียนส่วนใหญ่เกี่ยวกับแลมบ์ดาแคลคูลัสให้ตัวอย่างที่ฟังก์ชัน Integers และ Booleans ที่เป็นบวกสามารถแสดงได้ -1 แล้วฉันล่ะ

2
ปัญหา NP ทุกปัญหามีสูตร ILP ขนาดโพลีหรือไม่
เนื่องจาก Integer Linear Programming คือ NP-complete จึงมีการลด Karp จากปัญหาใด ๆ ใน NP ไป ฉันคิดว่านี่บ่งบอกว่ามีสูตร ILP ขนาดพหุนามเสมอสำหรับปัญหาใด ๆ ใน NP แต่ฉันเคยเห็นเอกสารเกี่ยวกับปัญหา NP เฉพาะที่ผู้คนเขียนสิ่งต่าง ๆ เช่น "นี่เป็นสูตรโพลีขนาดแรก" หรือ "ไม่มีสูตรโพลีขนาดเท่าที่รู้" นั่นเป็นเหตุผลที่ฉันงง

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