[์ž๋ฃŒ๊ตฌ์กฐ] 2. ๋ฐฐ์—ด

1. ๋ฐฐ์—ด์˜ ์ •์˜

๐Ÿ’ก
๋ฐฐ์—ด : ์ผ์ •ํ•œ ์ฐจ๋ก€์™€ ๊ฐ„๊ฒฉ์— ๋”ฐ๋ผ ๋ฒŒ์—ฌ ๋†“์€ ์ž๋ฃŒํ˜•

1.1 ๋ฐฐ์—ด์˜ ์ •์˜

์ธ๋ฑ์Šค์™€ ์›์†Œ๊ฐ’(index, value) ์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ์œผ๋กœ ์ •์˜๋œ ๊ฐ ์ธ๋ฑ์Šค๋Š” ๊ทธ ์ธ๋ฑ์Šค์™€ ๊ด€๋ จ๋œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

1.2 ๋ฐฐ์—ด์˜ ํŠน์„ฑ

  1. ์›์†Œ๋“ค์ด ๋ชจ๋‘ ๊ฐ™์€ ์ž๋ฃŒํ˜•, ์ฆ‰ ๋™์งˆ์˜ ๊ฐ’๊ณผ ๊ธฐ์–ต ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ™๋‹ค.
  1. ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์œ„์น˜(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)์˜ ์ˆœ์„œ๊ฐ€ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ์ˆœ์„œ(๋…ผ๋ฆฌ์  ์ˆœ์„œ) ์™€ ์ผ์น˜ํ•œ๋‹ค.
  1. ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ์ด์šฉํ•ด์„œ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ’์— ์ง์ ‘ ์ ‘๊ทผ(direct access) ํ•œ๋‹ค.

 

๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋Š” ์‚ฌ๋žŒ(๊ฐœ๋ฐœ์ž)๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์˜ํ•œ (์ถ”์ƒํ™”) ๊ฐ’์ด๋‹ค.

 

๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ์›์†Œ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ O(1)๋กœ ๋‘๋Š” ์ด์œ ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋Š” ๋ฐฐ์—ด์ด ์‹œ์ž‘ ์ฃผ์†Œ๋กœ๋ถ€ํ„ฐ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๊ฒƒ ์ด์—ˆ์Œ.

 

2. ๋ฐฐ์—ด ์ถ”์ƒ ์ž๋ฃŒํ˜•

ADT Array

  • objects: <i∈\in Index, e∈\in Element> ์Œ๋“ค์˜ ์ง‘ํ•ฉ. ์—ฌ๊ธฐ์„œ Index๋Š” ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์›์†Œ์˜ ์œ ํ•œ์ง‘ํ•ฉ์ด๊ณ  Element๋Š” ํƒ€์ž…์ด ๊ฐ™์€ ์›์†Œ์˜ ์ง‘ํ•ฉ
  • ๋ฐฐ์—ด ๊ฐ์ฒด์˜ ์ •์˜: <i∈\in Index, e∈\in Element> ์Œ๋“ค์˜ ์ง‘ํ•ฉ์ด๋ฉฐ, Index๋Š” ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๊ฐ’์ด๊ณ  Element๋Š” ๊ฐ™์€ ์ž๋ฃŒํ˜•์˜ ์›์†Œ๊ฐ’
  • ์—ฐ์‚ฐ: a∈\in Array; i∈\in Index; x, item∈\inElement; n∈\inInteger์ธ ๋ชจ๋“  a, item, n์— ๋Œ€ํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ์ •์˜๋œ๋‹ค.(a๋Š” 0๊ฐœ ์ด์ƒ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด, item์€ ๋ฐฐ์—ด์— ์ €์žฅ๋˜๋Š” ์›์†Œ, n์€ ๋ฐฐ์—ด์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ •ํ•˜๋Š” ์ •์ˆ˜๊ฐ’)
    1. Array create(n) → ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ n์ธ ๋นˆ ๋ฐฐ์—ด์„ ์ƒ์„ฑ ํ›„ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜.
    1. Element retrieve(a, i)if i∈\in Index:else ์ธ๋ฑ์Šค i๊ฐ€ ๋ฐฐ์—ด a์˜ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜
    2. then ๋ฐฐ์—ด a์˜ i๋ฒˆ์งธ ์œ„์น˜์˜ ์›์†Œ๊ฐ’ 'e' ๋ฐ˜ํ™˜
    1. Array store(a, i, e)if i∈\in Index:else ์ธ๋ฑ์Šค i๊ฐ€ ๋ฐฐ์—ด a์˜ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜
    2.  
    3. then ๋ฐฐ์—ด a์˜ i๋ฒˆ์งธ ์œ„์น˜์— ์›์†Œ๊ฐ’ 'e'๋ฅผ ์ €์žฅ ํ›„ ๋ฐฐ์—ด a๋ฅผ ๋ฐ˜ํ™˜

3. ๋ฐฐ์—ด์˜ ์—ฐ์‚ฐ์˜ ๊ตฌํ˜„

๋ฐฐ์—ด ์ถ”์ƒ ์ž๋ฃŒํ˜•์˜ ์—ฐ์‚ฐ์„ ์š”์•ฝ

  1. create: ๋ฐฐ์—ด์„ ๊ณต๋ฐฑ ๋ฐฐ์—ด๋กœ ์ƒ์„ฑ
  1. retrieve: i ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์›์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ฐ์‚ฐ
  1. store: ์›ํ•˜๋Š” ์œ„์น˜ i๋ฒˆ์งธ ์ธ๋ฑ์Šค์— e ์›์†Œ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์—ฐ์‚ฐ

 

3.1 C๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ - create

void create(int n) {
		
		int arr[n];
		int i;
		for(i=0, i<n, i++) {
				a[i] = 0;
		}
}

3.2 C๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ - retrieve

#define array_size 5
int retrieve(int *a, int i) {
		if(i >= 0 && i < array_size) return a[i];
		else {
				printf("Not exist index Exception");
				return -1;
		}
}

3.3 C๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ - store

#define array_size 5
void store(int *a, int i, int e) {
		if(i >= 0 && i < array_size) a[i] = e;
		else {
				printf("Not exist index Exception");
		}

4. 1์ฐจ์› ๋ฐฐ์—ด

ํ•œ ์ค„์งœ๋ฆฌ ๋ฐฐ์—ด์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๋„ ํ•œ ์ค„๋กœ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ์›์†Œ A[0]์˜ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์ž‘์ฃผ์†Œ๋ฅผ ๋ผ๊ณ  ํ•˜๊ณ  ๊ฐ ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ k๋ฅผ ์•Œ๋ฉด ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ์„ ํ†ตํ•ด A[i]์˜ ์ฃผ์†Œ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก
A[i] Memory address = a+i×ka + i \times k

5. ๋ฐฐ์—ด์˜ ํ™•์žฅ

  • 1์ฐจ์› ๋ฐฐ์—ด์˜ ํ™•์žฅ์€ 2์ฐจ์› ๋ฐฐ์—ด์ด๋‹ค. ํ•˜์ง€๋งŒ ํ™•์žฅ ๋ฐฉ๋ฒ•์— ์žˆ์–ด์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    1. ํ–‰์šฐ์„  (raw-major) ํ™•์žฅ
      ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น a[0][0] → a[0][1] → ... → a[1][0] → ...
    1. ์—ด์šฐ์„  (column-major) ํ™•์žฅ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น a[0][0] → a[1][0] → ... → a[0][1] → ....

 

  • C์–ธ์–ด์—์„œ๋Š” 2์ฐจ์› ๋ฐฐ์—ด ์„ ์–ธ ์‹œ ํ–‰์šฐ์„ ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.

6. ํฌ์†Œํ–‰๋ ฌ์˜ ๊ฐœ๋…

  • ํ–‰๋ ฌ ๋‚ด๋ถ€์— ๊ฐ€๋น„์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์„ ๊ฒฝ์šฐ ํ–‰๋ ฌ์„ ์ถ”์ƒํ™” ํ•˜์—ฌ ์œ ํšจ ๋ฐ์ดํ„ฐ์˜ ํ–‰๋ฒˆํ˜ธ, ์—ด๋ฒˆํ˜ธ, ์›์†Œ๊ฐ’์˜ ํ˜•ํƒœ๋กœ ์ƒˆ๋กœ์šด ํ–‰๋ ฌ์„ ์ถ”์ถœํ•ด๋‚ธ ๊ฒƒ0 8 9 102 0 7 11....
  •  
  • 8 x 9 ํ–‰๋ ฌ ๋‚ด๋ถ€์— ์žˆ๋Š” ์œ ํšจ๋ฐ์ดํ„ฐ 10๊ฐœ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•œ ํ–‰๋ ฌ (๋‚˜๋จธ์ง€๋Š” ๋‹ค ๊ฐ€๋น„์ง€ ๋ฐ์ดํ„ฐ)
  • 3 2 0 11
  • 1 0 4 9