Object & Array
Big O of object
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ข์ ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ ๋ ฌํ ํ์๊ฐ ์์ ๋
- ๋น ๋ฅธ ์ ๊ทผ / ์ฝ์ / ์ญ์ ๊ฐ ํ์ํ ๋
๊ฐ์ฒด์ Big O
ํ์ -O(N)
์ฝ์ -O(1)
์ญ์ -O(1)
์ ๊ทผ -O(1)
ํ์์ด O(N)
์ ๋ฐ๋ฅด๋ ์ด์ ๋ ํน์ ํ ์ ๋ณด๊ฐ ์ด๋ค ๊ฐ์ ์๋์ง ํ์ธํ๊ธฐ ๋๋ฌธ์ด๋ค.
const information = {
name: 'Shoupeach',
isApeach: true,
favoriteNumbers: [4, 8]
};
information
์ด๋ ๊ฐ์ฒด๊ฐ ์กด์ฌํ ๋ ์ฌ๊ธฐ์ true
๋ผ๋ ๊ฐ์ด information
์์ ์ด๋์ ์ ์ฅ๋์ด ์๋์ง ์๊ธฐ ์ํด์ ๋จผ์ name
์ ํ์ธํ๊ณ ๊ฐ์ ํ์ธํ๋ค.
name
์ ๊ฐ์ Shoupeach
์ด๊ธฐ ๋๋ฌธ์ ํต๊ณผํ ๋ค isApeach
๋ฅผ ํ์ธํ๊ณ ๊ฐ์ ํ์ธํ๋ค.
isApeach
์ ๊ฐ์ true
์ด๊ธฐ ๋๋ฌธ์ ์ข
๋ฃ๋๋ค.
์ง๊ธ์ ๊ฐ์ฒด ์์ key-value ์์ด 3๊ฐ ๋ฐ์ ์์ง๋ง, ๊ฐ์ฒด ๋ด๋ถ์ ์์ฑ์ด ๋ง์์๋ก (N
์ด ์ปค์ง์๋ก) ํ์ธํด์ผ ํ๋ key๊ฐ ๋ง์์ง๊ธฐ ๋๋ฌธ์ O(N)
์ ๋ฐ๋ฅด๊ฒ ๋๋ค.
Big O of object methods
๊ฐ์ฒด ๋ฉ์๋์ Big OhasOwnProperty
-O(1)
Object.keys
-O(N)
Object.values
-O(N)
Object.entries
-O(N)
Object.keys
Object.keys(information);
// ["name", "isApeach", "favoriteNumbers"]
Object.keys
๋ key๊ฐ ๋ค์ด์๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
key๊ฐ ๋์ด๋ ์๋ก (N
์ด ์ปค์ง์๋ก) ๊ฐ key๋ค์ ์ ๊ทผํด์ ๋ฐฐ์ด์ ์ถ๊ฐํด์ผํ๊ธฐ ๋๋ฌธ์ O(N)
์ ๋ฐ๋ฅธ๋ค.
Object.values
Object.values(information);
// ["Shoupeach", true, [4, 8]];
Object.values
๋ ๋ง์ฐฌ๊ฐ์ง๋ก N
์ด ์ปค์ง์๋ก ๋ฐํ๋๋ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ์ ํ์ ์ผ๋ก ๋์ด๋๋ฏ๋ก O(N)
์ ๋ฐ๋ฅธ๋ค.
Object.entries(information);
// [["name", "Shoupeach"], ["isApeach", true], ["favoriteNumbers", [4, 8]]
Object.entries
๋ ๋ง์ฐฌ๊ฐ์ง๋ก N
์ด ์ปค์ง์๋ก ๋ฐํ๋๋ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ์ ํ์ ์ผ๋ก ๋์ด๋๋ฏ๋ก O(N)
์ ๋ฐ๋ฅธ๋ค.
hasOwnProperty
information.hasOwnProperty("name");
// true
hasOwnProperty
๋ ์ ๋ฉ์๋๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ ์ ๊ทผ์ ๊ฐ๋
์ด๊ธฐ ๋๋ฌธ์ O(1)
์ ๋ฐ๋ฅธ๋ค.
Big O of array
๋ฐฐ์ด์ ๊ฐ์ฒด์๋ ๋ค๋ฅด๊ฒ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์๋ค.
์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฐ์ฐ์ ํ๋๋ฐ ์๊ฐ์ด ๋ ๊ฑธ๋ฆด ์ ์๋ค. ๐ซ
๋ฐฐ์ด์ ์ฌ์ฉํ๊ธฐ ์ข์ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ๋
- ๋น ๋ฅธ ์ ๊ทผ์ด ํ์ํ ๋
๋ฐฐ์ด์ Big O
์ ๊ทผ -O(1)
ํ์ -O(N)
์ฝ์ - ์ฝ์ ์์น์ ๋ฐ๋ผ ๋ค๋ฆ
์ญ์ - ์ญ์ ์์น์ ๋ฐ๋ผ ๋ค๋ฆ
JavaScript๊ฐ ๋ฐฐ์ด์ ์ ๊ทผํ ๋, ์์๊ฐ 10000๊ฐ ์๋ ๋ฐฐ์ด์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ arr[9000]
์ ํธ์ถํ๋ฉด 0๋ถํฐ 9000๊น์ง์ ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ํ์ํ๋ ๊ฒ์ด ์๋๋ค.
9000๋ฒ์ ์ธ๋ฑ์ค์ ๋ฐ๋ก ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๊ทผ์ O(1)
์ ๋ฐ๋ฅธ๋ค.
Insertion
const names = ["Shoupeach", "Rabbit", "Ogu"];
names
๋ฐฐ์ด ๋์ Namazuo
๋ผ๋ ์ด๋ฆ์ ๋ฃ๊ณ ์ถ๋ค๋ฉด push
๋ฅผ ํ๋ฉด ๋๋ค.
push
๋ ๋ฐฐ์ด ๋์ ์ถ๊ฐํ๊ณ ์ธ๋ฑ์ค๋ฅผ ์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ์๋ก์ด key-value ์์ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ O(1)
์ ๋ฐ๋ฅธ๋ค.
Namazuo
๋ฅผ ๋ฐฐ์ด์ ๋งจ ์์ ์ถ๊ฐํ๊ฒ ๋๋ฉด ๊ธฐ์กด์ ์๋ ์์๋ค์ ์ธ๋ฑ์ค๊ฐ ๋ฌ๋ผ์ ธ๋ฒ๋ฆฐ๋ค.
๋ฐฐ์ด์ ์๋ ์์๋ง๋ค ์๋ก์ด ์ธ๋ฑ์ค๋ฅผ ๋ฐฐ์ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ์์๊ฐ ๋ง์์๋ก (N
์ด ์ปค์ง์๋ก) ์์
๋๋ ๋ง์์ง๋ค.
๋ฐ๋ผ์ unshift
๋ O(N)
์ ๋ฐ๋ฅธ๋ค.
removal
๋ฐฐ์ด์ ์์๋ฅผ ์ญ์ ํ๋ ๊ฒ๋ ์ฝ์ ์ ๊ฒฝ์ฐ์ ๊ฐ๋ค.
names
๋ฐฐ์ด ๋์ ์ฝ์
ํ Namazuo
๋ฅผ ์ญ์ ํ๊ณ ์ถ๋ค๋ฉด pop
์ ํ๋ฉด ๋๋ค.
pop
์ ๋์ ์ถ๊ฐํ ์์์ ์ธ๋ฑ์ค๋ฅผ ์์ ๋ฉด ๋๊ธฐ ๋๋ฌธ์ O(1)
์ ๋ฐ๋ฅธ๋ค.
๋งจ ์์ ์ถ๊ฐํ Namazuo
๋ฅผ ์์ ๊ฒ ๋๋ฉด unshift
์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฐ์ด์ ๋จ์์๋ ์์๋ค์ ์ธ๋ฑ์ค๊ฐ ๋ฌ๋ผ์ง๋ค.
N
์ด ์ปค์ง์๋ก ์ธ๋ฑ์ค๋ฅผ ์์ ํ๋ ์์
๋๋ ๋ง์์ง๊ธฐ ๋๋ฌธ์ shift
๋ํ O(N)
์ ๋ฐ๋ฅธ๋ค.
๋น ๋ฐฐ์ด์push
,pop
/unshift
,shift
๋ฅผ ํ๋ ๊ฒฝ์ฐ
๋ฐฐ์ด์ด ๋น์ด์๋๋ฐ ๋งจ ์๊ณผ ๋งจ ๋ค์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ๋ ๊ฒ์ ๋๊ฐ๊ธฐ ๋๋ฌธ์O(1)
์ ๋ฐ๋ฅธ๋ค.
Big O of array methods
๋ฐฐ์ด ๋ฉ์๋์ Big O
~ ์ ๋ถ ์๊ธฐํ ํ์๋ ์๋ค ๐ต ~push
-O(1)
pop
-O(1)
unshift
-O(N)
shift
-O(N)
concat
-O(N)
slice
-O(N)
splice
-O(N)
sort
-O(NใN)
forEach
/map
/filter
/reduce
/ etc. -O(N)
concat
const arr1 = ['a', 'b', 'c'];
const arr2 = ['d', 'e', 'f', 'g'];
arr1.concat(arr2);
// ["a", "b", "c", "d", "e", "f", "g"]
N
๊ฐ์ ์์๊ฐ ์๋ ๋ฐฐ์ด์ M
๊ฐ์ ์์๊ฐ ์๋ ๋ฐฐ์ด์ ๊ฒฐํฉํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ O(N+M)
์ธ๋ฐ ๋จ์ํ ํ๋ฉด ๊ฒฐ๊ตญ O(N)
์ด๋ค.
slice & splice
const animals = ['rabbit', 'ogu', 'elephant', 'hippo'];
animals.slice(2);
// ["elephant", "hippo"]
animals.splice(1, 0, 'dolphin');
// ["rabbit", "dolphin", "ogu", "elephant", "hippo"]
slice
๋ ๋ฐฐ์ด์ ๋ณต์ฌํ๋ ๋ฉ์๋๋ก ๋ณต์ฌ๋ฅผ ํ๊ณ ์ ํ๋ ์์๊ฐ ๋์ด๋จ์ ๋ฐ๋ผ (N
์ด ์ปค์ง์๋ก) ์๊ฐ์ด ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ O(N)
์ ๋ฐ๋ฅธ๋ค.
splice
๋ unshift
์ shift
์ฒ๋ผ ๊ธฐ์กด ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ณ๊ฒฝํด์ผํ๊ธฐ ๋๋ฌธ์ O(N)
์ ๋ฐ๋ฅธ๋ค.
sort
animals.sort();
// ["elephant", "hippo", "ogu", "rabbit"]
sort
๋ ๋น๊ต๋ ํด์ผํ๊ณ ์์์ ์ด๋๋ ํ์ํ๋ค.
์ผ๋จ ์์์ผ ํ ๊ฒ์ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ ๊ฒ์ด O(N)
๋ณด๋ค๋ ํฌ๋ค๋ ์ฌ์ค์ด๋ค.
sort
๋ O(NใN)
์ ๋ฐ๋ฅธ๋ค.
etc
๊ทธ ์ธ ๋ฐฐ์ด๋ก ํ ์ ์๋ ๋๋ถ๋ถ์ ๋ฉ์๋๋ O(N)
์ ๋ฐ๋ฅธ๋ค.
๋ฐฐ์ด์ ์์๋ฅผ ์ ๋ถ ์ง๋์น๋ฉด์ ์์
์ ํ ๋ for
๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ ์๊ฐํ๋ฉด O(N)
์ธ ์ด์ ๋ฅผ ๊ธ๋ฐฉ ํ์
ํ ์ ์์ ๊ฒ ๊ฐ๋ค..๐
'๐ Study > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] Big O Notation (2) | 2023.03.16 |
---|