คำถามติดแท็ก arrays

โครงสร้างข้อมูลการเข้าถึงโดยสุ่มตามลำดับซึ่งโดยปกติขนาดจะไม่สามารถเปลี่ยนแปลงได้หลังการสร้าง

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

1
ประมวลผลอาร์เรย์ล่วงหน้าเพื่อนับองค์ประกอบในชิ้น (ลดเหลือ RMQ?)
รับอาร์เรย์1 , ... , nจำนวนธรรมชาติ≤ kที่kเป็นค่าคงที่ฉันต้องการคำตอบในO ( 1 )คำสั่งของรูปแบบ: "กี่ครั้งไม่เมตรปรากฏในอาร์เรย์ระหว่างดัชนีฉันและเจ "a1, … , ana1,…,ana_1,\ldots,a_n≤ k≤k\leq kkkkO ( 1 )O(1)O(1)ม.mmiiijjj อาร์เรย์ควรถูกประมวลผลล่วงหน้าในเวลาเชิงเส้น โดยเฉพาะอย่างยิ่งฉันต้องการทราบว่ามีการลดลงของการค้นหาขั้นต่ำของช่วงหรือไม่ นี่เทียบเท่ากับ RMQ ในกรณีที่และคุณต้องการสอบถามจำนวนคนภายในช่วงเวลา ดังนั้นเราจึงสามารถใช้มัน ฉันไม่สามารถตอบคำถามของตัวเองได้เนื่องจากข้อ จำกัด ของ SEk=1k=1k=1

2
วิธีจัดการกับอาร์เรย์ในระหว่างการพิสูจน์ความถูกต้องของ Hoare-style
ในการอภิปรายคำถามนี้ Gilles กล่าวอย่างถูกต้องว่าการพิสูจน์ความถูกต้องใด ๆ ของอัลกอริทึมที่ใช้อาร์เรย์ต้องพิสูจน์ว่าไม่มีการเข้าถึงอาร์เรย์นอกขอบเขต ขึ้นอยู่กับรุ่นรันไทม์สิ่งนี้จะทำให้เกิดข้อผิดพลาดรันไทม์หรือการเข้าถึงองค์ประกอบที่ไม่ใช่อาร์เรย์ เทคนิคหนึ่งที่พบบ่อยในการดำเนินการพิสูจน์ความถูกต้องเช่น (อย่างน้อยในการศึกษาปริญญาตรีและอาจจะอยู่ในการตรวจสอบโดยอัตโนมัติ) โดยใช้ตรรกะโฮร์ ฉันไม่ทราบว่าชุดกฎมาตรฐานมีอะไรที่เกี่ยวข้องกับอาร์เรย์ ดูเหมือนว่าพวกเขาจะถูก จำกัด ให้ตัวแปรตัวแปร ฉันจินตนาการถึงการเพิ่มสัจพจน์ของแบบฟอร์ม {0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}{0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}\qquad \displaystyle \frac{}{\{0 \leq i \lt A.\mathrm{length} \land {P[A[i]/E]} \}\ A[i] := E;\ \{P\}} แต่ก็ไม่เป็นที่ชัดเจนกับผมว่าคุณจะจัดการกับการเข้าถึงอาร์เรย์บนด้านขวามือคือถ้ามันเป็นส่วนหนึ่งของการแสดงออกที่ซับซ้อนในบางคำสั่งx : = EEEEx:=Ex:=Ex := E วิธีการเข้าถึงอาร์เรย์สามารถสร้างแบบจำลองในตรรกะของ Hoare เพื่อให้ไม่มีการเข้าถึงที่ไม่ถูกต้องสามารถและต้องได้รับการพิสูจน์ความถูกต้องของโปรแกรม? รู้รอบอาจสันนิษฐานได้ว่าเราไม่อนุญาตให้ใช้องค์ประกอบของอาร์เรย์ในงบนอกเหนือจากหรือเป็นส่วนหนึ่งของEบางตัวในx : = Eเนื่องจากไม่ได้ จำกัด การแสดงออก เราสามารถกำหนดตัวแปรชั่วคราวตามค่าที่ต้องการเช่น write t …

2
ชื่อของปัญหาการเรียงลำดับใหม่ / การเรียงลำดับ?
คุณจะได้รับอาร์เรย์ของความยาวnแต่ละองค์ประกอบของอาเรย์เป็นของหนึ่งในคลาสคุณควรจะจัดเรียงอาร์เรย์ใหม่โดยใช้จำนวนการสลับขั้นต่ำเพื่อให้องค์ประกอบทั้งหมดจากคลาสเดียวกันถูกจัดกลุ่มเข้าด้วยกันเสมอ ตัวอย่างเช่น: ยังมีข้อตกลงที่ใช้ได้อีกสามข้อที่เหลืออยู่nnnKKK[2,1,3,3,2,2]⟶[2,2,2,1,3,3], or[2,1,3,3,2,2]⟶[1,2,2,2,3,3], or[2,1,3,3,2,2]⟶[3,3,2,2,2,1].[2,1,3,3,2,2]⟶[2,2,2,1,3,3], or[2,1,3,3,2,2]⟶[1,2,2,2,3,3], or[2,1,3,3,2,2]⟶[3,3,2,2,2,1]. \begin{align*} &[2, 1, 3, 3, 2, 2] \longrightarrow [2, 2, 2, 1, 3, 3], \text{ or} \\ &[2, 1, 3, 3, 2, 2] \longrightarrow [1, 2, 2, 2, 3, 3], \text{ or} \\ &[2, 1, 3, 3, 2, 2] \longrightarrow [3, 3, 2, …

3
การค้นหาจำนวนองค์ประกอบที่เล็กลงสำหรับแต่ละองค์ประกอบในอาเรย์อย่างมีประสิทธิภาพ
ฉันติดอยู่กับปัญหานี้: รับอาร์เรย์ AAA ของแรก nnn ตัวเลขธรรมชาติที่มีการเรียงสับเปลี่ยนแบบสุ่มอาร์เรย์ BBB ถูกสร้างขึ้นเช่นนั้น B(k)B(k)B(k) คือจำนวนองค์ประกอบจาก A(1)A(1)A(1) ถึง A ( k - 1 )A(k−1)A(k-1) ซึ่งเล็กกว่า A(k)A(k)A(k). ฉัน) ได้รับ AAA คุณสามารถหา BBB ใน O(n)O(n)O(n)เวลา? ii) ให้ไว้BBB คุณสามารถหา AAA ใน O(n)O(n)O(n) เวลา? ที่นี่ B(1)=0B(1)=0B(1) = 0. สำหรับตัวอย่างที่เป็นรูปธรรม: ∣∣∣AB804030107321966454∣∣∣|A843172965B000031644|\begin{vmatrix} A & 8 & 4 & 3 & 1 & …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.