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

โครงสร้างข้อมูลเป็นวิธีการจัดระเบียบข้อมูลในแบบที่ช่วยให้คุณสมบัติเฉพาะของข้อมูลนั้นถูกสอบถามและ / หรือปรับปรุงอย่างมีประสิทธิภาพ


18
ข้อดีของการค้นหาแบบไบนารีบนตารางแฮช
ข้อดีของต้นไม้ค้นหาแบบไบนารีบนตารางแฮชคืออะไร? ตารางแฮชสามารถค้นหาองค์ประกอบใดก็ได้ใน Theta (1) ครั้งและการเพิ่มองค์ประกอบนั้นง่ายพอ ๆ กัน .... แต่ฉันไม่แน่ใจว่าจะได้เปรียบในทางอื่น

26
ตรวจสอบว่าสองรายการที่เชื่อมโยงรวมกันหรือไม่ ถ้ามีที่ไหน
คำถามนี้อาจจะเก่า แต่ฉันคิดคำตอบไม่ออก บอกว่ามีสองรายการของความยาวที่แตกต่างกัน, การควบรวมที่จุด ; เราจะรู้ได้อย่างไรว่าจุดรวมอยู่ที่ไหน? เงื่อนไข: เราไม่รู้ความยาว เราควรแยกวิเคราะห์แต่ละรายการเพียงครั้งเดียว

6
การใช้โครงสร้างข้อมูลที่แตกต่างกันในทางปฏิบัติ [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการเมื่อปีที่แล้ว ปรับปรุงคำถามนี้ มีการพูดคุยเกี่ยวกับโครงสร้างข้อมูลมากมาย แต่ฉันไม่พบรายการโครงสร้างข้อมูลง่ายๆและการใช้งานจริงที่นั่น ฉันพยายามศึกษาเพื่อสัมภาษณ์และคิดว่าสิ่งนี้จะช่วยฉันได้พร้อมกับคนอื่น ๆ อีกมากมาย ฉันกำลังมองหาสิ่งนี้: โครงสร้างข้อมูล - ตัวอย่าง / ใช้สำหรับ ตารางแฮช - การค้นหาข้อมูลอย่างรวดเร็ว ... จากนั้นยกตัวอย่าง อาร์เรย์ - ... ต้นไม้ไบนารี - ... หากมีแหล่งข้อมูลเช่นนี้โปรดแจ้งให้เราทราบ ขอบคุณ! แก้ไข: ฉันหมายความว่า wikipedia นั้นดีและทั้งหมด แต่ในหน้าเว็บส่วนใหญ่พวกเขาไม่ได้แสดงรายการการใช้งานจริง ฉันกำลังมองหาอะไรที่มากกว่านั้น

30
การย้อนกลับรายการที่เชื่อมโยงใน Java แบบวนซ้ำ
ฉันทำงานกับโปรเจ็กต์ Java สำหรับชั้นเรียนมาระยะหนึ่งแล้ว เป็นการนำรายการที่เชื่อมโยงไปใช้งาน (ที่นี่เรียกว่าAddressListมีโหนดอย่างง่ายที่เรียกว่าListNode) สิ่งที่จับได้คือทุกอย่างจะต้องทำด้วยอัลกอริธึมแบบวนซ้ำ ฉันสามารถทำทุกอย่างได้ดีโดยใช้วิธีเดียว:public AddressList reverse() ListNode: public class ListNode{ public String data; public ListNode next; } ตอนนี้reverseฟังก์ชันของฉันเรียกใช้ฟังก์ชันตัวช่วยที่ใช้อาร์กิวเมนต์เพื่ออนุญาตให้เรียกซ้ำ public AddressList reverse(){ return new AddressList(this.reverse(this.head)); } ด้วยฟังก์ชันตัวช่วยของฉันมีลายเซ็นของ private ListNode reverse(ListNode current) . ในขณะนี้ฉันทำงานซ้ำ ๆ โดยใช้สแต็ก แต่นี่ไม่ใช่สิ่งที่ข้อกำหนดต้องการ ฉันพบอัลกอริทึมใน C ที่ย้อนกลับซ้ำและแปลงเป็นโค้ด Java ด้วยมือและมันใช้งานได้ แต่ฉันไม่เข้าใจมัน แก้ไข: ไม่เป็นไรฉันคิดออกในระหว่างนี้ private AddressList reverse(ListNode current, …

5
เมื่อใดควรใช้กลยุทธ์ Preorder, Postorder และ Inorder Binary Search Tree Traversal
เมื่อเร็ว ๆ นี้ฉันตระหนักว่าในขณะที่ใช้ BST มากมายในชีวิตฉันไม่เคยคิดแม้แต่จะใช้อะไรเลยนอกจาก Inorder traversal (ในขณะที่ฉันตระหนักและรู้ว่าการปรับโปรแกรมให้ใช้การส่งผ่านคำสั่งก่อน / หลังการสั่งซื้อนั้นง่ายเพียงใด) เมื่อตระหนักถึงสิ่งนี้ฉันจึงดึงตำราโครงสร้างข้อมูลเก่าของฉันออกมาและมองหาเหตุผลที่อยู่เบื้องหลังประโยชน์ของการสั่งซื้อล่วงหน้าและการสั่งซื้อภายหลังการสั่งซื้อ - พวกเขาไม่ได้พูดอะไรมากนัก มีตัวอย่างอะไรบ้างในการใช้ preorder / postorder ในทางปฏิบัติ? เมื่อใดที่เหมาะสมกว่าตามลำดับ


14
โครงสร้างข้อมูล: แทรกลบประกอบด้วยรับองค์ประกอบแบบสุ่มทั้งหมดที่ O (1)
ฉันได้รับปัญหานี้ในการสัมภาษณ์ คุณจะตอบว่าอย่างไร? ออกแบบโครงสร้างข้อมูลที่มีการดำเนินการต่อไปนี้ใน O (1) เวลา: แทรก ลบ ประกอบด้วย รับองค์ประกอบแบบสุ่ม

3
เหตุใดอัลกอริทึมของ Dijkstra จึงใช้ปุ่มลดขนาด
อัลกอริทึมของ Dijkstra ได้รับการสอนให้ฉันมีดังนี้ while pqueue is not empty: distance, node = pqueue.delete_min() if node has been visited: continue else: mark node as visited if node == target: break for each neighbor of node: pqueue.insert(distance + distance_to_neighbor, neighbor) แต่ฉันได้อ่านเกี่ยวกับอัลกอริทึมและมีหลายเวอร์ชันที่ฉันเห็นว่าใช้ปุ่มลดขนาดแทนที่จะเป็นส่วนแทรก เหตุใดจึงเป็นเช่นนี้และทั้งสองแนวทางแตกต่างกันอย่างไร


13
วิธีที่มีประสิทธิภาพที่สุดในการจัดเก็บหมายเลขโทรศัพท์หลายพันหมายเลข
นี่คือคำถามสัมภาษณ์ของ Google: มีหมายเลขโทรศัพท์ประมาณพันหมายเลขที่จะจัดเก็บแต่ละหมายเลขมี 10 หลัก คุณสามารถสมมติว่า 5 หลักแรกของแต่ละหลักเหมือนกันในพันตัวเลข คุณต้องดำเนินการดังต่อไปนี้: a. ค้นหาว่ามีหมายเลขที่ระบุหรือไม่ ข. พิมพ์หมายเลขทั้งหมด วิธีการประหยัดพื้นที่ที่มีประสิทธิภาพที่สุดในการทำเช่นนี้คืออะไร? ฉันตอบตารางแฮชและหลังจากนั้นก็เขียนโค้ด huffman แต่ผู้สัมภาษณ์ของฉันบอกว่าฉันไปไม่ถูกทาง โปรดช่วยฉันที่นี่ การใช้คำต่อท้ายจะช่วยได้หรือไม่? ตามหลักการแล้วการจัดเก็บหมายเลข 1,000 หมายเลขจะใช้เวลา 4 ไบต์ต่อหมายเลขดังนั้นโดยรวมแล้วจะใช้เวลา 4000 ไบต์ในการจัดเก็บหมายเลข 1,000 หมายเลข ในเชิงปริมาณฉันต้องการลดพื้นที่จัดเก็บลงเหลือ <4000 ไบต์นี่คือสิ่งที่ผู้สัมภาษณ์อธิบายให้ฉันฟัง



6
เหตุใดฉันจึงสามารถกำหนดโครงสร้างและคลาสภายในฟังก์ชันใน C ++ ได้
ฉันเพิ่งทำสิ่งนี้ผิดพลาดใน C ++ และมันก็ใช้ได้ ทำไมฉันถึงทำได้ int main(int argc, char** argv) { struct MyStruct { int somevalue; }; MyStruct s; s.somevalue = 5; } หลังจากทำสิ่งนี้แล้วฉันก็จำได้ว่าอ่านเคล็ดลับนี้ที่ไหนสักแห่งเมื่อนานมาแล้วว่าเป็นเครื่องมือการเขียนโปรแกรมที่ใช้งานได้ยากสำหรับ C ++ แต่ฉันจำไม่ได้ว่าทำไมมันถึงถูกต้องหรือฉันอ่านที่ไหน ยินดีต้อนรับคำตอบสำหรับคำถามใด ๆ ! หมายเหตุ: แม้ว่าเมื่อเขียนคำถามฉันไม่ได้รับการอ้างอิงใด ๆ เกี่ยวกับคำถามนี้แต่แถบด้านข้างปัจจุบันก็ชี้ให้เห็นดังนั้นฉันจะใส่ไว้ที่นี่เพื่ออ้างอิงไม่ว่าคำถามจะแตกต่างกัน แต่อาจมีประโยชน์

8
เหตุใดจึงไม่มีคลาส Tree <T> ใน. NET
ไลบรารีคลาสฐานใน. NET มีโครงสร้างข้อมูลที่ยอดเยี่ยมสำหรับคอลเลกชัน (รายการคิวสแต็คพจนานุกรม) แต่ก็แปลกพอที่จะไม่มีโครงสร้างข้อมูลใด ๆ สำหรับต้นไม้ไบนารี นี่เป็นโครงสร้างที่มีประโยชน์อย่างยิ่งสำหรับอัลกอริทึมบางอย่างเช่นโครงสร้างที่ใช้ประโยชน์จากเส้นทางการข้ามผ่านที่แตกต่างกัน ฉันกำลังมองหาการใช้งานฟรีที่เขียนถูกต้อง ฉันตาบอด แต่หาไม่พบ ... มันถูกฝังอยู่ที่ไหนสักแห่งใน BCL หรือไม่? ถ้าไม่มีใครสามารถแนะนำไลบรารี C # /. NET ฟรีหรือโอเพ่นซอร์สสำหรับต้นไม้ไบนารีได้หรือไม่? โดยเฉพาะอย่างยิ่งที่ใช้ยาชื่อสามัญ แก้ไข:เพื่อชี้แจงสิ่งที่ฉันกำลังมองหา ฉันไม่สนใจคอลเลกชันพจนานุกรมที่สั่งซื้อซึ่งใช้ต้นไม้ภายใน จริงๆแล้วฉันสนใจต้นไม้ไบนารีซึ่งเป็นโครงสร้างที่เปิดเผยโครงสร้างเพื่อให้คุณสามารถทำสิ่งต่างๆเช่นแยกต้นไม้ย่อยหรือทำการข้ามผ่านหลังการแก้ไขบนโหนด ตามหลักการแล้วชั้นเรียนดังกล่าวสามารถขยายได้เพื่อให้มีพฤติกรรมของต้นไม้เฉพาะทาง (เช่นแดง / ดำ AVL สมดุล ฯลฯ )

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