Notice
Recent Posts
Recent Comments
Link
모르면 배우면 된다
알고리즘-배열과 객체의 시간 본문
const object ={
name : 'kelly',
age : 10,
};
객체의 탐색시간은.. 짧다!
- 접근, 입력, 수정, 삭제에 걸리는 시간이 O(1)이다. 매우 빠르다는 뜻.
- 정렬이 돼있지 않다. 어디에 새로운 객체를 넣든지 상관 없다. 정렬 없이 key로만 접근하기 때문에 속도가 빠르다.
- ex) console.log(object.name);
- 단, 객체 내장 메소드 중 일부는 O(n)의 시간을 가진다(선형 시간). 프로퍼티 개수가 많아질수록 각 프로퍼티에 접근해 배열에 각각 추가해줘야 하는 시간이 늘어나기 때문이다. Object.keys(object) : 객체의 key를 배열로 반환하는 함수. [’name’, ‘age’] Object.values(object) : 객체의 value를 배열로 반환하는 함수. [’kelly’, 10] Obejct.enteries(obejct) : 객체의 key와 value를 한 쌍의 배열로 만들어 반환 [[’name’,’kelly’],[’age’:10]]
- 한편, Object.hasOwnProperty(’name’) : 객체에 name이라는 key가 있는지 확인하고 true or false를 반환하는 함수. key로 접근하기 때문에 O(1)을 가진다.
배열의 탐색 시간은 길다!
const array = ['a', 'b', 'c'];
- 정렬돼 있는 데이터를 다룰 때 배열은 유용하지만 성능은 좀 포기해야.
- 요소 접근(array[1]) : 배열 뒷쪽에 추가(array.push(’d’))는 O(1)
- 어떤 요소에 접근하든, 속도는 같다. 흔히들 착각하는 게 길이 1000 배열의 990번째 요소에 접근한다고 하면 처음부터 탐색해가는 걸로 착각하는데, 각각의 인덱스마다 지름길이 있다고 생각하면 된다. 접근 자체는 빠름.
- 배열 앞쪽에 원소를 추가/제거하면 O(n)만큼의 시간이 걸린다. 뒷쪽의 index를 모두 바꿔줘야 하기 때문이다. 따라서 배열 앞에 추가하고 제거하는 건 최대한 피하는 게 좋다. shift, unshift보다 push, pop의 속도가 빠르다.
- 배열의 내장 메소드 속도 : 대부분 O(n). push와 pop O(1) 빼고.
- forEach, map, filter, reduce, slice, splice 등등 : O(n)
- Array.sort(array) : O(n * log n). 요소들을 한 번만 보는 게 아니라, 여러 번 보면서 비교하느라 시간이 더 오래 걸림.
객체 : 노정렬, 빠름
배열 : 예스정렬, 마지막에 요소추가 하는 게 빠름
'알고리즘' 카테고리의 다른 글
알고리즘- 재귀함수 정리 (0) | 2022.06.02 |
---|---|
알고리즘 - 배열을 비교할 때 사용하는 알고리즘 (0) | 2022.05.31 |
알고리즘- 빅오, 시간복잡도, 공간복잡도 (0) | 2022.05.29 |
StringBuilder의 활용 (0) | 2021.11.17 |
프로그래머스 level1에서 얻은 지식 - Arrays, Math (0) | 2021.11.04 |