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

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

18
Java: วิธีการแปลง List เป็น Map
เมื่อเร็ว ๆ นี้ฉันได้พูดคุยกับเพื่อนร่วมงานเกี่ยวกับสิ่งที่จะเป็นวิธีที่ดีที่สุดในการแปลงListเป็นMapJava และหากมีประโยชน์เฉพาะในการทำเช่นนั้น ฉันต้องการทราบวิธีการแปลงที่เหมาะสมที่สุดและจะขอบคุณถ้ามีใครสามารถแนะนำฉันได้ นี่เป็นวิธีการที่ดีหรือไม่: List<Object[]> results; Map<Integer, String> resultsMap = new HashMap<Integer, String>(); for (Object[] o : results) { resultsMap.put((Integer) o[0], (String) o[1]); }

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

14
คิวลำดับความสำคัญใน. สุทธิ [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันกำลังมองหา. NET การใช้งานคิวลำดับความสำคัญหรือโครงสร้างข้อมูลกอง คิวลำดับความสำคัญคือโครงสร้างข้อมูลที่ให้ความยืดหยุ่นมากกว่าการเรียงลำดับแบบง่าย ๆ เนื่องจากอนุญาตให้องค์ประกอบใหม่เข้าสู่ระบบตามช่วงเวลาที่กำหนด มันคุ้มค่ากว่าการแทรกงานใหม่ลงในคิวลำดับความสำคัญมากกว่าจัดเรียงทุกอย่างในการมาถึงแต่ละครั้ง คิวลำดับความสำคัญพื้นฐานรองรับการดำเนินงานหลักสามประการ: แทรก (Q, x) ระบุไอเท็ม x ด้วยคีย์ k ให้แทรกลงในคิวลำดับความสำคัญ Q ค้นหาขั้นต่ำ (Q) ส่งกลับตัวชี้ไปยังรายการที่มีค่าคีย์น้อยกว่าคีย์อื่นในคิวลำดับความสำคัญ Q ลบ-ขั้นต่ำ (Q) ลบรายการออกจากคิวลำดับความสำคัญ Q ซึ่งมีคีย์น้อยที่สุด นอกจากว่าฉันกำลังมองหาสถานที่ที่ไม่ถูกต้องไม่มีใครอยู่ในกรอบ มีใครตระหนักถึงสิ่งที่ดีหรือฉันควรจะม้วนตัวเอง?

13
โครงสร้างข้อมูล NET: ArrayList, List, HashTable, Dictionary, SortedList, SortedDictionary - ความเร็ว, หน่วยความจำและเมื่อใช้แต่ละอัน?
.NET มีโครงสร้างข้อมูลที่ซับซ้อนจำนวนมาก น่าเสียดายที่บางคนก็คล้ายกันและฉันก็ไม่แน่ใจเสมอว่าจะใช้เมื่อไรและเมื่อใช้อีกอัน หนังสือ C # และ Visual Basic ส่วนใหญ่พูดถึงพวกเขาในระดับหนึ่ง แต่พวกเขาไม่เคยไปลงลึกถึงรายละเอียดที่แท้จริง ความแตกต่างระหว่าง Array, ArrayList, List, Hashtable, Dictionary, SortedList และ SortedDictionary คืออะไร อันไหนที่นับได้ (IList - สามารถทำลูป 'foreach' ได้)? อันไหนที่ใช้คู่คีย์ / ค่า (IDict) แล้วรอยเท้าหน่วยความจำล่ะ? ความเร็วในการแทรก? ความเร็วในการดึงข้อมูล? มีโครงสร้างข้อมูลอื่น ๆ ที่น่ากล่าวถึงไหม? ฉันยังคงค้นหารายละเอียดเพิ่มเติมเกี่ยวกับการใช้หน่วยความจำและความเร็ว (สัญลักษณ์ Big-O)


20
วิธีที่ดีที่สุดในการใช้พจนานุกรมที่ซ้อนกันคืออะไร
ฉันมีโครงสร้างข้อมูลที่มีความสำคัญต่อพจนานุกรมซ้อนกัน สมมติว่ามันมีลักษณะเช่นนี้: {'new jersey': {'mercer county': {'plumbers': 3, 'programmers': 81}, 'middlesex county': {'programmers': 81, 'salesmen': 62}}, 'new york': {'queens county': {'plumbers': 9, 'salesmen': 36}}} ตอนนี้การบำรุงรักษาและการสร้างสิ่งนี้ค่อนข้างเจ็บปวด ทุกครั้งที่ฉันมีรัฐ / เคาน์ตี / อาชีพใหม่ฉันต้องสร้างพจนานุกรมเลเยอร์ที่ต่ำกว่าผ่านบล็อกลอง / จับที่น่ารังเกียจ ยิ่งกว่านั้นฉันต้องสร้างตัววนซ้ำที่น่ารำคาญถ้าฉันต้องการข้ามค่าทั้งหมด ฉันยังสามารถใช้สิ่งอันดับเป็นกุญแจได้เช่น: {('new jersey', 'mercer county', 'plumbers'): 3, ('new jersey', 'mercer county', 'programmers'): 81, ('new jersey', 'middlesex county', …

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

11
แผนที่และพจนานุกรมแตกต่างกันอย่างไร?
ฉันรู้ว่าแผนที่เป็นโครงสร้างข้อมูลที่จับคู่คีย์กับค่า พจนานุกรมไม่เหมือนกันหรือ แผนที่และพจนานุกรม1 ต่างกันอย่างไร 1. ฉันไม่ได้ถามว่าพวกเขากำหนดไว้ในภาษา X หรือ Y (ซึ่งดูเหมือนจะเป็นสิ่งที่คนทั่วไปถามที่นี่ดังนั้น) ฉันต้องการที่จะรู้ว่าความแตกต่างของพวกเขาในทางทฤษฎีคืออะไร

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

6
เหตุใด std :: map ถูกนำไปใช้เป็นต้นไม้สีแดงดำ
ทำไมถูกstd::mapนำไปใช้เป็นต้นไม้สีแดงดำ ? มีโครงสร้างการค้นหาแบบทวิภาคที่สมดุลหลายต้น (BST) อะไรคือข้อดีของการออกแบบต้นไม้สีแดง - ดำ

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

6
มีการจัดรูปแบบอาร์เรย์หลายมิติในหน่วยความจำอย่างไร
ใน C ฉันรู้ว่าฉันสามารถจัดสรรอาเรย์สองมิติแบบไดนามิกบนฮีปโดยใช้โค้ดต่อไปนี้: int** someNumbers = malloc(arrayRows*sizeof(int*)); for (i = 0; i < arrayRows; i++) { someNumbers[i] = malloc(arrayColumns*sizeof(int)); } เห็นได้ชัดว่าสิ่งนี้สร้างอาร์เรย์พอยน์เตอร์หนึ่งมิติไปยังอาร์เรย์จำนวนเต็มหนึ่งมิติที่แยกจากกันและ "ระบบ" สามารถหาสิ่งที่ฉันหมายถึงเมื่อฉันขอ: someNumbers[4][2]; แต่เมื่อฉันประกาศอาร์เรย์ 2 มิติแบบคงที่ดังในบรรทัดต่อไปนี้ ... : int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS]; ... โครงสร้างที่คล้ายกันนี้ถูกสร้างขึ้นบนสแต็กหรือเป็นรูปแบบอื่นอย่างสมบูรณ์หรือไม่ (เช่นเป็นตัวชี้อาร์เรย์ 1D หรือไม่ถ้าไม่ใช่มันคืออะไรและการอ้างอิงถึงมันคิดออกได้อย่างไร) นอกจากนี้เมื่อฉันพูดว่า "ระบบ" อะไรคือสิ่งที่ต้องรับผิดชอบในการหาสิ่งนั้น เคอร์เนล หรือคอมไพเลอร์ C เรียงลำดับขณะคอมไพล์หรือไม่?

1
เลนส์, fclabels, data-accessor - ไลบรารี่ใดสำหรับการเข้าถึงโครงสร้างและการกลายพันธุ์จะดีกว่า
มีไลบรารียอดนิยมอย่างน้อยสามแห่งสำหรับการเข้าถึงและจัดการฟิลด์ของระเบียน สิ่งที่ฉันรู้คือ: data-accessor, fclabels และเลนส์ โดยส่วนตัวแล้วฉันเริ่มด้วย data-accessor และตอนนี้ฉันก็ใช้มันอยู่ อย่างไรก็ตามเมื่อเร็ว ๆ นี้ใน haskell-cafe มีความเห็นของ fclabels เป็นที่เหนือกว่า ดังนั้นฉันสนใจที่จะเปรียบเทียบห้องสมุดทั้งสาม (และอาจมากกว่า)

3
อัลกอริทึม HyperLogLog ทำงานอย่างไร
ฉันได้เรียนรู้เกี่ยวกับอัลกอริทึมที่แตกต่างกันในเวลาว่างของฉันเมื่อเร็ว ๆ นี้และสิ่งที่ฉันได้พบซึ่งน่าสนใจมากเรียกว่าอัลกอริทึม HyperLogLog - ซึ่งประมาณจำนวนรายการที่ไม่ซ้ำกันในรายการ นี่เป็นเรื่องที่น่าสนใจเป็นพิเศษสำหรับฉันเพราะมันทำให้ฉันย้อนกลับไปยังยุค MySQL ของฉันเมื่อฉันเห็นว่า "ความสำคัญ" (ซึ่งฉันคิดเสมอจนกระทั่งเมื่อไม่นานมานี้ว่ามันไม่ได้ถูกคำนวณ) ดังนั้นฉันจึงรู้วิธีเขียนอัลกอริธึมในO ( n ) ที่จะคำนวณจำนวนเฉพาะของไอเท็มในอาเรย์ ฉันเขียนสิ่งนี้ใน JavaScript: function countUniqueAlgo1(arr) { var Table = {}; var numUnique = 0; var numDataPoints = arr.length; for (var j = 0; j < numDataPoints; j++) { var val = arr[j]; if (Table[val] != …

21
คุณจะใช้แคช LRU ใน Java ได้อย่างไร?
กรุณาอย่าพูด EHCache หรือ OSCache ฯลฯ สมมติว่ามีวัตถุประสงค์ของคำถามนี้ที่ฉันต้องการใช้งานของตัวเองโดยใช้เพียง SDK (การเรียนรู้ด้วยการทำ) ระบุว่าแคชจะใช้ในสภาพแวดล้อมแบบมัลติเธรดคุณจะใช้โครงสร้างข้อมูลแบบใด ฉันได้ติดตั้งแล้วโดยใช้LinkedHashMapและCollections # synchronMapแต่ฉันอยากรู้ว่าคอลเลกชันใหม่ที่เกิดขึ้นพร้อมกันนั้นจะเป็นตัวเลือกที่ดีกว่าหรือไม่ ปรับปรุง: ฉันเพิ่งอ่านล่าสุดของ Yeggeเมื่อฉันพบว่านักเก็ตนี้: หากคุณต้องการการเข้าถึงอย่างต่อเนื่องและต้องการรักษาลำดับการแทรกคุณไม่สามารถทำได้ดีกว่า LinkedHashMap ซึ่งเป็นโครงสร้างข้อมูลที่ยอดเยี่ยมอย่างแท้จริง วิธีเดียวที่มันจะยอดเยี่ยมกว่านี้ก็คือถ้ามีเวอร์ชั่นที่เกิดขึ้นพร้อมกัน แต่อนิจจา ฉันคิดว่าสิ่งเดียวกันเกือบเหมือนกันก่อนที่ฉันจะไปLinkedHashMap+ Collections#synchronizedMapใช้งานฉันกล่าวถึงข้างต้น ดีใจที่ได้ทราบฉันไม่ได้มองข้ามบางสิ่ง จากคำตอบจนถึงตอนนี้ดูเหมือนว่าทางออกที่ดีที่สุดของฉันสำหรับ LRU ที่เกิดขึ้นพร้อมกันอย่างมากคือการขยายConcurrentHashMapโดยใช้ตรรกะเดียวกับที่LinkedHashMapใช้

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