컴퓨터언어/자료구조&알고리즘(15)
-
[Array] 배열, 정적배열, 동적배열
배열 : 연속된 메모리 공간에 같은 자료형의 데이터를 저장하는 방식. "인덱스"로 관리하기 때문에 다음과 같은 특징이 있다. 탐색 : 유리 O(1) 맨 마지막 위치에 삽입: 정적배열=>유리 O(1) / 동적배열에서메모리초과시=>불리 O(n) 맨 마지막 위치의 원소 삭제: 유리 O(1) 업데이트(원하는 위치에 삽입/삭제) : 불리 O(n) Static Array Dynamic Array 특징 배열을 정의할 때부터 길이를 정하기 때문에 고정됨 개발자가 메모리 관리할 수 있음 길이를 초과하게 되면 할당할 메모리를 새로 늘리고 이전 정보를 복붙해서 이어나감(보통 기존 크기의 2배로 옮김) 길이변화에 유연하지만, 메모리 관리에 소홀함 언어 저레벨 언어(C++) 고레벨 언어(Python-List, JS-Array,..
2020.05.21 -
[Stack & Heap]
프로그램이 동작할 때 메모리를 크게 Code, Stack, Heap 3가지 구역으로 나눌 수 있다. 1단계 : Code 우리가 짠 코드가 실행되기 위해서는 기계가 알아들을 수 있는 머신코드가 필요하며, 이 변환을 "컴파일"이라고 한다. 머신코드를 메모리에 올리는 곳을 Code 영역이라고 한다. 2단계 : Stack 머신코드이든 우리가 영어로 작성한 코드이든 실행순서는 동일하다. Stack 영역에서는 우리가 작성한 코드를 기초로 변수들에게 자료형에 따라 메모리를 할당해준다. 즉 Stack은 머신코드가 메모리에 직접 접근하는 것이다. 3단계 : Heap Heap은 머신코드가 메모리에 직접 접근할 수 없는 부분이다. 우리가 작성한 코드대로 변수에 메모리를 할당하고 나서 메모리가 더 필요한 경우, 로직에 따라 ..
2020.05.19 -
[Big O] 미래를 내다보고 코드를 효율적으로 짜자
Big O는 Input이 증가함에 따라 연산의 양이 얼마나 더 많이 증가하는지를 나타내는 지표로, 알고리즘의 성능을 나타낸다. O(1) > O(logn) > O(n) > O(nlogn) > O(n^2) > O(2^n) > O(n!) *언제나 절대적이지는 않다. 예를 들어 배열이지만 길이가 정해진 경우에는 상황에 따라 O(n) 알고리즘이 O(1) 알고리즘보다 더 성능이 좋을 수 있다. *JavaScript에서 문자열의 .length는 O(1)이다. *그렇다고 확장성만 따질 것은 아니고, 가독성 또한 좋아야 한다. https://www.bigocheatsheet.com/ Big-O Algorithm Complexity Cheat Sheet (Know Thy Complexities!) @ericdrowell ..
2020.05.19