본문 바로가기

CS

(4)
[CS] 정렬 알고리즘 - 기본개념 [ 버블 정렬, 선택 정렬, 삽입 정렬, 힙 정렬, 병합 정렬, 퀵 정렬 ] Topic = 기본 정렬 알고리즘 학습해보기    Why  배열 정렬은 표준 라이브러리에서도 제공해주기 때문에 복잡한 경우가 아니라면 직접 다루는 경우가 적지만, 기본 제공 정렬 함수로 만족하지 못하는 상황에서 상황에 맞는 최적의 선택을 하기 위해선 학습이 필요할 것 같다.    버블 정렬 버블정렬은 배열의 모든 요소가 정렬될 때 까지 한 쪽 방향으로 인접한 두 요소를 비교하여 위치를 바뀌주는 작업을 반복하는 알고리즘이다. ➡️ 버블 정렬은 구현이 간단하고 쉽지만, O(N^2) 의 비효율적인 시간 복잡도를 갖고 있어 큰 데이터셋에서는 사용되지 않는다. 시간 복잡도 : O(N^2)공간 복잡도 : O(1)추가적인 메모리 사용이 거의 없는 제자리 정렬 알고리즘이다. 버블 정렬 작동 예시   더보기fun bub.. 2024. 5. 21. 19:34
[CS] 프로그램 ( Program ), 프로세스 ( Process ), 쓰레드 ( Thread ) 학습 - 작성중 Topic =  꼬리에 꼬리를 무는 프로그램, 프로세스, 쓰레드 개념 정리 - ( 노트 필기에가깝다 ) 프로그램, 프로세스, 쓰레드의 개념 프로그램은 어떤 작업을 실행하기 위한 명령어들의 모음이다. 이 명령어 들은 기기가 수행해야 할 작업들을 소스코드 형태로 작성된다. 프로그램이 실행되면, OS( 운영체제 ) 는 프로그램을 위한 메모리 공간을 할당하고, 프로그램의 코드와 데이터를 메모리에 로드한다. 이렇게 메모리에 로드되어 CPU 에 의해 실행되는 프로그램 작업 단위를 프로세스라고 한다. 프로그램에 의해 생성된 프로세스 내에서 CPU 에서 실행되는 컨텍스트, 흐름. 즉, 작업의 실행 단위( Unit of execution )를 쓰레드라고 하며, 쓰레드는 프로세스 안에 1개 이상 존재한다. ➡️ 쉽게, 프.. 2024. 4. 30. 05:36
[TIL] Kotlin - 재귀 함수, 꼬리재귀 ( Tailrec ) 함수 Topic = 꼬리재귀 함수에 대해서 알아보고 일반 재귀함수, loop 함수와의 차이점을 알아보자. 꼬리재귀 함수를 사용하는 이유 ✅꼬리재귀 함수 개념 정리 이전에 간단한 예제를 통해 꼬리재귀 함수를 사용하는 이유에 대해 작성해볼 것. 아래 3 가지 방식의 코드는 모두, 두 정수 a, b 의 최대 공약수를 리턴하는 함수이다. 가독성이 좋은 코드는? = 재귀함수 메모리 효율성이 좋은 코드는 ? = loop 함수 가독성도 좋고, 메모리 효율성도 좋은 방식 ? = 꼬리재귀 함수 [ 코드 1. 재귀 함수 ] fun gcd(a: Int, b: Int): Int { if (b == 0) return a return gcd(b, a % b) } [ 코드 2. loop ( while ) 함수 ] fun gcd2(a: .. 2024. 4. 20. 02:06
[TIL] 계산 복잡도 - 시간복잡도 ( Time Complexity ) 1. 개념, 점근적 표기법 Topic = 시간 복잡도를 학습해야 하는 이유, 시간복잡도의 개념, 활용 등에 대해서 학습해보자 Why - 시간 복잡도를 배우기 전에 함께 알아본 것 ( 상위 개념, 학습하는 이유 ) 상위 개념 - 계산 복잡도 이론 ☑️ ( 일련의 과정을 자원 측정 및 분류, 구성된 모임의 복잡도 확인, 점근적 표현 ) ➡️ 아래에서 시간 복잡도 계산시 해당 단계를 활용하여 다룰 것. 계산 복잡도 이론은 알고리즘이 일련의 문제를 해결하는데 필요한 자원을 측정하고 분류하는 이론으로, 알고리즘을 복잡도에 따른 데이터 구조의 모임을 구성하고 알고리즘이 소모하는 시간과 메모리 사용량 등의 자원을 효율성 지표로 사용하는 것이다. 이 효율성 지표중, 소모하는 시간의 효율성 지표를 시간 복잡도, 메모리 사용량의 지표를 공간복잡도라.. 2024. 4. 14. 18:38