1. Time Complexity (시간 복잡도)
2. 누가 더 빠를까?
시간 복잡도를 검색하는데 흥미로운 질문을 발견했다.
" if(object[key] !== undefined) VS for(let key in object) VS Object.hasOwnProperty(key) "
쉽게 말해 O(1)과 O(n)과의 대결이다. 한번 보는게 낫기 때문에 테스트 사이트를 이용해 확인 할 수 있다.
아래 사이트는 몇년전에 만들어졌기 때문에 최신 브라우저의 성능을 기준으로 결과를 주진 않지만 어떤 방법이 더 빠르게 작동하는지 알 수 있다.
https://jsperf.com/double-lookup/4
관심이 갔던 이유는 O(1)의 시간 복잡도를 가진 알고리즘도 O(n)의 알고리즘보다 느리게 동작할 수도 있다는 것이다. 왜냐하면 시간 복잡도는 항상 동일한 데이터의 양과 동일한 환경에서만 구할 수 있는게 아니기 때문에 데이터의 양에 따라서 다양한 결과를 가져오기도 한다. 또한 브라우저의 엔진이나 컴퓨터의 사양에 따라서도 충분히 달라질 수 있다. 하지만 무엇보다도 그래프에서도 볼 수 있듯이 데이터의 양이 적을 때는 가장 빠르게 생각할 수 있는 O(1)보다 O(n)이나 심지어 O(Cn)이 더 빠르게 동작할 수도 있다.
이러한 테스트에서도 알 수 있듯이 우리가 다룰 데이터의 양의 따라서 적당한(?) 방식으로 알고리즘을 풀어주면 좋다.
'Programming > JavaScript tips' 카테고리의 다른 글
[Algorithms]N-queens (Chess Puzzle) (0) | 2019.08.02 |
---|---|
Prototype? __proto__? constructor? (0) | 2019.07.29 |
Hash Table Data Structure(해시 테이블 자료구조) (0) | 2019.07.25 |
Tree Data Structure(트리 자료구조) (0) | 2019.07.25 |
Graph Data Structure(그래프 자료구조) (0) | 2019.07.25 |