สิ่งที่ได้ จากการเรียนรู้ Data Structure มาตลอดทั้งสัปดาห์

11-เม.ย.-18

คัมภีร์เทพ IT

บทความนี้เขียนโดย Shilpa Jain ซึ่งได้ศึกษาเกี่ยวกับ Data Structures 7 รูปแบบ ที่นิยมใช้งานกัน โดยมีจุดเริ่มต้นจากการที่เธอมี Project ที่ต้องการพัฒนาตนเองเพื่อให้เป็น Software Engineer ที่ดีขึ้น เรามาดูกันดีกว่ามีเรื่องราวของเธอเป็นอย่างไร

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

ปัญหาอยู่ตรงไหน?

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

แล้ว Solution เป็นอย่างไรล่ะ?

ถือว่าโชคดี ที่มีคนเก่งบางคนได้สร้างโครงสร้าง (Structure) ที่ยอดเยี่ยมซึ่งได้ผ่านการ Test แล้วและมันก็ช่วยแก้ปัญหาให้เราได้ ทั้งหมดที่เราต้องรู้คือ มันทำงานและใช้งานอย่างไร เราเรียกสิ่งนั้นว่า "Data Structure" นั่นเอง ไม่ว่าการ Accessing, inserting, deleting, finding, และ sorting ถือเป็นการดำเนินการที่พวกเรารู้จักกันดีที่สามารถใช้กับ Data Structures ได้

เรื่องแรกที่จะกล่าวถึงคือ "Array" ถ้ามี Array แล้วไม่จำเป็นต้องมี Data Structure อย่างอื่น แต่เธอคงไม่มีกำลังและเวลามากพอที่จะอธิบายว่าทำไม Array ถึงได้ชนะ Data Structure แบบอื่น แต่เชื่อเถอะว่า คุณควรจะรู้ Data Structure รูปแบบอื่นๆ ด้วย

คุณยังไม่เชื่อเหรอ?

ลองพยายามแก้ปัญหาบางอย่างกับ Array ดูสิ หากคุณต้องการค้นหาบางอย่างใน Array เพียงแค่ตรวจสอบในทุก Slot, คุณต้องการ Insert บางอย่างตรงกลางใช่ไหม คุณสามารถย้ายทุก Elements เพื่อสร้าง Room ให้มัน

มันง่ายมากใช่ไหม?

สิ่งทีได้คือ "ทุกอย่างมันช้า" เราต้องการ Find / Sort / Insert ข้อมูลให้มีประสิทธิภาพและเร็วที่สุดเท่าที่จะทำได้ แต่ Algorithm อาจต้องการทำ Operation เหล่านี้เป็นล้านๆ ครั้ง ถ้าคุณไม่สามารถทำมันอย่างมีประสิทธิภาพได้ Algorithm อื่นๆ ก็คงไม่มีไม่มีประสิทธิภาพเช่นกัน แต่ถ้ามันจบด้วยดี คุณจะสามารถทำสิ่งต่างๆ ได้เร็วขึ้น เมื่อคุณจัดเรียงข้อมูลที่แตกต่างออกไปได้

คุณอาจคิดว่า ถ้ามีคนถามว่า แล้ว Data Structure อะไรที่ดีที่สุดหรือให้เรียงลำดับมันล่ะ ถ้าเป็นเธอ จะตอบว่า มันก็ตอบยาก ขึ้นอยู่กับบริบทแวดล้อมที่เกี่ยวข้องกับปัญหานั้นๆ และอย่าลืมที่จะวิเคราะห์ปัจจัยเกี่ยวกับ เวลา และ พื้นที่ที่จะต้องใช้ด้วย ส่วนเรื่องถ้าจะให้จัดลำดับ ว่าควรเรียนรู้ Data Structure อะไรมากกว่ากันหรือก่อน-หลังดี ลองดูตามลิสต์นี้ดูสิ

  1. Array
  2. Stacks
  3. Queues
  4. Linked List
  5. Hash Tables
  6. Trees
  7. Graphs

คุณอาจจะต้องเก็บเรื่อง Trees และ Graphs ไว้เรียนรู้ท้ายสุด ซึ่งเธอขอยอมรับว่า เพราะมันมี Concept และ Algorithm ต่างๆ มากมายมหาศาลที่ต้องเรียนรู้ ส่วน Array เป็นเรื่องที่เรียนรู้ได้ง่ายกว่า เพราะคุณจะพบว่ามันถูกใช้อย่างแพร่หลายมากๆ

ในขณะที่ทำงานทำให้เธอนึกอะไรออกได้หลายอย่าง เช่น ตอนคุณกินมันฝรั่ง Pringles คุณจะกินมันฝรั่งแผ่นสุดท้ายที่อยู่บนสุดก่อนเสมอ (ซึ่งมันคือ LIFO) ส่วนสร้อยไข่มุกที่คุณได้มาตอนวันวาเลนไทน์ มันเปรียบเหมือน Linked list ไข่มุกแต่ละเม็ดจะมี Data อยู่ข้างใน ที่ข้อมูลจะถูก Link ไปสู่ข้อมูลตัวถัดไปในไข่มุกแต่ละเม็ดนั่นเอง ตัวอย่างอื่นที่่าสนใจคือ สมองของคนเราเปรียบเสมือน Linked List ดีๆ นี่เอง สมมติ คุณลืมว่าวางกุญแจรถไว้ที่ไหน สมองของคุณจะทำการเชื่อมโยงไปยังความทรงจำของคุณย้อนกลับไปว่าคุณไปที่ไหนทำอะไรมาบ้าง จนสุดท้ายก็นึกออกว่าคุณวางมันไว้ที่ไหนอย่างไรล่ะ

ส่วนตัวอย่างอื่นๆ ที่เชื่อว่าทุกคนคงมองภาพออกเกี่ยวกับเรื่อง Stacks และ Queues คือ ปุ่ม back/forward ใน Browser และ browsing history อย่างไรล่ะ

ขณะที่คุณกำลังเปิดดูเว็บไปทีละหน้าๆ หน้าเว็บเหล่านั้นจะถูกเก็บไว้ใน Stack โดยหน้าที่เราดูล่าสุดจะอยู่บนสุดและหน้าแรกที่เราดูจะอยู่ล่างสุด เมื่อเราคลิกปุ่ม Back เราจะย้อนกลับไปสู่หน้าก่อนๆ ที่เราเคยดูตามลำดับ ส่วน Queue ถูกใช้ใน Browsing history เมื่อ

page ใหม่ๆ ถูกเก็บใน History page เก่าๆ ก็จะถูกทะยอยลบไปเรื่อยๆ เช่น เมื่อครบ 30 วัน เป็นต้น สุดท้ายนี้ เรามาหยุดสักครู่ และจินตนาการว่า เราเองก็เป็นทั้ง User และ Developer ที่ใช้ทั้ง Stacks และ Queues มันเป็นเรื่องที่น่าอัศจรรย์ จริงไหม?

ที่มา:  https://codeburst.io/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความที่เกี่ยวข้อง