1 / 46

ARRAY

ARRAY. อ.วร พจน์ พรหมจักร. นิยาม/ความหมาย.

moses
Download Presentation

ARRAY

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ARRAY อ.วรพจน์ พรหมจักร

  2. นิยาม/ความหมาย • อาร์เรย์ เป็นตัวแปรชุดที่มีการกำหนดชื่อตัวแปรเพียงชื่อเดียว แต่สามารถกำหนดจำนวนช่องที่ใช้ในการจัดเก็บข้อมูลได้หลายช่อง ชนิดข้อมูลที่จัดเก็บในอาร์เรย์ชุดเดียวกันจะมีชนิดข้อมูลเพียงชนิดเดียว และการอ้างอิงอาร์เรย์จะต้องระบุช่องที่ของอาร์เรย์ เรียกว่า Subscript หรือ Index • อาร์เรย์เป็นโครงสร้างข้อมูลแบบเส้น (Linear Structure) กล่าวคือ ช่องที่ใช้ในการจัดเก็บข้อมูลของอาร์เรย์เดียวกัน จะใช้เนื้อที่ในหน่วยความจำเรียงลำดับกันไปตั้งแต่ช่องแรกไปจนถึงช่องสุดท้ายของอาร์เรย์ และมีจำนวนช่องที่ตายตัว

  3. นิยาม/ความหมาย • อาร์เรย์ เป็นโครงสร้างข้อมูลที่ใช้เก็บข้อมูลชนิดเดียวกัน เป็นกลุ่มหรือชุดที่เรียงติดต่อกันเป็นแถว มีขอบเขตจำกัดและมีขนาดคงที่ ** ข้อมูลชนิดเดียวกัน คือ ข้อมูลทุกตัวที่อยู่ในอาร์เรย์จะต้องเป็นข้อมูลชนิดเดียวกันเท่านั้น เช่น ถ้าเป็นอาร์เรย์ชนิดจำนวนเต็ม ข้อมูลทุกตัวในอาร์เรย์ก็ต้องเป็นชนิดจำนวนเต็ม ไม่สามารถเก็บข้อมูลต่างชนิดกันได้ **

  4. ลักษณะของ ARRAY • อาร์เรย์เป็นโครงสร้างข้อมูล ที่มีลักษณะ ดังนี้ • 1. เป็นโครงสร้างข้อมูลชนิดเป็นเชิงเส้น (Linear Structure) คือจัดเก็บข้อมูลในช่องของอาร์เรย์ต่อเนื่องกันไป ข้อมูลช่องที่ติดกันจะเก็บในหน่วยความจำที่ต่อเนื่องกัน เช่น อาร์เรย์ A ช่องที่ 2 จะอยู่ต่อจากอาร์เรย์ A ช่องที่ 1 เป็นต้น • 2. จัดเก็บข้อมูลชนิดเดียวกัน คือ ในอาร์เรย์เดียวกันไม่ว่าจะกำหนดจำนวนช่องไว้กี่ช่องก็ตาม ชนิดของทุกช่องจะเป็นชนิดข้อมูลเดียวกันเท่านั้น ไม่สามารถจัดเก็บข้อมูลที่มีหลากหลายชนิดในอาร์เรย์เดียวกันได้

  5. ลักษณะของ ARRAY • 3. มีการกำหนดจำนวนช่องไว้แน่นอน คือ เมื่อกำหนดตัวแปรใดให้เป็นอาร์เรย์ จะต้องระบุจำนวนช่องของอาร์เรย์ว่าจะให้มีช่องที่ใช้ในการจัดเก็บข้อมูลทั้งหมดกี่ช่อง และแต่ละช่องจะเรียงต่อเนื่องกันไปเรื่อยๆ ตั้งแต่ช่องแรกไปจนถึงช่องสุดท้าย • 4. สามารถเข้าถึงช่องต่างๆ ได้โดยตรง คือ จากจำนวนช่องทั้งหมดของอาร์เรย์ที่กำหนดไว้ เราสามรถเข้าถึงข้อมูลช่องใดๆ ได้โดยตรงโดยไม่จำเป็นต้องเริ่มต้นตั้งแต่ช่องแรกก็ได้ โดยการระบุ ช่องที่ของอาร์เรย์ที่ต้องการเข้าถึง แต่การระบุช่องที่ต้องอยู่ในขอบเขตที่กำหนด เช่น กำหนดอาร์เรย์ A มีจำนวน 10 ช่องสามารถเข้าถึงช่องใดก็ได้ตั้งแต่ ช่องที่ 1 ถึงช่องที่ 10 โดยระบุช่องไว้หลังชื่อตัวแปร • ตัวอย่าง A[5] หมายถึง อาร์เรย์ A ช่องที่ 5

  6. การอ้างอิงตำแหน่งในสมาชิกอาร์เรย์การอ้างอิงตำแหน่งในสมาชิกอาร์เรย์ • สำหรับการอ้างอิงตำแหน่งสมาชิกอาร์เรย์ จะต้องเริ่มต้นด้วยชื่ออาร์เรย์และตามด้วยเลขลำดับ (Position number) กำกับไว้ด้วย ซึ่งเลขลำดับเหล่านี้สามารถเรียกได้หลายชื่อด้วยกัน เช่น Subscript หรือ Index ซึ่งต่างก็คือความหมายเดียวกันที่ใช้แทนกันได้ โดยเลขดรรชนีจะอยู่ภายในเครื่องหมาย ( ) หรือ [ ] ก็ได้ ทั้งนี้ขึ้นอยู่กับภาษาคอมพิวเตอร์แต่ละภาษา • ในภาษาคอมพิวเตอร์อย่างภาษา C หรือ JAVA หมายเลขลำดับของอาร์เรย์จะเริ่มต้นด้วยหมายเลข 0 ในขณะที่ภาษา FORTRAN จะเริ่มต้อนด้วยหมายเลข 1 ดังนั้นหากมีการประกาศตัวแปรอาร์เรย์อาจเกิดความสับสนได้ จึงจำเป็นต้องใช้อย่างระมัดระวัง

  7. การอ้างอิงตำแหน่งในสมาชิกอาร์เรย์การอ้างอิงตำแหน่งในสมาชิกอาร์เรย์ • ข้อสังเกต การอ้างอิงสมาชิกในอาร์เรย์นั้นเราสามารถเข้าถึงได้โดยตรง ดังนั้นจึงรับประกันได้ว่าการเข้าถึงด้วยการอ่านหรือการบันทึกข้อมูลในอาร์เรย์จะมีเวลาคงที่ ซึ่งเป็นไปตามฟังก์ชั่น O(1) แต่อย่างไรก็ตาม สำหรับในกรณีอื่นๆ อย่างเช่น การค้นหาข้อมูลในอาร์เรย์ การหาค่าต่ำสุด หรือการหาค่าสูงสุดในอาร์เรย์ จะเป็นในลักษณะเชิงเส้นซึ่งเป็นไปตามประสิทธิภาพของฟังก์ชั่น O(n)

  8. ประเภทของอาร์เรย์ • หากจะแบ่งอาร์เรย์ตามมิติของอาร์เรย์ ที่ใช้อ้างอิงในการเขียนโปรแกรม สามารถแบ่งได้เป็น 3 ประเภท คือ • 1. อาร์เรย์ 1 มิติ • 2. อาร์เรย์ 2 มิติ • 3. อาร์เรย์ 3มิติ

  9. อาร์เรย์ 1 มิติ (One-Dimension Array) • อาร์เรย์ 1 มิติคือ อาร์เรย์ที่มีแถว 1 แถวแต่จะมีช่องหรือคอลัมน์หลายคอลัมน์ ในการอ้างอิงถึง อาร์เรย์ 1 มิติ จะใช้ตัวระบุช่องที่เพียงตัวเดียว หากกำหนดให้อาร์เรย์ A มีแถวจำนวน 1 แถว มีคอลัมน์จำนวน 5 คอลัมน์ สามารถแสดงรูปอาร์เรย์ 1 มิติ ได้ดังนี้ A[1] A[2] A[3] A[4] A[5]

  10. ขอบเขตของอาร์เรย์ 1 มิติ • ขอบเขตของอาร์เรย์ (Bound) • เลขดัชนี (Index) ในอาร์เรย์ประกอบด้วยช่วงขอบเขตของค่า ซึ่งประกอบด้วย ขอบล่างสุด (Lower Bound)และ ขอบบนสุด (Upper Bound) • ในภาษาคอมพิวเตอร์ เช่น ภาษา C, C++, C# และ JAVA ขอบเขตล่างสุด = 0 ในภาษา FORTRAN = 1 • สำหรับการคำนวณหาจำนวนสมาชิกของอาร์เรย์ 1 มิติ สามารถคำนวณได้จากสูตรนี้ จำนวนสมาชิก = U-L+1

  11. ขอบเขตของอาร์เรย์ 1 มิติ โดยที่ Lคือ ขอบล่างสุด (Lower Bound) U คือ ขอบบนสุด (Upper Bound) • ตัวอย่าง int a[5]; จำนวนสมาชิก a จะได้เท่ากับ = U-L+1 = 4-0+1 = 5

  12. การจัดเก็บอาร์เรย์ในหน่วยความจำการจัดเก็บอาร์เรย์ในหน่วยความจำ • โครงสร้างข้อมูลอาร์เรย์ 1 มิติ จะมีการจัดเก็บข้อมูลในลักษณะต่อเนื่องกันเป็นแถว ซึ่งอาจจะนำเสนอในมุมมองแบบแนวนอนหรือแนวตั้งก็ได้ โดยรูปแบบทั่วไปของโครงสร้างข้อมูลอาร์เรย์ 1 มิติ คือ ArrayName [L:U] โดยที่ ArrayNameคือชื่อของอาร์เรย์ L คือ ขอบล่างสุด (Lower Bound) U คือ ขอบบนสุด (Upper Bound) เช่น A [0:4] ArrayName= A, L=0, U=4

  13. การจัดเก็บอาร์เรย์ในหน่วยความจำการจัดเก็บอาร์เรย์ในหน่วยความจำ • ตัวอย่างเช่น a[1:10] คือ อาร์เรย์ a ที่มีจำนวนช่องตั้งแต่ 1 ถึง 10 แต่อย่างไรก็ตาม เราสามารถเขียนได้ในรูปแบบ a[10] ก็ได้ และถ้าหากกำหนดให้ a คืออาร์เรย์ 1 มิติ เป็นชนิดข้อความจำนวนเต็ม โดยมีสมาชิก 20 ตัว ด้วย ภาษา C ก็จะประกาศดังนี้ int a[20];

  14. การจัดเก็บอาร์เรย์ในหน่วยความจำการจัดเก็บอาร์เรย์ในหน่วยความจำ • และตำแหน่งที่อยู่ของสมาชิกทุกๆ ตัวในหน่วยความจำ สามารถคำนวณได้จากแอดเดรสเริ่มต้นได้ กำหนดให้ LOC(a[i]) = ตำแหน่งแอดเดรสที่เก็บ a[i] ในหน่วยความจำ B = แอดเดรสเริ่มต้นของ a w = จำนวนช่องของหน่วยความจำที่จัดเก็บข้อมูลต่อ หนึ่งสมาชิก สูตรกำคำนวณคือ LOC (a[i]) = B + w(i-L)

  15. การจัดเก็บอาร์เรย์ในหน่วยความจำการจัดเก็บอาร์เรย์ในหน่วยความจำ • ตัวอย่าง อยากทราบว่า a[10] ถูกจัดเก็บไว้ในหน่วยความจำแอดเดรสใด กำหนดให้ Base Address = 1000 w = 1 ดังนั้น LOC(a[i]) = 1000 + 1(10-0) = 1010

  16. การจัดเก็บอาร์เรย์ในหน่วยความจำการจัดเก็บอาร์เรย์ในหน่วยความจำ • แสดงอาร์เรย์ a ที่จัดเก็บอยู่ภายในหน่วยความจำคอมพิวเตอร์ Array Base Address B 1000 B + w 1001 B + 2w 1002 B + w(i-L) B + 19w 1019 a[0] a[1] a[2] a[i] a[19]

  17. อาร์เรย์ 1 มิติ (One-Dimension Array) • รูปแบบการประกาศตัวแปร ชนิดข้อมูลชื่อตัวแปร [ขนาดของอาร์เรย์]; • เช่นfloat score[5]; int a[50]; char name[30]; long value[100]; • โดยที่ขนาดของอาร์เรย์ สามารถกำหนดเป็นตัวเลขจำนวนเต็มหรือค่าคงที่ก็ได้ (แต่เป็นตัวแปรไม่ได้)

  18. อาร์เรย์ 1 มิติ (One-Dimension Array) • การกำหนดค่าเริ่มต้นให้กับอาร์เรย์ 1 มิติ • สามารถกำหนดค่าเริ่มต้นให้กับ array ได้ตั้งแต่ตอนประกาศตัวแปร • ค่าที่กำหนดต้องอยู่ในเครื่องหมาย { } และถ้ามีมากกว่า 1 ค่า ต้องแยกจากกันด้วยเครื่องหมาย , (comma) • เช่นint A[5] = {10,20,30,40,50 } ;

  19. อาร์เรย์ 1 มิติ (One-Dimension Array) • ถ้าในตอนประกาศตัวแปรอาร์เรย์ไม่กำหนดค่าเริ่มต้นให้กับมันแล้ว ค่าที่อยู่ในตัวแปรจะเป็นค่าที่ค้างอยู่ในหน่วยความจำช่วงที่เราจองไว้เป็นอาร์เรย์นั้น • ถ้ากำหนดค่าเริ่มต้นตั้งแต่ตอนประกาศตัวแปรแต่กำหนดไม่ครบในกรณีที่เป็นอาร์เรย์แบบตัวเลขทั้งจำนวนเต็มและจำนวนจริง ค่าที่เหลือจะถูกกำหนดเป็น 0 โดยอัตโนมัติ

  20. อาร์เรย์ 1 มิติ (One-Dimension Array) • ตัวอย่าง เช่น • บางครั้งถ้ากำหนดค่าเริ่มต้นให้แก่อาร์เรย์เลย เราไม่จำเป็นต้องใส่ขนาดของอาร์เรย์ก็ได้ เช่น float a[ ] = {1,2,3,4,5} ; ความหมายคือ เป็นการกำหนดตัวแปรอาร์เรย์ของจำนวนจริงแบบ float ขนาด 5 ช่อง

  21. อาร์เรย์ 1 มิติ (One-Dimension Array) • แต่ถ้าเรากำหนดตัวแปรอาร์เรย์โดยไม่ใส่ขนาดของอาร์เรย์ และไม่ได้กำหนดค่าเริ่มต้นให้กับมัน เช่นint a[ ] ; ประกาศผิด!!! • นั่นคือ เราไม่สามารถประกาศตัวแปรอาร์เรย์โดยไม่ใส่ขนาดของอาร์เรย์ได้ ยกเว้นมีการกำหนดค่าเริ่มต้นให้กับมันตั้งแต่แรก

  22. ตัวแปร

  23. อาร์เรย์ 2 มิติ (Two-Dimension Array) • โครงสร้างอาร์เรย์ 2 มิติจะเป็นอาร์เรย์ของอาร์เรย์ 1 มิติ โดยสามารถอธิบายได้ในรูปแบบของตารางที่ประกอบด้วยแถว (row) และคอลัมน์ (column) เชิงคณิตศาสตร์ก็คือ เมตริกซ์ (Matrix) ชนิดข้อมูลชื่อตัวแปร [row][column]; เช่น int b[3][4];

  24. อาร์เรย์ 2 มิติ (Two-Dimension Array) • การกำหนดค่าเริ่มต้นให้กับอาร์เรย์ 2 มิติ • ตัวอย่างรูปแบบที่ 1intnum [2][3] ={11,12,13,21,22,23}; • ตัวอย่างรูปแบบที่ 2intnum [2][3] ={{11,12,13},{21,22,23}}; • ตัวอย่างรูปแบบที่ 3intnum [2][3] = {{11,12,13},{21,22,23}}; • โดยที่การประกาศตัวแปรทั้ง 3 รูปแบบให้ผลลัพธ์เหมือนกัน คือ

  25. อาร์เรย์ 2 มิติ (Two-Dimension Array) • ข้อสังเกต อาร์เรย์ขนาด 2 มิติขึ้นไป จะไม่ระบุขนาดได้เฉพาะมิติที่ 1 เท่านั้น ส่วนมิติอื่นๆ ต้องมีการระบุขนาดด้วยทุกครั้ง

  26. อาร์เรย์ 2 มิติ (Two-Dimension Array) • สำหรับการคำนวณหาจำนวนสมาชิกของอาร์เรย์ 2มิติ สามารถคำนวณได้จากสูตรนี้ จำนวนสมาชิก = (U1 – L1 + 1) x (U2 – L2 + 1) โดยที่ L1 คือ ขอบล่างสุด (Lower Bound) ของแถว U1 คือ ขอบบนสุด (Upper Bound) ของแถว L2 คือ ขอบล่างสุด (Lower Bound) ของคอลัมน์ U2 คือ ขอบบนสุด (Upper Bound) ของคอลัมน์

  27. อาร์เรย์ 2 มิติ (Two-Dimension Array) • ตัวอย่าง int [5][4]; จำนวนสมาชิก = (4-0+1) x (3-0+1) = 5 x 4 = 20

  28. อาร์เรย์ 2 มิติ (Two-Dimension Array) • การจัดเก็บอาร์เรย์ 2 มิติในหน่วยความจำยังสามารถจัดเก็บได้ 2 วิธี คือ • 1. การจัดเก็บด้วยการเรียงแถวเป็นหลัก (Row Major Order) • 2. การจัดเก็บด้วยการเรียงคอลัมน์เป็นหลัก (Column Major Order)

  29. อาร์เรย์ 2 มิติ (Two-Dimension Array) • การจัดเก็บด้วยการเรียงแถวเป็นหลัก (Row Major Order) • สูตรการคำนวณ LOC (a[i,j]) = B+w[C(i-L1)+(j-L2) โดยที่ C คือจำนวนคอลัมน์ของแถวลำดับ (RxC)

  30. อาร์เรย์ 2 มิติ (Two-Dimension Array) • ตัวอย่าง ต้องการทราบตำแหน่ง แถวที่ 2 คอลัมน์ที่ 1 โดยที่ B=500, w=4 จากแบบอาร์เรย์ 2 มิติ K [L1,U1][L2,U2] ได้มีการประกาศตัวแปรอาร์เรย์ด้วยภาษา C ดังนี้ K[4][3] ผลที่ได้ อาร์เรย์ K=K[0:3][0:2] LOC(K[2,1] = 500 + 4[3(2-0)+(1-0)] = 500 + 4[6+1] = 500 + 28 = 528 ดังนั้นอาร์เรย์ K แถวที่ 2 คอลัมน์ที่ 1 จัดเก็บอยู่ในตำแหน่งแอดเดรสที่ 528

  31. อาร์เรย์ 2 มิติ (Two-Dimension Array) • กรณีการจัดเก็บอาร์เรย์สองมิติในหน่วยความจำด้วยการเรียงแถวเป็นหลัก การจัดเรียงจะเริ่มต้นตั้งแต่แถวแรกและเรียงลำดับต่อไปในแต่ละคอลัมน์จนครบ จากนั้นก็ขึ้นแถวใหม่ไปเรื่อยๆ จนกระทั่งแถวสุดท้าย • ตัวอย่าง int K[4][3]; • โดยที่ B = 500 , w = 4

  32. อาร์เรย์ 2 มิติ (Two-Dimension Array) Base Address Array K[0][0] K[0][1] K[0][2] K[1][0] K[1][1] K[1][2] K[2][0] K[2][1] K[2][2] K[3][0] K[3][1] K[3][2] B 500 B + w 504 B + 2w 508 . 512 . 516 . 520 B+[C(i-L1)+(i- L2) 524 . 528 . 532 . 536 B + 10w 540 B + 11w 544 Row 0 Row 1 Row 2 Row 3

  33. อาร์เรย์ 2 มิติ (Two-Dimension Array) • การจัดเก็บด้วยการเรียงคอลัมน์เป็นหลัก (Column Major Order) • สูตรการคำนวณ LOC (a[i,j]) = B+w[R(j-L2)+(i-L1) โดยที่ Rคือจำนวนแถวของแถวลำดับ (RxC)

  34. อาร์เรย์ 2 มิติ (Two-Dimension Array) • ตัวอย่าง ต้องการทราบตำแหน่ง แถวที่ 2 คอลัมน์ที่ 1 โดยที่ B=500, w=4 จากแบบอาร์เรย์ 2 มิติ K [L1,U1][L2,U2] ได้มีการประกาศตัวแปรอาร์เรย์ด้วยภาษา C ดังนี้ K[4][3] ผลที่ได้ อาร์เรย์ K=K[0:3][0:2] LOC(K[2,1] = 500 + 4[4(1-0)+(2-0)] = 500 + 4[4+2] = 500 + 24 = 524 ดังนั้นอาร์เรย์ K แถวที่ 2 คอลัมน์ที่ 1 จัดเก็บอยู่ในตำแหน่งแอดเดรสที่ 524

  35. อาร์เรย์3 มิติ (Three-Dimension Array) • อาร์เรย์สามมิติ คือ การนำอาร์เรย์ สองมิติมาเรียงซ้อนกันหลายๆ ชั้น (page) ทำให้อาร์เรย์สามมิติ นอกจากจะมีคอลัมน์และแถวแล้ว ก็จะมีความลึกเพิ่มขึ้น ความลึกนี้เองที่เกิดจากการนำอาร์เรย์สองมิติมาเรียงซ้อนกัน

  36. อาร์เรย์3 มิติ (Three-Dimension Array) ArrayName [L1:U1,L2:U2, L3:U3]; L1 คือ ขอบล่างสุด (Lower Bound) ของชั้น U1 คือ ขอบบนสุด (Upper Bound) ของชั้น L2 คือ ขอบล่างสุด (Lower Bound) ของแถว U2 คือ ขอบบนสุด (Upper Bound) ของแถว L3 คือ ขอบล่างสุด (Lower Bound) ของคอลัมน์ U3 คือ ขอบบนสุด (Upper Bound) ของคอลัมน์

  37. อาร์เรย์3 มิติ (Three-Dimension Array) • ตัวอย่าง สมมติว่าได้มีการกำหนดให้ A[3,4,5] ด้วยภาษา C intA[3][4][5] สมาชิกแต่ละตัวบนแถวลำดับสามมิติสามารถกำหนดได้ คือ A[0,0,0], A[0,0,1], A[i,j,k], … , A[2,3,4]

  38. อาร์เรย์3 มิติ (Three-Dimension Array) • การคำนวณหาสมาชิก N = (U1 – L1 + 1) x (U2 – L2 + 1) x (U3– L3+ 1) • หรือ จำนวนสมาชิก = P x R x C โดยที่ P = จำนวนชั้น R = จำนวนแถว C = จำนวนคอลัมน์

  39. อาร์เรย์3 มิติ (Three-Dimension Array) • การจัดเก็บอาร์เรย์ 3 มิติในหน่วยความจำยังสามารถจัดเก็บได้ 2 วิธี คือ • 1. การจัดเก็บด้วยการเรียงแถวเป็นหลัก (Row Major Order) • 2. การจัดเก็บด้วยการเรียงคอลัมน์เป็นหลัก (Column Major Order)

  40. อาร์เรย์3 มิติ (Three-Dimension Array) • การจัดเก็บด้วยการเรียงแถวเป็นหลัก (Row Major Order) • สูตรการคำนวณ LOC (a[i,j,k]) = B+[w x R x C(i-L1)]+[w x C(j-L2)]+[w(k-L3)]

  41. อาร์เรย์3 มิติ (Three-Dimension Array) • ตัวอย่าง อาร์เรย์สามมิติชื่อ a จัดเก็บในหน่วยความจำในรูปแถวเป็นหลัก ต้องการทราบตำแหน่งแอดเดรสที่เก็บข้อมูลอาร์เรย์ a ชั้นที่ 0 แถวที่ 3 คอลัมน์ 4 โดยที่ B=500, w=4 จากแบบอาร์เรย์ 3 มิติ K [L1,U1][L2,U2][L3,U3] ได้มีการประกาศตัวแปรอาร์เรย์ด้วยภาษา C ดังนี้ a[3][4][5] ผลที่ได้ อาร์เรย์ a=a[0:2][0:3][0:4]

  42. อาร์เรย์3 มิติ (Three-Dimension Array) จากสูตร LOC (a[i,j,k]) = B+[w x R x C(i-L1)] +[w x C(j-L2)]+[w(k-L3)] LOC (a[0,3,4]) = 500+[4 x 4 x 5(0-0)]+[4 x 5(3-0)]+[4(4-0)] = 500 + 0 + 60 + 16 = 576 ดังนั้นอาร์เรย์ a ชั้นที่ 0 แถวที่ 3 คอลัมน์ 4 จัดเก็บอยู่ในตำแหน่งแอดเดรสที่ 576

  43. อาร์เรย์3 มิติ (Three-Dimension Array) • การจัดเก็บด้วยการเรียงคอลัมน์เป็นหลัก (Column Major Order) • สูตรการคำนวณ LOC (a[i,j,k]) = B+[w x R x C(i-L1)]+[w x R(j-L2)]+[w(k-L3)]

  44. อาร์เรย์3 มิติ (Three-Dimension Array) • ตัวอย่าง อาร์เรย์สามมิติชื่อ a จัดเก็บในหน่วยความจำในรูปคอลัมน์เป็นหลัก ต้องการทราบตำแหน่งแอดเดรสที่เก็บข้อมูลอาร์เรย์ a ชั้นที่ 0 แถวที่ 3 คอลัมน์ 4 โดยที่ B=500, w=4 จากแบบอาร์เรย์ 3 มิติ K [L1,U1][L2,U2][L3,U3] ได้มีการประกาศตัวแปรอาร์เรย์ด้วยภาษา C ดังนี้ a[3][4][5] ผลที่ได้ อาร์เรย์ a=a[0:2][0:3][0:4]

  45. อาร์เรย์3 มิติ (Three-Dimension Array) จากสูตร LOC (a[i,j,k]) = B+[w x R x C(i-L1)] +[w x R(j-L2)]+[w(k-L3)] LOC (a[0,3,4]) = 500+[4 x 4 x 5(0-0)]+[4 x 4(3-0)]+[4(4-0)] = 500 + 0 + 12 + 16 = 528 ดังนั้นอาร์เรย์ a ชั้นที่ 0 แถวที่ 3 คอลัมน์ 4 จัดเก็บอยู่ในตำแหน่งแอดเดรสที่ 528

More Related