본문 바로가기

전체 글

(86)
이진탐색트리 Insert, Search 구현 이진 탐색 트리를 구현해보자 이진 탐색 트리는 '이진 트리'에 '데이터의 저장 규칙'을 더해놓는 것이 '이진 탐색 트리'이다. 이진 탐색트리가 되기 위해서는 다음과 같은 조건이 필요하다. 1. 이진 탐색 트리의 노드에 저장된 키(key)는 유일하다. 2. 루트 노드의 키가 왼쪽 서브 트리를 구성하는 어떠한 노드의 키보다 크다. 3. 루트 노드의 키가 오른쪽 서브 트리를 구성하는 어떠한 노드의 키보다 작다. 4. 왼쪽과 오른쪽 서브 트리도 이진 탐색 트리이다. 앞에 언급한 키(key)는 탐색의 조건이 될 수 있으며 이번에 구현할 코딩에서는 데이터가 곧 key 값이 된다. 위 조건을 만족하는 트리를 그림으로 표현 하면 다음과 같다 (윤성우의 자료구조 참조) 위 그림을 통해 보면 다음 수식이 어디서나 만족함을..
Radix 정렬 구현 기수 정렬을 구현해보자 기수 정렬의 가장 큰 특징은 "정렬 순서상 앞서고 뒤섬의 판단을 위한 비교연산을 하지 않는다" 기본적으로 정렬 알고리즘의 이론상 성능의 한계는 O(nlog2n)으로 알려져 있는데 기수 정렬은 이러한 한계를 넘어설 수 있는 유리한 알고리즘이다. 다만 기수정렬의 단점은 범위가 매우 제한 적이다. 위에서 말하는 단점, 즉 범위의 정확한 뜻은 '데이터의 길이' 이다. 왜 데이터의 길이가 문제인가 하면 저장하는 버퍼, 즉 버킷의 갯수의 영향을 미치며 데이터 길이에 따른 별도의 알고리즘이 들어가야 한다. 별도의 알고리즘이 들어가면서 까지 기수 정렬은 효율적이지 않기 때문에 실제 사용하는 자료구조에서는 기수정렬을 많이 사용하지 않는다. 다음 그림은 한자릿 수의 기수정렬을 보여준다. 원리는 간단..
Quick 정렬 구현 Quick 정렬을 구헌해보자 이전에 공부한 Merge Sort를 안다면 쉽게 공부할 수 있다. Quick 정렬 역시 Merge Sort와 마찬가지로 분할 정복(Divide and conquer)으로 근거하여 만든 정렬 방법이다. 다만 Merge Sort와 다른점은 Merge Sort는 균등하게 나누었다면 Quick Sort는 비균등하게 나눈다. Quick Sort에는 3가지 변수를 사용한다. 1. Pivot : 중심점 2. LeftIndex: Pivot을 제외한 제일 왼쪽 Index 3. RightIndex: Pivot을 제외한 제일 오른쪽 Index pivot을 제일 왼쪽으로 하면 다음 그림과 같이 변수가 잡힌다. Quick Sort 과정 1. left Index를 Pivot 보다 큰 값을 만날때 까지..
병합 정렬 구현 (병합) #2 앞서 분열한 배열들을 정렬해보자 처음 들어간 배열은 1~ 8 으로 들어 갔으니 8 ~ 1 로 정렬 해본다 아래 그림은 정렬하는 과정을 나타내는 그림이다. 노란색 박스를 보자 일단 1, 2를 병합 하면서 정렬하여 2,1이 정렬되었고 3,4 역시 정렬 되어 4,3으로 정렬 되었다고 하자 첫번째 병합된 배열은 Start Index에서 End index가 Mid인 상황이고 두번째 병합된 배열은 Start Index가 mid+1 인 상황에서 End Index 까지 정렬 되어있는 상황이다. 이제 두 배열을 병합해보자 노란박스 안에 배열은 3개가 있고 다음과 같다. 1번째 배열은 이전에 정렬되어 올라온 첫번째 배열(2,1) 2번째 배열은 이전에 정렬되어 올라온 두번째 배열(4,3) 3번째 배열은 1,2배열을 병합한 ..
병합 정렬 구현 (분열) #1 병합 정렬을 구현해 보자 병합 정렬의 개념은 다음과 같다. 1. 데이터를 쪼갤수 없을 때 까지 계속 쪼갠다. 2. 쪼개진 데이터를 병합하면서 정렬한다. 우선 1번 개념을 살펴 보자 데이터를 쪼갤 수 없을 떄 까지 쪼갠다는 것을 다음 그림을 보면 이해가 쉽다. 마지막 red box 를 보면 index 가 더이상 쪼개질 수 없을 만금 쪼개졌다 (배열에 오직 1개의 데이터만 있음) 위 처럼 쪼개는 코드를 구현 해보자 아래 그림과 같은 Parameter와 재귀 함수를 사용하면 쉽게 구현 할 수 있다. start Index : 배열의 시작 인덱스 Mid: 배열의 중간 인덱스 ((Start Index + End Index) / 2) End Index: 배열의 마지막 인덱스 start Index와 End Index는..
리눅스 쉘 프로그래밍 -1- 쉘 스크립트 구조 #! /bin/bash # -> bash로 정의 할 시 bash에 의해 처리되고 해석된다. #! /bin/peri # -> peri로 정의 할 시 peri에 의해 처리되고 해석된다. 함수명 () { 명령 ... } 변수 1= 값 변수 2= 값 # 주석(Comment) 쉘 문법(조건, 선택, 반복) 명령 ... 함수 호출 주석 사용법 -> C랑 비슷해보인다. -> 헤더 넣고~~ 주석 넣고~~~ 쉘 스크립트를 잘 만들 수 있는 방법 -> 시스템관리 관련 명령을 잘 알아야 함. -> 작업을 위해 사용될 명령들과 명령 순서를 알아야 함. -> 쉘 스크립트 작성 전 사용할 명령들, 실행 순서, 실행 조건들을 정리한다.
STM32 Lepton 2.5 Project -1 STM32를 활용해 Lepton 2.5를 구동해보자 Lepton 2.5를 출력하기 위한 설계는 다음과 같다. 1. MCU : STM32F407VET 2. Firmware Package Version : FW_F4 V1.26.1 FREERTOS를 사용 할 것이며 Task는 총 4개로 구성되어 있다. 1. Console Task UART로 터미널을 통해 외부 명령어를 받아 처리한다. 2. Ethernet Task TCP/IP Client로 동작하며 외부 명령어를 받아 처리한다. 3. TempDetection Task 온도 감지 중 뜨거운 열원이 발생하면 이벤트를 발생한다. (감시 Task를 넣기 위해 일부러 추가) 4. Lepton Task Lepton 설정 및 Video Frame을 뽑는다. MCU, 펌웨..
Raspberry PI에 Vim 테마 설치 vim 다운을 받자 sudo apt-get update sudo apt-get install vim Plug.vim을 설치한다. curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 경로에 ~/.vim/autoload/plug.vim이 다운 되었는지 확인한다. 확인되었으면 vimrc를 vim으로 연다. sudo ~/.vimrc vimrc에 다음과 같이 쓴다. " Plugins will be downloaded under the specified directory. call plug#begin(has('nvim') ? stdpath('data') ...