본문 바로가기

전체 글124

[Algorithm] Sorting Algorithm(정렬 알고리즘) - Non Comparison 이전에 정렬 알고리즘에 대한 글을 작성했었는데 이는 상호 원소의 크기를 비교해가며 정렬을 하는 알고리즘이였다. [Algorithm] Sorting Algorithm(정렬 알고리즘) - Comparison 프로그래밍을 할 때 배열은 라이브러리를 통하여 손쉽게 정렬할 수 있다. 하지만 정렬은 다양하게 수행할 수 있고 그 알고리즘에 따라 장단점이 존재한다. 아래는 통상적으로 비교를 통한 정렬 ssnotebook.tistory.com 그리고 비교를 통한 정렬 알고리즘은 시간 복잡도가 최대 O(n log n)~O(n^2)를 가진다는 것을 알 수 있었다. 하지만 비교를 통한 정렬 알고리즘이 아닌 특수한 방식을 통한 정렬 알고리즘이 존재하는데, 이는 특정 조건을 충족하면 비교를 통한 알고리즘보다 빠르게 정렬을 할 수.. 2023. 2. 4.
[CS] Kernel(커널) 일반적으로 Mac이나 Windows 같은 OS(운영체제)에 대하여는 많이 들어봤을 것이나 OS와 밀접한 연관이 있는 커널에 대해서는 많이 들어보지 못했을 것이다. ‣ 커널(Kernel) 사전적 정의로 "알맹이" 또는 "핵심"이라는 뜻을 가지고 있는 커널은 말 그대로 운영체제의 "핵심"이다. 커널은 운영체제에서 컴퓨터 자원을 관리하는 역할을 수행하기 때문이다. 소프트웨어의 요청(System Call)으로 하드웨어의 자원(CPU 연산, Disk에 Data의 저장 및 삭제 등)을 이용하기 위하여 커널에서는 중간다리 역할을 수행하는데, 프로그램이 직접적인 하드웨어의 자원에 접근하는 것을 막기 위하여 존재하는 것이다. 커널은 소프트웨어의 요청이 하드웨어의 자원에서 처리될 수 있도록 변환하는 작업을 수행하는데, 이.. 2023. 2. 2.
[Algorithm] Sorting Algorithm(정렬 알고리즘) - Comparison 프로그래밍을 할 때 배열은 라이브러리를 통하여 손쉽게 정렬할 수 있다. 하지만 정렬은 다양한 기법을 통해 수행할 수 있고 그 알고리즘에 따라 장단점이 존재한다. 아래는 통상적으로 원소의 크기를 비교하여 정렬을 할 때 사용하는 목록이다. 1. Bubble Sort(거품 정렬) : 배열에서 인접한 두 개의 원소를 비교하며 우열을 가린 뒤 서로 위치를 바꾸어 주는 방식이다. 거품 정렬을 통해 배열을 한 번 검사하면 필연적으로 가장 큰 수가 배열의 맨 끝으로 이동하게 되고 정렬이 완성될 때까지 반복한다. 두 개 원소의 위치만 계속 바꾸는 정렬이기 때문에 공간 복잡도는 O(1)을 가지지만, n개의 원소의 배열을 전부 정렬하는데 n번을 순회할 수 있기 때문에 시간 복잡도는 O(n^2)를 가진다. 2. Selecti.. 2023. 1. 3.
[Data-Structure] Stack, Queue, Deque Stack과 Queue는 선형 자료구조의 특징을 공통적으로 가지고 있다. Stack : Last In First Out (LIFO) - 후입 선출 (후에 들어간 원소가 먼저 배출) First In Last Out (FILO) - 선입 후출 (먼저 들어간 원소가 나중에 배출) 이것은 Stack의 가장 큰 특징이며 차곡차곡 쌓이는 구조로 이해하면 된다. 그렇기에 늦게 들어간 녀석들은 점차 쌓이게 되고 호출 시 가장 위에 있는 원소가 나오는 구조이다. ex ) 바구니에 물건을 담았다가 위에서부터 꺼냄 Queue : First In First Out (FIFO). - 선입 선출 (먼저 들어간 원소가 먼저 배출) Stack과 다르게 들어간 원소가 쌓이는 것은 마찬가지이나 들어간 순으로 배출된다는 것이 특징이다. .. 2022. 12. 27.
[Data-Structure] Array, Linked-List Array : 배열이라는 뜻의 Array는 가장 기초적인 자료구조 형식으로, 논리적/물리적 저장 위치가 동일하다는 특징을 가지고 있다. 접근 (Access) : 위치 정보를 나타내는 인덱스(Index)를 이용하여 해당 원소에 바로 접근이 가능하다. 접근에 대한 시간 복잡도는 O(1)이라는 특성을 가지고 있는데 이는 삽입(Insert)/삭제(Delete)는 다른 결과를 보여준다. 삽입(Insert) / 삭제 (Delete) : [0,1,2,3,4,5,6,7,8,9] 이라는 Array에 '5' 라는 원소에 접근을 하여 삭제를 하게 된다면 [0,1,2,3,4, ,6,7,8,9] 이와 같이 바뀌게 되는데 '4'와 '6' 사이에 어떠한 값이 들어간 것이 아닌 빈 공간이 생겨버리게 된다. Array의 특성 상 빈 .. 2022. 12. 24.
[Database] ORM(Object-Relational Mapping) ORM (Object-Relational Mapping) : 객체와 관계형 데이터 베이스의 데이터를 자동으로 매핑해주는 것을 의미 Java와 같은 객체 지향 프로그래밍 언어들은 클래스를 선언하여 인스턴스에 정보를 저장하는 것처럼 관계형 데이터 베이스는 테이블을 생성하고 스키마를 기반으로 인스턴스에 정보를 저장한다. 여기서 클래스와 테이블은 모델 간의 불일치가 존재하고, 이를 ORM을 통해 객체 간의 관계를 바탕으로 Query문을 자동으로 생성하여 불일치를 해결한다. ORM의 간단한 예시로 SQL query문과 Python의 웹 프레임워크인 Django의 queryset을 비교해볼 수 있다. Example : # SQL SELECT ID FROM USER WHERE AGE = 50; 이는 SQL query.. 2022. 12. 23.