๐Ÿ“˜ Data Structure w/ hoonnotes

[meษช]ยท2022๋…„ 3์›” 29์ผ
0

3. Today I Learned. Basic

๋ชฉ๋ก ๋ณด๊ธฐ
11/11

Preface

๐Ÿ“Œ ๊ฐœ๋ฐœ ๊ณต๋ถ€ 9๊ฐœ์›” ์ฐจ์ธ to-be ๊ฐœ๋ฐœ์ž์˜ ์ž์Šต blog๐Ÿ™‚๏พ Mar 27 ~ 02, 2022


ํ˜„์žฌ ์ƒํƒœ
๊ฐ„๋‹จ ๊ฐœ๋…์— ๋”ํ•ด ๊นŠ์ด ์žˆ๋Š” ๋‚ด์šฉ ํ•™์Šต ์‹œ์ž‘ 1


Summary

์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ†ตํ•ด code๊ฐ€ ๋™์ž‘๋  ๋•Œ์˜ ๊ตฌ๋™ ์†๋„๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋น ๋ฅธ์ง€, ์–ผ๋งˆ๋‚˜ memory ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ JavaScript๋กœ๋Š” ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‹ค๋ฃจ๊ธฐ์— ์ ์ ˆํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋งŒ ๋‹ค๋ฃจ๊ธฐ๋กœ ํ•œ๋‹ค.

๐Ÿงโ“ ์™œ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๋‹ค๋ฃจ๊ธฐ์— ์ ์ ˆํ•˜์ง€ ์•Š์ง€? JavaScript๋Š” memory ์‚ฌ์šฉ๊ฐ™์€ ๊ฑธ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ JavaScript๊ฐ€ ์•Œ์•„์„œ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ๊ฐ€? ๐Ÿง

Big-O Notation

code์˜ ํšจ์œจ์„ฑ์„ ์ˆ˜ํ•™์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
ref. ฮฉ (omega), ฮ˜ (theta), ฮŸ (omicron)
์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋„์ถœํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์–ด๋””์— ์žˆ๋Š”์ง€, ์–ด๋–ป๊ฒŒ ์ฐพ๋Š”์ง€์— ๋”ฐ๋ผ best case์™€ worst case๊ฐ€ ์žˆ๋Š”๋ฐ Big-ฮŸ๋Š” worst case๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

๐Ÿงโ“ ์„ค๋ช…์ด ๋‹ค๋ฅด๋‹ค. ๋…ธ๋งˆ๋“œ ์ฝ”๋”๋‹˜์€ ํ‰๊ท ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ! ๋‹ค๋ฅธ ์„ค๋ช…์„ ์ฐพ์•„๋ณด๋‹ˆ

  • best case : Big-ฮฉ Notation
  • average case : Big-ฮ˜ Notation
  • worst case : Big-O Notation

๋ผ๊ณ  ํ•˜๋ฉฐ ๊ฐ€๋Šฅํ•˜๋ฉด worst casee๋ฅผ ๊ธฐ์ค€์œผ๋กœ programmingํ•˜๋Š” ๊ฒƒ์ด ๋งŒ์•ฝ์„ ๋Œ€๋น„ํ•˜๊ธฐ ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. ๐Ÿง

์šด์ด ์ข‹๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋„์ถœํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์‹ค์ œ service๋ฅผ ๊ตฌํ˜„ํ•  ๋• ๋ณด์ˆ˜์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๊ธฐ ๋•Œ๋ฌธ์— worst case๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

โ€ป ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒ์ˆ˜๋Š” ๋ฌด์‹œํ•œ๋‹ค.
ย ย ย ย e.g. O(2N) โ†’ O(N), O(Nโด) โ†’ O(Nยฒ)

(1) O(N)

input (๋ฌธ์ œ์˜ ํฌ๊ธฐ) ๋งŒํผ ์†Œ์š” ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚œ๋‹ค.
ref. arr.shift(), arr.unshift(), arr.splice()

// ๐ŸŽต n๋งŒํผ ์‹คํ–‰
const logItems = (n) => {
  for (let i = 0; i < n; i++) {
    console.log(i);
  }
};

logItems(7);

// โฌ‡๏ธ Output
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// ๐ŸŽต 2n๋งŒํผ ์‹คํ–‰
const logItems = (n) => {
  for (let i = 0; i < n; i++) {
    console.log(i);
  }
  for (let j = 0; j < n; j++) {
    console.log(j);
  }
};

logItems(7);

// โฌ‡๏ธ Output
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 0
// 1
// 2
// 3
// 4
// 5
// 6

(2) O(Nยฒ)

input (๋ฌธ์ œ์˜ ํฌ๊ธฐ) ๋งŒํผ ์†Œ์š” ์‹œ๊ฐ„์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚œ๋‹ค.
๋น„ํšจ์œจ์ ์ธ ํ’€์ด๋ฒ•์ด๋‹ค.

// ๐ŸŽต 4^2 (4*4) ๋งŒํผ ์‹คํ–‰ (n^2 (n*n))
const logItems = (n) => {
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      console.log(i, j);
    }
  }
};

logItems(4);

// โฌ‡๏ธ Output
// 0 0
// 0 1
// 0 2
// 0 3
// 1 0
// 1 1
// 1 2
// 1 3
// 2 0
// 2 1
// 2 2
// 2 3
// 3 0
// 3 1
// 3 2
// 3 3
// ๐ŸŽต 4^3 (4*4*4) ๋งŒํผ ์‹คํ–‰ (n^3 (n*n*n))
const logItems = (n) => {
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      for (let k = 0; k < n; k++) {
        console.log(i, j, k);
      }
    }
  }
};

logItems(4);

// โฌ‡๏ธ Output
// 0 0 0
// 0 0 1
// 0 0 2
// 0 0 3
// 0 1 0
// 0 1 1
// 0 1 2
// 0 1 3
// ... (๋„ˆ๋ฌด ๊ธธ์–ด์„œ ์ƒ๋žต)
// 3 2 0
// 3 2 1
// 3 2 2
// 3 2 3
// 3 3 0
// 3 3 1
// 3 3 2
// 3 3 3

ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์— O(Nยฒ)์™€ O(N)์ด ํ•จ๊ฒŒ ์žˆ์–ด 'O(Nยฒ)+O(N)'์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ, ์ž๋ฃŒ๊ฐ€ ํด ์ˆ˜๋ก O(Nยฒ)์˜ ์˜ํ–ฅ์ด ํฌ๋ฏ€๋กœ O(N)์„ ์ƒ๋žตํ•˜๊ณ  O(Nยฒ)๋กœ๋งŒ ํ‘œ๊ธฐํ•œ๋‹ค.

// ๐ŸŽต O(Nยฒ)+O(N) โ†’ O(Nยฒ)
const logItems = (n) => {
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      console.log(i, j);
    }
  }
  for (let k = 0; k < n; k++) {
    console.log(k);
  }
};

logItems(4);

(3) O(1)

์ˆซ์ž๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ปค์ง€๋“  ํ•œ ๋ฒˆ์˜ ์ž‘์—…๋งŒ ํ•˜๋Š” logic์ด๋‹ค.
e.g. (JavaScript๋Š” ์•„๋‹ˆ์ง€๋งŒ) arr.get[3] : index 3์— ํ•ด๋‹นํ•˜๋Š” ์›์†Œ ์ฐพ๊ธฐ
constant๋ผ๊ณ ๋„ ํ‘œ๊ธฐํ•œ๋‹ค.
๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
ref. arr.push(), arr.pop()

// ๐ŸŽต ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐ
const addItems = (n) => {
  return n + n;
};

addItems(4);

(4) O(logN)

๋„ค ๊ฐ€์ง€ ์ค‘ O(1) ๋‹ค์Œ์œผ๋กœ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋‹ค.
e.g. logโ‚‚1,073,741,824๋ฅผ 31ํšŒ๋งŒ์— ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.


Doubly Linked List

LinkedList๋Š” head์™€ tatil์„ pointer๋กœ??? ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค??? ๊ทธ๋ž˜์„œ class์˜ pointer ๊ฐœ๋…์ด ํ•„์š”ํ•œ ๊ฑฐ์ž„

๊ฐ’์ด 7 ํ•˜๋‚˜๋งŒ ์žˆ์„ ๋•Œ

class Node {
  constructor (value) {
    this.value = value;
    this.next = null;
  }
}

class Node {
  constructor (value) {
    this.value = value;
    this.prev = null;
    this.next = null;
  }
}

class DbLinkedList {
  constructor (value) {
    const newNode = new Node (Value);
    this.head = newNode;
    this.tail = this.head;
    this.length = 1;
  }
}



Endnote

์†Œํ”„ํŠธ์›จ์–ด ์–ดํœ˜๋‹ค์ง€๊ธฐ - ์ค‘๋“ฑ - ์‹œ๊ฐ„ ๋ณต์žก๋„

๐Ÿ™‡ the source of this content

hoonnotes - [์ž๋ฃŒ๊ตฌ์กฐ]

profile
๋Š๋ ค๋„ ํ•  ๊ฑฐ์•ผ.......

0๊ฐœ์˜ ๋Œ“๊ธ€