คำถามติดแท็ก ds.data-structures

คุณสมบัติและการใช้งานของโครงสร้างข้อมูลเช่นขอบเขตพื้นที่ต่ำหรือความซับซ้อนของเวลาในการแทรกและลบวัตถุ

2
สแต็กสามชุดสามารถนำไปใช้ในอาร์เรย์เดียวได้หรือไม่ด้วย O (1) เวลาพุช / ป๊อป
สแต็คสองชุดสามารถดำเนินการได้อย่างมีประสิทธิภาพโดยใช้อาร์เรย์ขนาดคงที่หนึ่งรายการ: สแต็ก # 1 เริ่มจากปลายด้านซ้ายและขยายไปทางขวาและสแต็ก # 2 เริ่มจากปลายด้านขวาและขยายไปทางซ้าย เหมือนกันเป็นไปได้สำหรับสามกอง? โดยเฉพาะอย่างยิ่งมันเป็นไปได้ที่จะใช้สามกองที่มีเงื่อนไขดังต่อไปนี้: คุณมีอาร์เรย์ขนาดคงที่ที่สามารถเก็บวัตถุ N ได้ ตราบใดที่ผลรวมของขนาดสแต็คทั้งสามคือ <N ดัน () ไม่ควรล้มเหลว การดำเนินการทั้ง push () และ pop () ควรใช้เวลา O (1) นอกจากอาร์เรย์แล้วคุณสามารถใช้พื้นที่เพิ่มเติม O (1) เท่านั้น นี่คือตัวอย่างของโซลูชันที่ไม่เป็นไปตามข้อกำหนดเหล่านี้: แบ่งอาร์เรย์ออกเป็น 3 ส่วนคงที่และใช้แต่ละส่วนสำหรับสแต็ก (ละเมิด 2) คล้ายกับด้านบน แต่มีขอบเขตที่สามารถเคลื่อนย้ายได้ระหว่างสแต็ก (ละเมิด 3) การใช้งานตามรายการที่เชื่อมโยงอย่างง่าย (ละเมิด 4) ฉันจะยอมรับอัลกอริทึมที่ไม่สำคัญหรือการพิสูจน์ความเป็นไปไม่ได้แม้ว่าพวกเขาจะไม่ตรงตามเงื่อนไขทั้งหมด (1) - (4) อย่างแน่นอนเช่นอัลกอริทึมที่พุช / …

2
เลือกตัวเลขสองจำนวนที่รวมเป็นโดยใช้เวลาแบบสอบถามย่อยเชิงเส้น
นี่คือปัญหาเพื่อนบ้านที่ใกล้ที่สุด รับ reals (ใหญ่มากn !), รวมทั้งเป้าหมายจริงp , หาa_iและa_jซึ่ง SUM ใกล้เคียงกับpมากที่สุด เราอนุญาตการประมวลผลล่วงหน้า / การจัดทำดัชนีที่เหมาะสมของa_1, \ ldots, a_n (ไม่เกินO (n \ log n) ) แต่ในเวลาแบบสอบถาม (ที่กำหนดp ) ผลลัพธ์ควรถูกส่งคืนอย่างรวดเร็ว (เช่นO (\ log n)เวลา)a1,…,ana1,…,ana_1, \ldots, a_nnnnpppaiaia_iajaja_jpppa1,…,ana1,…,ana_1, \ldots, a_nO(nlogn)O(nlog⁡n)O(n \log n)pppO(logn)O(log⁡n)O(\log n) (ตัวอย่างง่ายกว่า: ถ้าเราต้องการเพียงa_iเดียวaiaia_iที่ใกล้เคียงกับpppมากที่สุดเราจะจัดเรียงa1,…,ana1,…,ana_1, \ldots, a_nออฟไลน์, O(nlogn)O(nlog⁡n)O(n \log n)จากนั้นทำการค้นหาแบบไบนารีที่เวลาสอบถามO(logn)O(log⁡n)O(\log n) ) โซลูชันที่ไม่ทำงาน: 1) จัดเรียงa1,…,ana1,…,ana_1, \ldots, …

1
Heapsort: Heaps = ~ Quicksort: BSTs = ~ การควบรวมกิจการ: ___?
โปรดแก้ตัวความสำคัญของชื่อฉันอาจเสียสละความชัดเจนบนแท่นบูชาแห่งความกระชับ จะเห็นได้ว่าการแทรกองค์ประกอบของอาร์เรย์ลงในแผนภูมิการค้นหาแบบไบนารี่และการอ่านกลับต้องใช้การเปรียบเทียบเช่นเดียวกับการเรียกใช้ Quicksort ในอาร์เรย์นั้น ลำดับของ pivots ที่ Quicksort ใช้คือลำดับของการแทรกลงในแผนผังการค้นหาแบบไบนารี นี่เป็นเรื่องจริงเล็กน้อยสำหรับ Heapsort และ heaps เนื่องจาก Heapsort ทำสิ่งที่แทรกอยู่เป็นชุดและจากนั้นอ่านองค์ประกอบกลับออกมา ในกรณีของการพูดว่ามีการรวมกันแบบอะนาล็อกหรือไม่? มีการเชื่อมต่อที่ลึกกว่านี้หรือมันเป็นเรื่องบังเอิญที่น่าสนใจระหว่างโครงสร้างข้อมูลและอัลกอริธึมการเรียงลำดับ?

2
สตริงสากลเกือบคร่ำครึ
นี่คือฟังก์ชันแฮชสองตระกูลบนสตริง x⃗ = ⟨x0x1x2...xม.⟩x→=⟨x0x1x2...xม.⟩\vec{x} = \langle x_0 x_1 x_2 \dots x_m \rangle: สำหรับ พีพีp นายกและ xผม∈Zพีxผม∈Zพีx_i \in \mathbb{Z_p}, ชั่วโมง1a(x⃗ ) = ∑aผมxผมmod pชั่วโมงa1(x→)=Σaผมxผมพอควรพีh^1_{a}(\vec{x}) = \sum a^i x_i \bmod pสำหรับ\ Dietzfelbinger และคณะ แสดงให้เห็นว่าใน "ฟังก์ชั่นแฮพหุนามเชื่อถือ" ที่ pa ∈Zพีa∈Zพีa \in \mathbb{Z}_p∀ x ≠ y,Pa(ชั่วโมง1a( x ) =ชั่วโมง1a( y) ) ≤ m / p∀x≠Y,Pa(ชั่วโมงa1(x)=ชั่วโมงa1(Y))≤ม./พี\forall …

2
อัลกอริทึมการค้นหาชุดย่อย
สมมติว่าฉันมีรายการ XX\cal X จากชุดย่อยของ {1,...,n}{1,...,n}\{1, ..., n\}. ฉันสามารถทำการประมวลผลล่วงหน้าในรายการนี้หากจำเป็น หลังจากการประมวลผลล่วงหน้านี้ฉันจะได้รับชุดใหม่A⊆{1,...,n}A⊆{1,...,n}A \subseteq \{1, ..., n \}. ฉันต้องการระบุชุดใด ๆB∈XB∈XB \in \mathcal X กับ B⊆AB⊆AB \subseteq A. อัลกอริทึมที่เห็นได้ชัด (ไม่มีการประมวลผลล่วงหน้า) ต้องใช้เวลา O(n|X|)O(n|X|)O(n |\cal X|) - คุณเพียงแค่ทดสอบ AAA ต่อแต่ละ B∈XB∈XB \in \mathcal Xแยกต่างหาก มีอะไรดีไปกว่านี้อีกไหม? ถ้ามันช่วยคุณได้ AAAจำนวนการแข่งขันทั้งหมด B∈XB∈XB \in \mathcal X ถูกล้อมรอบด้วยบางสิ่งบางอย่างเช่น O(1)O(1)O(1).

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

2
มีโครงสร้างข้อมูลสำหรับการจัดการรายการด่วนและแบบสอบถามคำสั่งซื้อหรือไม่
เรามีชุด, , ของรายการขององค์ประกอบจากชุด\} องค์ประกอบจากแต่ละปรากฏในรายการเดียวในLฉันกำลังมองหาโครงสร้างข้อมูลที่สามารถทำการปรับปรุงต่อไปนี้:LLLN= { 1 , 2 , 3,...,n}N={1,2,3,...,n}N = \{ 1, 2, 3, ..., n \}NNNLLL concat(x,y)concat(x,y)concat(x, y) : เชื่อมต่อรายการที่มีเข้าท้ายรายการที่มีyyyxxx s p l ฉันt(x)split(x)split(x) : แยกรายการที่มีโดยตรงหลังxxxxxx นอกจากนี้ยังต้องดำเนินการค้นหาต่อไปนี้: fo l l ows(x,y)follows(x,y)follows(x, y) : ผลตอบแทนถ้าและอยู่ในรายการเดียวกันและมาหลังจาก (แต่ไม่จำเป็นต้องอยู่ติดกับ )t r uetruetruexxxYyyYyyxxxxxx fฉันR s T ( x )first(x)first(x) : ส่งคืนองค์ประกอบแรกของรายการที่มีxxx n e …

1
การตัดสินใจว่าสตริง wildcard ถูกจับคู่โดยสตริง wildcard อื่นในชุดหรือไม่
นี่คือปัญหาที่ทำให้ฉันดักฟังมาระยะหนึ่งแล้ว สมมุติว่าสตริงเป็นลำดับ 1 และ 0 และสตริงตัวแทนคือ 1 และ 0 สตริงและสตริงตัวแทนทั้งหมดมีความยาวเท่ากัน นี่คือสัญลักษณ์ตัวแทน UNIX มาตรฐาน 10 ?? 1 การแข่งขัน 10011, 10111, ฯลฯ -? ตรงกับ 1 หรือ 0 ในตำแหน่งนั้น ถ้าโวลต์โวลต์v และ WWw เป็นสตริงไวด์การ์ดจากนั้นเราเขียน v ≤ wโวลต์≤Wv \leq w ถ้าทุกสายจับคู่ด้วย โวลต์โวลต์v ถูกจับคู่โดย WWw. ปัญหา : ได้รับชุดSSS ของสายอักขระตัวแทนและแบบสอบถาม vโวลต์v (เช่นสตริงตัวแทน) ซึ่งมีอยู่ w∈SW∈Sw \in S ดังนั้น …

2
โครงสร้างข้อมูลที่ดีที่สุดสำหรับแผนผังต้นไม้คืออะไร
ฉันกำลังมองหาโครงสร้างข้อมูลซึ่งโดยพื้นฐานแล้วเป็นแผนผังของแผนที่ที่แผนที่ในแต่ละโหนดมีองค์ประกอบใหม่ ๆ รวมถึงองค์ประกอบในแผนที่ของโหนดแม่ โดยแผนที่ที่นี่ฉันหมายถึงแผนที่การเขียนโปรแกรมที่มีคีย์และค่าเช่น map ใน STL หรือ dict ใน python ตัวอย่างเช่นอาจมีโหนดรูท: root = {'car':1, 'boat':2} และเด็ก 2 คนแต่ละคนเพิ่มองค์ประกอบไปยังแผนที่หลัก child1 = {'car':1, 'boat':2, 'jet':35} child2 = {'car':1, 'boat':2, 'scooter':-5} ฉันต้องการให้พื้นที่มีประสิทธิภาพเท่าที่จะเป็นไปได้เช่นฉันไม่ต้องการเก็บสำเนาของแผนที่ที่เกิดขึ้นในแต่ละโหนด แต่การค้นหาจะยังคงเป็น O (log N), N เป็นจำนวนทั้งหมดของ องค์ประกอบที่โหนดไม่ใช่ต้นไม้ทั้งหมด ฉันคิดว่าอาจจะมีฟังก์ชั่นแฮชอัจฉริยะที่ฉันอาจใช้กับสิ่งนี้ แต่ไม่สามารถคิดอะไรได้เลย วิธีการไร้เดียงสาจะเก็บรายการที่เพิ่มเข้ามาใหม่ในแผนที่ที่แต่ละโหนดแล้วเลื่อนขึ้นต้นไม้หากไม่พบสิ่งใด ฉันไม่ชอบสิ่งนี้เพราะมันขึ้นอยู่กับความลึกของต้นไม้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.