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

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

15
เหตุใดโครงสร้างข้อมูลจึงมีความสำคัญในการสัมภาษณ์ [ปิด]
ฉันต้องยอมรับว่าฉันไม่แข็งแรงในโครงสร้างข้อมูลเมื่อฉันจบการศึกษาจากวิทยาลัย ตลอดการฝึกงานในมหาวิทยาลัยในช่วงที่ฉันเรียนจบฉันได้เห็นว่า บริษัท เทคโนโลยียักษ์ใหญ่อย่าง Amazon, Microsoft และอื่น ๆ มุ่งเน้นที่โครงสร้างข้อมูลเป็นหลัก ดูเหมือนว่าโครงสร้างข้อมูลเป็นสิ่งเดียวที่พวกเขาคาดหวังจากบัณฑิต พูดตามตรงฉันรู้สึกไม่ดี ฉันเขียนรหัสที่ดี ฉันทำตามรูปแบบการออกแบบมาตรฐานของการเข้ารหัสฉันใช้โครงสร้างข้อมูล แต่ในระดับผิวเผินใน Java ที่เปิดเผย APIs เช่น ArrayList, LinkedList เป็นต้น แต่ บริษัท มักจะเน้นเรื่องโครงสร้างข้อมูลที่ซับซ้อนเช่นการจัดการหน่วยความจำตามตัวชี้และความซับซ้อนของเวลา อาจเป็นเพราะพื้นหลัง Java ของฉันกลับมาแล้วฉันเข้าใจประสิทธิภาพของโค้ดและตรรกะเฉพาะเมื่อพูดในแง่ของการเขียนโปรแกรมเชิงวัตถุเช่นวัตถุอินสแตนซ์ ฯลฯ แต่ฉันไม่เคยเจาะลงในระดับบิตและไบต์ ฉันไม่ต้องการให้คนดูถูกฉันเพราะการขาดความรู้นี้ในโครงสร้างข้อมูล จริงๆแล้วทำไมทั้งหมดนี้จึงเน้นโครงสร้างข้อมูล?

4
อัลกอริทึม / โครงสร้างข้อมูลใดที่ฉันควร "รู้จัก" และรู้จักด้วยชื่อ? [ปิด]
ฉันต้องการพิจารณาตัวเองเป็นโปรแกรมเมอร์ที่มีประสบการณ์พอสมควร ฉันเขียนโปรแกรมมานานกว่า 5 ปีแล้ว จุดอ่อนของฉันแม้ว่าจะเป็นคำศัพท์ ฉันเรียนรู้ด้วยตนเองดังนั้นในขณะที่ฉันรู้วิธีการเขียนโปรแกรมฉันไม่ทราบถึงแง่มุมที่เป็นทางการของวิทยาศาสตร์คอมพิวเตอร์ ดังนั้นอัลกอริธึมเชิงปฏิบัติ / โครงสร้างข้อมูลที่ฉันรู้จักและรู้จักด้วยชื่อคืออะไร? หมายเหตุฉันไม่ได้ขอคำแนะนำหนังสือเกี่ยวกับการใช้อัลกอริทึม ฉันไม่สนใจเกี่ยวกับการนำไปใช้ฉันแค่อยากรู้ว่าเมื่อใดอัลกอริทึม / โครงสร้างข้อมูลจะเป็นวิธีแก้ปัญหาที่ดี ฉันขอเพิ่มเติมเกี่ยวกับรายการอัลกอริทึม / โครงสร้างข้อมูลที่ฉันควร "จดจำ" เช่นฉันรู้วิธีแก้ปัญหาเช่นนี้ คุณจัดการชุดล็อกเกอร์ที่มีข้อความ 0-999 ผู้คนมาหาคุณเพื่อเช่าตู้เก็บของและจากนั้นกลับมาเพื่อส่งคืนกุญแจตู้เก็บของ คุณจะสร้างซอฟต์แวร์ชิ้นหนึ่งเพื่อจัดการกับการรู้ว่าตู้เก็บของฟรีและที่ใช้อยู่อย่างไร การแก้ปัญหาจะเป็นคิวหรือสแต็ค สิ่งที่ฉันกำลังมองหาคือสิ่งที่ "ในสถานการณ์ที่ควรใช้ B-Tree - อัลกอริทึมการค้นหาใดควรใช้ที่นี่" เป็นต้นและอาจเป็นการแนะนำอย่างรวดเร็วว่าโครงสร้างข้อมูลที่ซับซ้อนมากขึ้น (แต่ใช้กันทั่วไป) / อัลกอริทึมทำงาน ฉันลองดูรายการโครงสร้างข้อมูลและอัลกอริทึมของ Wikipedia แต่ฉันคิดว่ามันเกินความจริงเล็กน้อย ดังนั้นฉันจึงมองหาสิ่งสำคัญที่ฉันควรรู้


6
EAV - มันแย่จริง ๆ ในทุกสถานการณ์หรือไม่?
ฉันคิดว่าจะใช้โมเดลเอนทิตีแอตทริบิวต์ - ค่า (EAV)สำหรับบางสิ่งในโครงการหนึ่ง แต่คำถามทั้งหมดเกี่ยวกับเรื่องนี้ใน Stack Overflowจบลงด้วยคำตอบที่เรียกว่า EAV เป็นรูปแบบการต่อต้าน แต่ฉันสงสัยว่ามันผิดในทุกกรณีหรือไม่ สมมติว่าเอนทิตีผลิตภัณฑ์ของร้านค้ามันมีคุณสมบัติทั่วไปเช่นชื่อคำอธิบายรูปภาพและราคาที่มีส่วนร่วมในหลาย ๆ ตรรกะและมีคุณสมบัติที่เป็นเอกลักษณ์ (กึ่ง) เช่นนาฬิกาและลูกบอลชายหาดจะอธิบายด้วยแง่มุมที่แตกต่างกันโดยสิ้นเชิง ดังนั้นฉันคิดว่า EAV จะเหมาะสำหรับการจัดเก็บคุณลักษณะเฉพาะ (กึ่ง) เหล่านั้น ทั้งหมดนี้เป็นการสมมติว่าสำหรับการแสดงรายการผลิตภัณฑ์มันเป็นข้อมูลที่เพียงพอในตารางผลิตภัณฑ์ (นั่นหมายความว่าไม่มี EAV ที่เกี่ยวข้อง) และเมื่อแสดงผลิตภัณฑ์เดียว / เปรียบเทียบผลิตภัณฑ์สูงสุด 5 รายการ / ฯลฯ ใช้ข้อมูลที่บันทึกโดยใช้ EAV ฉันเคยเห็นวิธีการดังกล่าวในการค้าของวีโอไอพีและค่อนข้างเป็นที่นิยมดังนั้นมีกรณีที่ EAV เหมาะสมหรือไม่

7
ข้อมูลการกำหนดค่า: ตารางแถวเดียวกับตารางคู่ค่าชื่อ
สมมติว่าคุณเขียนแอปพลิเคชันที่ผู้ใช้สามารถกำหนดค่าได้ สำหรับการจัดเก็บ "ข้อมูลการกำหนดค่า" นี้ลงในฐานข้อมูลมักใช้สองรูปแบบ ตารางแถวเดียว CompanyName | StartFullScreen | RefreshSeconds | ... ---------------+-------------------+------------------+-------- ACME Inc. | true | 20 | ... ค่าชื่อคู่โต๊ะ ConfigOption | Value -----------------+------------- CompanyName | ACME Inc. StartFullScreen | true (or 1, or Y, ...) RefreshSeconds | 20 ... | ... ฉันเคยเห็นตัวเลือกทั้งสองในป่าและทั้งสองมีข้อดีและข้อเสียที่เห็นได้ชัดเช่น: ตารางแถวเดี่ยว จำกัด จำนวนตัวเลือกการกำหนดค่าที่คุณสามารถมีได้ (เนื่องจากจำนวนคอลัมน์ในแถวนั้น จำกัด …

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

16
ฉันจะเก็บค่า“ ไม่รู้จัก” และ“ หายไป” ในตัวแปรได้อย่างไรในขณะที่ยังคงรักษาความแตกต่างระหว่าง“ ไม่ทราบ” และ“ หายไป”
พิจารณาคำถามนี้เป็น "วิชาการ" ฉันสงสัยเกี่ยวกับการหลีกเลี่ยง NULL เป็นครั้งคราวและนี่เป็นตัวอย่างที่ฉันไม่สามารถหาวิธีแก้ปัญหาที่น่าพอใจได้ สมมติว่าฉันเก็บค่าการวัดซึ่งบางครั้งการวัดนั้นเป็นไปไม่ได้ (หรือหายไป) ฉันต้องการเก็บค่า "ว่างเปล่า" ในตัวแปรในขณะที่หลีกเลี่ยงค่า NULL บางครั้งค่าอาจไม่เป็นที่รู้จัก ดังนั้นการมีการวัดสำหรับกรอบเวลาที่แน่นอนเคียวรีเกี่ยวกับการวัดภายในช่วงเวลานั้นอาจส่งคืนการตอบสนอง 3 ชนิด: การวัดจริงในเวลานั้น (เช่นค่าตัวเลขใด ๆ รวมถึง0) A "หายไป" / "ว่างเปล่า" ค่า (กล่าวคือเป็นวัดที่ได้กระทำและความคุ้มค่าเป็นที่รู้จักกันว่าเป็นที่ว่างเปล่าที่จุดนั้น) ค่าที่ไม่รู้จัก (เช่นไม่มีการวัดที่จุดนั้นอาจว่างเปล่า แต่อาจเป็นค่าอื่นก็ได้) ชี้แจงที่สำคัญ: สมมติว่าคุณมีฟังก์ชันที่get_measurement()ส่งคืนหนึ่งใน "ว่างเปล่า", "ไม่ทราบ" และค่าประเภท "จำนวนเต็ม" การมีค่าตัวเลขแสดงถึงการดำเนินการบางอย่างที่สามารถทำได้ในค่าส่งคืน (การคูณการหาร ... ) แต่การใช้การดำเนินการดังกล่าวกับ NULLs จะทำให้แอปพลิเคชันเสียหายหากไม่ถูกจับ ฉันต้องการที่จะสามารถเขียนรหัสหลีกเลี่ยงการตรวจสอบ NULL เช่น (pseudocode): >>> value = get_measurement() # …

4
ทำไมการใช้ MySQL สำหรับเว็บไซต์พจนานุกรมจึงเป็นความคิดที่ไม่ดี
ฉันวางแผนที่จะออกแบบและตั้งค่าฐานข้อมูลเพื่อจัดเก็บรายการพจนานุกรม (มักเป็นคำเดียว) และความหมายของพวกเขาในภาษาอื่น ตัวอย่างเช่นตารางอภิธานศัพท์จะต้องมีรายการและคำนิยามและแต่ละระเบียนในตารางมีการอ้างอิงถึงidของบันทึกที่เก็บไว้ในTag(แต่ละรายการจะต้องมีแท็กหรือหมวดหมู่) เนื่องจากข้อมูลของฉันมีโครงสร้างฉันคิดว่าการใช้ฐานข้อมูล SQL (เช่น MySQL) ไม่ใช่ความคิดที่แย่ แต่ผู้คนบอกว่า MongoDB นั้นดีกว่ามากสำหรับประสิทธิภาพ ที่ฝั่งไคลเอ็นต์แอปพลิเคชันจะต้องสามารถให้ช่องค้นหาด้วยการเติมข้อความอัตโนมัติซึ่งใช้ REST API ที่แบ็กเอนด์จัดหาให้ ปลอดภัยที่จะไปกับ MySQL ในสถานการณ์เช่นนี้หรือไม่? หรือฉันควรใช้ MongoDB หรือ ElasticSearch ของการแก้ปัญหาอื่น ๆ สำหรับเรื่องนี้? ควรมีการจัดเก็บและเข้าถึงบันทึกหลายแสนรายการด้วยวิธีนี้

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

1
การรักษาโครงสร้างข้อมูล 1D เป็นกริด 2D
ฉันกำลังทำงานกับคลาสเนทีฟที่แสดงภาพ 2D เป็นอาร์เรย์ 1D หากคุณต้องการเปลี่ยนหนึ่งพิกเซลตัวอย่างเช่นตอนนี้คุณต้องได้รับดัชนีจากx,yพิกัด ดังนั้นสมมติว่าเรามีอาร์เรย์ 1D array1dดังนี้: array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ] ในบริบทของโปรแกรมของเราarray1dหมายถึงกริด 2D: a b c d e f g h i j k …

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

4
ความแตกต่างระหว่างแฮชกับพจนานุกรมคืออะไร
ความแตกต่างระหว่างHashและDictionaryคืออะไร? มาจากพื้นหลังของสคริปต์ฉันรู้สึกว่ามันคล้ายกัน แต่ฉันต้องการค้นหาความแตกต่างที่แน่นอน Googling ไม่ได้ช่วยฉันเท่าไหร่

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

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

8
ฉันจะสร้างโครงสร้างข้อมูลสำหรับ "เขาวงกต" ที่มีขนาดไม่ จำกัด ได้อย่างไร
ฉันไม่แน่ใจจริงๆว่า "เขาวงกต" เป็นคำที่ถูกต้อง ผู้ใช้โดยทั่วไปเริ่มต้นในซิงเกิลRoomที่มี 4 ประตู (N, S, E และ W) พวกเขาสามารถไปในทิศทางใดก็ได้และห้องถัดไปแต่ละห้องจะมีอีกห้องหนึ่งโดยมีประตูตั้งแต่ 1 ถึง 4 ประตูที่ไปยังห้องอื่น "เขาวงกต" ควรจะมีขนาดไม่ จำกัด และเพิ่มขึ้นเมื่อคุณย้ายห้อง มีจำนวน จำกัดRoomsแต่จำนวนที่มีอยู่นั้นเป็นแบบไดนามิกและสามารถเปลี่ยนแปลงได้ ปัญหาของฉันคือฉันไม่แน่ใจว่าโครงสร้างข้อมูลที่ดีที่สุดสำหรับรูปแบบประเภทนี้ ครั้งแรกที่ฉันคิดว่าจะใช้แค่ชุดของRoomวัตถุ[X] [X] แต่ฉันค่อนข้างจะหลีกเลี่ยงเพราะสิ่งนี้ควรจะเติบโตในทุกทิศทางและควรสร้างห้องที่ "เยี่ยมชม" เท่านั้น อีกความคิดหนึ่งคือการให้แต่ละRoomคลาสมี 4 Roomคุณสมบัติที่เชื่อมโยงสำหรับ N, S, E และ W และเพียงแค่เชื่อมโยงไปยังก่อนหน้านี้Roomแต่ปัญหาของการที่ฉันไม่รู้วิธีระบุว่าผู้ใช้เข้าห้องหรือไม่ มีห้องที่อยู่ติดกันแล้ว "สร้าง" ตัวอย่างเช่น, --- --- ---------- | | | | เริ่ม 5 4 …

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