Skip to content

Latest commit

 

History

History
75 lines (54 loc) · 7.08 KB

Array.md

File metadata and controls

75 lines (54 loc) · 7.08 KB

ARRAY

  •   Array คืออะไร ?

        Array คือ โครงสร้างข้อมูลที่จัดเก็บข้อมูลไว้ในตำแหน่งหน่วยความจำที่อยู่ติดกัน  ต้องจองพื้นที่หน่วยความจำไว้ล่วงหน้า ข้อมูลที่จัดเก็บใน Array
    จะมีชนิดข้อมูลเหมือนกัน   สามารถเข้าถึงสมาชิกภายใน Array โดยการกำหนด Index
    
     :: ข้อดีของ Array ::
          -  อาร์เรย์อนุญาตให้เข้าถึงองค์ประกอบโดยสุ่ม ทำให้เข้าถึงองค์ประกอบตามตำแหน่งได้เร็วขึ้น
    
     :: ข้อเสียของ Array ::
          -  ขยายขนาดเองไม่ได้ เนื่องจากการจัดสรรหน่วยความจำแบบคงที่
          -  การแทรก และการลบ  ทำได้ยากเนื่องจาก ข้อมูลถูกจัดเก็บไว้ในตำแหน่งหน่วยความจำที่ต่อเนื่องกัน ต้องใช้การขยับ  ทำให้ช้า
    
     :: การประยุกต์ใช้ Array ::
          -  ใช้เพื่อปรับสร้างเป็นโครงสร้างข้อมูลอื่นๆ เช่น Stacks, Queues, Heaps, Hash tables
          -  การประยุกต์ใช้ Array สร้างเป็น Stack สามารถทำได้ แต่ไม่นิยม เพราะ Array ... นิยมใช้ Linked List มากกว่า
          -  ใช้ทำ โครงสร้าง record ใน Database
    

  •   Exercise 1  :  Maximum Subsequence Sum 🔗

        จงเขียนโปรแกรมหา Maximum  Subsequence  Sum
          -  โดยให้เขียน 3 แบบ : brute-force (mss1)  >>  พยายามลดloop เหลือ 2loop (mss2)  >>  พยายามลดloop เหลือ 1loop (mss3)
             แล้ววิเคราะห์หา BigO ของทั้ง 3 แบบ หาคำตอบว่า Algorithm ไหนมีประสิทธิภาพดีที่สุด เพราะอะไร ?
    
          -  เขียนฟังก์ชั่นจับเวลาของแต่ละ Algorithm ด้วย เพื่อใช้ดูเปรียบเทียบกับ Big-O ที่วิเคราะห์ได้
             Hint : ในภาษา java ใช้ currentTimemill() จับเวลาตอนเริ่ม และ ตอนทำเสร็จ เอามาลบกัน ได้เวลาที่ใช้ทั้งหมด
    
          -  Maximum Subsequence Sum คือ  ผลรวมของเลขที่อยู่ติดกัน ที่มีค่ามากที่สุด
    
        :: Test Case ::
        input  :  มี array [-2, 11, -6, 16, -5, 7]
        output  : Maximum Subsequence Sum คือ 23 มาจาก [11, -6, 16, -5, 7]
                  = 11 + (-6) + 16 + (-5) + 7
                  = 23
    

    เฉลย Exercise 1 : Algorithm mss3 มีประสิทธิภาพมากที่สุด จะเห็นว่าการเขียนโปรแกรมแบบซ้อนลูป ยิ่งซ้อนมาก ประสิทธิภาพยิ่งแย่ ควรเลี่ยง!

    • mss1 : Big-O(n^3)
    • mss2 : Big-O(n^2)
    • mss3 : Big-O(n)

  •   Exercise 2  :  Sorting Array 🔗

        จงเขียนโปรแกรมเรียง  Array (Sorting)
          -  โดยให้เขียน 5 แบบ แล้ววิเคราะห์หา BigO ของทั้ง 5 แบบ หาคำตอบว่า Algorithm ไหนมีประสิทธิภาพดีที่สุด เพราะอะไร ?
             เขียนฟังก์ชั่นจับเวลาของแต่ละ Algorithm ด้วย เพื่อใช้ดูเปรียบเทียบกับ Big-O ที่วิเคราะห์ได้
              1.)  Bubble Sort  :  brute-froce
              2.)  Selection Sort  :  ลดการสลับ
              3.)  Insertion Sort  :  มีตัวที่เรียงอยู่แล้ว ไม่จำเป็นต้องวนลูปจนสุด เพื่อเช็คให้ครบ
              4.)  Merge Sort  :  ใช้ Devine & Conquer
              5.)  Quick Sort  :  เป็น Algorithm ที่นิมยมใช้ในปัจจุบัน
    
          :: Test Case ::
          input  :  มี array [5, -2, 23, 7, 87, -42, 509]
          output  : เมื่อเรียงจะได้  [-42, -2, 5, 7, 23, 87, 509]
    
          -  ในภาษา java คำสั่ง Sort คือ :  int[] arr = { 5, -2, 23, 7, 87, -42, 509 };
                                          Arrays.sort(arr);
    

    เฉลย Exercise 2 : Algorithm Quick Sort มีประสิทธิภาพมากที่สุด จะเห็นว่า loop เท่ากัน แต่โปรแกรมสามารถเร็วขึ้นได้ ถ้าเราลดการ ทำงานซ้ำ เพิ่มความฉลาดให้มัน

    • Bubble Sort : Big-O(n^2)
    • Selection Sort : Big-O(n^2)
    • Insertion Sort : Big-O(n^2)
    • Merge Sort : Big-O(n log n)
    • Quick Sort : Big-O(n log n)




<  Contents                                                                                                                                                                                       ArrayList  >