본문 바로가기

전체 글

(42)
Heap HEAP 구조 Heap 구조는 우선순위 큐를 위하여 만들어진 자료구조이다. 내부적으로 완전 이진트리의 구조를 가지고 있으며, 우선순위 큐를 구현하기 위하여 사용한다. 힙 내부의 데이터들은 모두 우선순위를 가지고 있고, 우선순위가 높은 데이터가 먼저 나간다. 스택은 LIFO, 큐는 FIFO였다면, 우선순위큐는 우선순위에 따라 먼저 나가는 데이터가 결정된다. 힙은 최댓값이나 최솟값을 빠르게 찾는 것에 목적이 있다. (기준에 따라 다를 수 있다.) 힙 트리에서는 중복된 값을 허용하는데, 이 부분이 이진 탐색 트리와의 차이점이다. HEAP의 구현 힙을 저장하는 표준적인 자료 구조는 배열이다. DivisionByZero를 방지하기 위하여 첫 번째 인덱스인 0은 사용하지 않는다. 또한 특정 위치의 노드 번호는 새로..
Recursive 재귀함수 재귀함수는 정의 단계에서 자기 자신을 재참조하는 함수를 뜻한다. 간단한 예시는 다음과 같다. int factorial(int n) { if (n == 1) return (1); return (n * factorial(n - 1)); } 팩토리얼을 간략하게 구현해놓은 함수이다. 함수 내부의 정의에서 자기 자신을 다시 참조하는데, 이러한 구조를 지니는 함수를 재귀함수라고 한다. 모든 반복문으로 이루어진 함수는 재귀로 표현이 가능하며, 그 역도 성립한다. 재귀함수가 자기 자신을 호출할 때마다 콜스택에 쌓이게 된다. 특정 분기(종료 조건)을 만나게 될 때까지 스택처럼 쌓이게 될 것이다. 이러한 재귀함수를 구현할 때 개발자의 실수로 종료 조건을 설정하지 않거나, 결과값이 제대로 수렴하지 않는 경우에는 스..
Queue Queue Queue는 선입선출의 구조를 따른다고 한다. Enqueue 명령에서는 새로 들어온 원소가 꼬리쪽에 붙는다. Dequeue 명령에서는 가장 먼저 들어온 원소가(오래된 원소) 먼저 나간다. Stack이 후입선출의 구조였던 것에 반해, queue는 처음 원소와 끝의 원소를 잘 다뤄줘야한다. ArrayQueue와 LinkedQueue의 형태로 만들면 되는데, ArrayQueue에서는 고민해봐야 하는 지점이 있다. ArrayQueue에서는 [0, 1, 2, 3] 의 큐에서 0이 빠져나간 경우. [-, 1, 2, 3] 의 형태가 되어서 빈 자리가 있음에도 그 다음 원소가 들어오지 못할 수 있다. 이러한 경우 circularArrayQueue의 형태로 만들면 해결이 가능하다. 현재 끝 번호 (ex: 4)..
Stack Stack 출처: 나무위키 특징 Stack 자료구조는 LIFO(후입 선출)이라는 특징을 가지고 있다. FIFO(선입선출)의 특징을 가지는 큐 형태와 반대이다. 구현은 큐에 비해서 쉬운 편이나, 응용할 예시가 매우 많다. Stack ArrayStack 사용 예시. ArrayStack은 스택의 용량을 미리 정해둔다. 솔직히 LinkedStack에 비해서 구현이 매우 쉬웠다. topNode의 정보만 수정/추가/제거 해주면 되기 때문에 maxElementCount를 넘어서는 push는 받지 않고, empty인 경우만 잘 처리해주면 쉽게 구현이 가능했다. createArrayStack ArrayStack *createArrayStack(int maxElementCount) { ArrayStack *array; a..
Array List, Linked List Linked List와 ArrayList의 장단점 LinkedList ArrayList 장점 동적으로 자료를 다룰 수 있다. 리스트 내에서 자료의 이동이 필요하지 않다. 사용 후 기억 장소의 재사용이 가능하다. Index를 이용해서 빠르게 접근할 수 있다. (시간복잡도 O(1)) LinkedList에 비해서 고려할 사항이 적다. 데이터 개수가 확실하게 정해져 있고, 접근이 빈번한 경우 배열이 효율적이다. 단점 탐색이 느리다. 구현이 어렵다. 포인터의 사용으로 인해 저장 공간의 낭비 우려가 있다. 동적으로 자료를 다룰 수 없다. LinkedList에 비해서 자료의 추가 삭제가 느리다. 연속적인 형태 유지를 위해 shift 연산을 해야하므로 (O(N))이 된다. 10개 생성 삭제 test linked [ti..
[Blockchain In Action] 6장 온체인과 오프체인 데이터 Blockchain In Action 6장 블록체인 인 액션 책을 읽고 공부한 내용을 기록한 글 입니다. 글에 나와있는 내용과 사진은 모두 블록체인 인 액션에 포함된 내용 혹은 이를 정리한 것 입니다. 문제가 될 시 삭제하겠습니다. 블록체인 애플리케이션에는 온체인 데이터라는 개념이 있다. Dapp에서 사용하는 데이터는 블록체인 인프라에 저장하고 다른 데이터는 데이터베이스나 파일에 저장한다. 여기서 블록체인 인프라에 저장되는 데이터가 온체인, 나머지가 오프체인 데이터이다. 블록체인에서는 다음과 같은 데이터를 노드에 저장한다. (온체인) 실행하고 컨펌받은 트랜잭션 스마트 컨트랙트 함수의 실행 결과 상태 변화 ( storage 변수값에 일어난 변화) 발생시킨 이벤트 로그 이러한 데이터를 저장한 후, 블록체인 ..
[Blockchain In Action] 5장 보안과 프라이버시 Blockchain In Action 5장 블록체인 인 액션 책을 읽고 공부한 내용을 기록한 글 입니다. 글에 나와있는 내용과 사진은 모두 블록체인 인 액션에 포함된 내용 혹은 이를 정리한 것 입니다. 문제가 될 시 삭제하겠습니다. 모든 시스템은 보안과 프라이버시 문제를 가지고 있고, 블록체인 기반 시스템에서는 특히 그러하다. 블록체인 시스템은 중앙화된 주체가 제공하는 신뢰의 경계를 넘어서서 작동해야 하기 때문이다. 탈중앙화 시스템에서 참여자들은 분산되어 있고, 고유의 asset을 가지고 있으며, 원할 때 가입하거나 탈퇴가 가능하고, 신뢰 layer로 블록체인에 의존한다. 탈중앙화 시스템에서는 이러한 이슈에 대처하기 위한 암호학과 해싱 기법을 사용한다. 암호학은 탈중앙화 참여자를 위한 아이덴티티로 쓸 수..
[Blockchain In Action] 4장 스마트 컨트랙트에서 Dapp으로 Blockchain In Action 4장 블록체인 인 액션 책을 읽고 공부한 내용을 기록한 글 입니다. 글에 나와있는 내용과 사진은 모두 블록체인 인 액션에 포함된 내용 혹은 이를 정리한 것 입니다. 문제가 될 시 삭제하겠습니다. 스마트 컨트랙트에 코딩된 로직은 혼자서 작동하지 않는다. 스마트 컨트랙트 함수와 블록체인 서비스를 호출하는 사용자 애플리케이션이 있어야 한다. Dapp은 블록체인 함수를 호출하는 탈중앙화 스마트 컨트랙트의 로직이 포함된 웹 또는 엔터프라이즈 애플리케이션이다. 블록체인 아키텍쳐의 흐름을 상기해보면, 다음과 같다. - 사용자가 UI 함수를 호출한다. - UI 함수는 웹 애플리케이션 소프트웨어와 블록체인 API를 사용해 스마트 컨트랙트 함수를 연결한다. - 스마트 컨트랙트 함수는 ..