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

คำถามเกี่ยวกับการจัดเก็บอย่างมีประสิทธิภาพและการแสดงข้อมูลภายในแอปพลิเคชันซอฟต์แวร์

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

3
ต้นไม้ AVL และโลกแห่งความจริง
ในโรงเรียนเราได้รับการสอนวิธีที่เราสามารถปรับสมดุลต้นไม้ AVL จากการแทรกหรือการลบ ความรู้ประเภทนี้จะมีประโยชน์จริง ๆ ในโลกแห่งความเป็นจริงได้อย่างไร? ใครสามารถยกตัวอย่างว่าเมื่อความรู้ประเภทนี้จะมีประโยชน์จริงหรือไม่ จากสิ่งที่ฉันเห็นในที่ทำงานรายละเอียดดังกล่าวแทบจะไม่เคยเกิดขึ้น ... ฉันสามารถดูได้ว่ารายละเอียดความรู้เกี่ยวกับอัลกอริทึมและโครงสร้างข้อมูลบางอย่างมีความสำคัญ แต่ไม่ได้รายละเอียดเช่นการหมุนของต้นไม้ AVL (และแนวคิดรายละเอียดที่คล้ายกัน) ขอบคุณ!

7
ไกลแค่ไหนที่จะไปกับการพิมพ์ประเภทดั้งเดิมเช่น int
ฉันได้เห็นรหัส C ++ เช่นดังต่อไปนี้กับหลายtypedefๆ อะไรคือประโยชน์ของการใช้หลาย ๆtypedefอย่างเช่นนี้เมื่อเทียบกับการใช้ภาษาซีพลัสพลัส มีวิธีอื่นที่อาจบรรลุผลประโยชน์เหล่านั้นด้วยหรือไม่ ในที่สุดข้อมูลทั้งหมดจะถูกเก็บไว้ในหน่วยความจำหรือส่งผ่านสายเป็นบิตและไบต์จริงหรือไม่ types.h: typedef int16_t Version; typedef int32_t PacketLength; typedef int32_t Identity; typedef int32_t CabinetNumber; typedef int64_t Time64; typedef int64_t RFID; typedef int64_t NetworkAddress; typedef int64_t PathfinderAddress; typedef int16_t PathfinderPan; typedef int16_t PathfinderChannel; typedef int64_t HandsetSerialNumber; typedef int16_t PinNumber; typedef int16_t LoggingInterval; typedef int16_t …

8
วิธีปฏิบัติในการจัดเก็บข้อมูล "มีขนาดใหญ่พอสมควร" ของข้อมูลที่เปลี่ยนแปลงแทบจะไม่เคย?
คิดในแง่ของตารางการค้นหาที่คำนวณล่วงหน้าหรือบางอย่าง การใช้ฐานข้อมูลแทนค่า hardcoding ในแอปพลิเคชันของฉันมีความเหมาะสมที่จุดใด ค่าจะไม่เปลี่ยนแปลงและแยกออกจากนักพัฒนาการบำรุงรักษาอย่างดี 100 ค่า 1k, 10k, 100k? ฉันต้องการเก็บค่าประมาณ 40k ตอนนี้เป็นswitchคำสั่งที่สร้างโดยเครื่องจักร(ซึ่ง VS2010 ไม่พึงพอใจ) แก้ไข: หากใครอยากรู้อยากเห็นนี่คือวิธีที่ฉันเข้าหานี้: ข้อมูลของฉันถูกเก็บไว้ในอาร์เรย์โฟลต 100k สององค์ประกอบนั่นคือสิ่งที่ฉันทำ ใช้เวลาประมาณ 20 วินาทีในการสร้างข้อมูลดังนั้นฉันจึงทำครั้งเดียวแล้วจัดลำดับข้อมูลนั้นเป็นทรัพยากรที่ฝังตัวด้วย BinaryFormatter การนำข้อมูลออกจากกล่องจะใช้เวลาประมาณ 5 มิลลิวินาทีเมื่อเริ่มต้นแอปพลิเคชันและมีประสิทธิภาพสูงกว่าการใช้ฐานข้อมูลที่ฉันกำลังแทนที่

4
C โครงสร้างสามารถทำงานเหมือนมันมีฟังก์ชั่นหรือไม่?
ฉันใช้ C และstructs ที่ struct สามารถมีสมาชิก แต่ไม่ใช่ฟังก์ชั่น สมมติว่าสำหรับความเรียบง่ายที่ฉันต้องการที่จะสร้าง struct สำหรับสตริงที่ฉันชื่อstrและฉันต้องการที่จะสามารถที่จะทำstr.replace(int i, char c)ที่iเป็นดัชนีของสตริงและเป็นตัวละครที่จะแทนที่ตัวอักษรที่ตำแหน่งc iสิ่งนี้จะไม่เป็นไปได้หรือไม่เนื่องจาก structs ไม่มีฟังก์ชั่นหรือยังมีวิธีที่เราสามารถใช้พฤติกรรมนี้และเลียนแบบได้ว่าโครงสร้างอาจมีฟังก์ชั่น (ง่าย) ที่จริง ๆ แล้วคือ struct คัดลอกตัวเองไปที่ struct ใหม่ เขตข้อมูลซึ่งจะทำอย่างไร ดังนั้นreplaceอาจเป็นสมาชิกที่สามของโครงสร้างที่ชี้ไปที่โครงสร้างใหม่ที่มีการปรับปรุงเมื่อมีการเข้าถึงหรือคล้ายกัน ทำได้หรือไม่ หรือมีบางอย่างในตัวหรือทฤษฎีหรือกระบวนทัศน์ที่ป้องกันความตั้งใจของฉัน พื้นหลังคือฉันกำลังเขียนรหัส C และฉันพบว่าตัวเองมีฟังก์ชั่นการฟื้นฟูที่ฉันรู้ว่าเป็นตัวสร้างไลบรารีในภาษา OOP และ OOP จะเป็นวิธีที่ดีในการจัดการสตริงและคำสั่ง

4
มีวิธีมาตรฐานหรือทางเลือกมาตรฐานในการบรรจุ struct ใน c หรือไม่?
เมื่อการเขียนโปรแกรมใน CI พบว่ามันมีค่ามากที่จะแพ็ค structs โดยใช้__attribute__((__packed__))แอตทริบิวต์GCCs ดังนั้นฉันสามารถแปลงกลุ่มของหน่วยความจำที่มีโครงสร้างเป็นอาร์เรย์ไบต์ที่จะส่งผ่านบัสได้อย่างง่ายดายบันทึกไปยังหน่วยเก็บหรือนำไปใช้กับบล็อกของรีจิสเตอร์ โครงสร้างแบบแพ็ครับประกันว่าเมื่อได้รับการปฏิบัติเป็นอาร์เรย์ไบต์จะไม่มีการบรรจุใด ๆ ซึ่งทั้งสองสิ้นเปลืองความเสี่ยงด้านความปลอดภัยที่เป็นไปได้และอาจเข้ากันไม่ได้เมื่อเชื่อมต่อกับฮาร์ดแวร์ ไม่มีมาตรฐานสำหรับโครงสร้างการจัดวางที่ทำงานได้ในคอมไพเลอร์ C ทั้งหมดหรือไม่? ถ้าไม่เช่นนั้นฉันคิดว่านี่เป็นคุณสมบัติที่สำคัญอย่างยิ่งสำหรับการเขียนโปรแกรมระบบ? ผู้ใช้ภาษา C ต้นไม่พบความต้องการโครงสร้างการจัดเก็บหรือมีทางเลือกบางอย่างหรือไม่?

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

5
มีจุดประสงค์เฉพาะสำหรับรายการต่างกันหรือไม่?
มาจากพื้นหลัง C # และ Java ฉันคุ้นเคยกับรายการของฉันที่เป็นเนื้อเดียวกันและนั่นสมเหตุสมผลสำหรับฉัน เมื่อฉันเริ่มยก Lisp ฉันสังเกตเห็นว่ารายการต่างกัน เมื่อฉันเริ่มที่จะวนรอบด้วยdynamicคำสำคัญใน C # ฉันสังเกตว่าใน C # 4.0 อาจมีรายการที่ต่างกันเช่นกัน: List<dynamic> heterogeneousList คำถามของฉันคือประเด็นอะไร ดูเหมือนว่ารายการต่างกันจะมีค่าใช้จ่ายมากขึ้นเมื่อทำการประมวลผลและถ้าคุณต้องการจัดเก็บประเภทที่แตกต่างกันในที่เดียวคุณอาจต้องใช้โครงสร้างข้อมูลที่แตกต่างกัน ความไร้เดียงสาของฉันคือการเลี้ยงใบหน้าที่น่าเกลียดหรือมีช่วงเวลาที่เป็นประโยชน์เมื่อมีรายการที่ต่างกันหรือไม่?

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

8
ความแตกต่างระหว่างสตรีมและคิวคืออะไร
ความแตกต่างระหว่างสตรีมและคิวคืออะไร พวกเขาทั้งสองมีแนวคิดของชุดองค์ประกอบที่เรียงลำดับ แต่มีแนวโน้มที่จะมีการใช้งานที่แตกต่างกันและคำศัพท์ที่แตกต่างกันของ 'แทรก' / 'แยก' (กระแส) กับ 'enqueue' / 'dequeue' (คิว) สามารถเปลี่ยนได้เหล่านี้หรือไม่ พวกเขาแนะนำแนวคิดหรือรูปแบบที่แตกต่างกันหรือไม่? ถ้าเป็นเช่นนั้นอะไรคือความแตกต่าง?

2
ใช้โปรแกรมจัดการกระแสข้อมูล (endl) หรืออักขระขึ้นบรรทัดใหม่ (\ n) หรือไม่
ฉันไม่มีบริบทที่เฉพาะเจาะจงที่ฉันถามคำถาม แต่ในขณะที่ฉันกำลังอ่านหนังสือเริ่มต้นบน C ++ ฉันสังเกตเห็นการใช้ทั้งตัวจัดการกระแสข้อมูล endl และตัวอักขระขึ้นบรรทัดใหม่เมื่อจัดการกับวัตถุกระแส exmaple เป็นดังนี้: cout << "Hello World" << endl; cout << "Hello World\n"; คำถามของฉันคือ: มันเหมาะสมกว่าหรือไม่ที่จะใช้ stream manipulator (endl) ในบางสถานการณ์และตัวหนีในอีกอันหนึ่ง? มีข้อเสียประสิทธิภาพในการใช้หนึ่งในสองหรือไม่? พวกเขาใช้แทนกันได้อย่างสมบูรณ์หรือไม่ ฉันอ่านว่า escape sequence ถูกเก็บไว้ในหน่วยความจำเป็นตัวอักษรเดียว หมายความว่าเหมาะสมกว่าที่จะใช้ endl ถ้าคุณใช้หน่วยความจำน้อยหรือไม่ stream manipulator endl ใช้หน่วยความจำในทางใดทางหนึ่งหรือไม่ถ้าเป็นเช่นนั้นมากกว่าลำดับ escape หรือไม่? ขอบคุณ StackExchange ขอโทษถ้าฉันโพสต์สิ่งนี้ในส่วนที่ไม่ถูกต้องฉันคิดว่ามันนับเป็นโครงสร้างข้อมูล

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

4
ต้นไม้จัดโดยโครงสร้าง“ firstchild, nextsibling” หรือไม่? ถ้าไม่ทำไมล่ะ
โดยปกติแล้วโครงสร้างข้อมูลแบบต้นไม้จะถูกจัดระเบียบในลักษณะที่แต่ละโหนดมีตัวชี้ไปยังลูกทั้งหมด +-----------------------------------------+ | root | | child1 child2 child3 | +--+------------------+----------------+--+ | | | +---------------+ +---------------+ +---------------+ | node1 | | node2 | | node3 | | child1 child2 | | child1 child2 | | child1 child2 | +--+---------+--+ +--+---------+--+ +--+---------+--+ | | | | | | มันดูเป็นธรรมชาติ แต่มันมาพร้อมกับปัญหาบางอย่าง ตัวอย่างเช่นเมื่อจำนวนโหนดย่อยแตกต่างกันไปคุณจำเป็นต้องมีสิ่งต่าง …

2
Pseudocode สำหรับคิว Brodal
ฉันพยายามที่จะหาแหล่งข้อมูลเพิ่มเติมเกี่ยวกับBrodal กอง ผมพบว่าทั้งหมดเป็นการดำเนินงานของ Haskell Brodal-Okasaki กองแต่ผมคิดว่าพวกเขาเป็นกองลาดนี้เป็นถูกต้องหรือไม่ นอกจากนี้ฉันไม่รู้หนังสือใน Haskell ดังนั้นมันจึงไม่ได้ช่วยอะไรมาก ไม่มีใครมี (หรือรู้) การใช้คิว Brodal ใน pseudocode, C, C ++, Python? โปรดแก้ไขให้ถูกต้องหากข้อสันนิษฐานข้างต้นของฉันไม่ถูกต้อง

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

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