Algorithm/자료구조 6

해시 테이블의 A부터 Z까지

해시를 사용하는 목적 - 해시 테이블: 해시테이블은 데이터의 해시 값을 테이블 내의 인덱스로 사용하는 자료구조이다. 필요한 데이터를 찾는 데 시간복잡도가 평균 O(1)인 굉장히 빠르게 데이터를 조회할 수 있다. - 암호화: 해시는 입력받은 데이터를 해시함수를 통해 원본의 모습을 전혀 알 수 없게 바꾼다. 이러한 해시의 특성 덕분에 해시는 암호화 영역에서 사용되고 있다. SHA 알고리즘이 대표적인 예이다. - 데이터 축약: 해시는 길이가 서로 다른 입력 데이터에 대해 일정한 길이의 출력을 만들 수 있다. 이 특성을 이용하면 대량 데이터를 해싱하여 짧은 길이로 축약할 수 있다. 해시 함수 해시테이블이란, 큰 숫자나 문자열을 해시 테이블의 인덱스로 사용할 수 있는 작은 정수로 매핑하는 함수이다. 해시함수를 고..

우선순위 큐

우선순위 큐란 우선순위가 높은 데이터대로 먼저 나가는 자료구조이다. 우선순위 큐에 중요한 연산은 총 2가지가 있는데 , 첫번째는 insert(삽입연산), 두번째는 delete(삭제연산) 이다 우선순위 큐는 2가지로 구분이 되는데 최소 우선순위 큐는 가장 우선 순위가 낮은 요소를 먼저 삭제한다. 최대 우선 순위 큐는 가장 우선순위가 높은 요소가 먼저 삭제된다. 우선순위 큐의 구현방법 표현 방법 삽입 삭제 순서 없는 배열 O(1) {배열 맨끝에 새로운요소를 추가} O(n) {처음부터 끝까지 모든 요소를 스캔} 정렬된 배열 O(n) {다른 요소의 값을 비교후 삽입} O(1) {숫자가 높은것이 우선순위가 높다고 가정하면 맨 뒤에 위치한 요소 삭제} 순서 없는 연결리스트 O(1) {첫번째 노드로 삽입} O(n) ..

트리(이진 탐색 트리) 삽입연산,삭제연산

이진탐색트리는 탐색을 효율적으로 하기 위해 만든 이진 트리 기반의 탐색을 위한 자료구조입니다. 이진탐색트리를 알기 위해 정의를 살펴봅시다. 이진 탐색 트리의 정의 모든 원소의 키는 유일한 키를 가진다. 왼쪽 서브 트리 키들은 루트 키보다 작다. 오른쪽 서브 트리 키들은 루트의 키보다 크다. 왼쪽과 오른쪽 서브트리도 이진 탐색트리이다. 위에 있는 정의들을 만족시키며 이진 탐색 트리는 완성이 됩니다. 아래에 있는 영상은 어떻게 하면 이진탐색트리를 좀더 쉽게 정의를 지키며 구현할 수 있을까 해서 가져온 영상입니다. https://www.youtube.com/watch?v=9ZZbA2iPjtM 이진탐색트리의 삽입연산 이진 탐색 트리에 원소를 삽입하기 위해서는 먼저 탐색을 수행하는 것이 필요하다. 이유는 이진 탐..

자료구조 <트리>

트리란? 계층적인 구조인 트리는 가족의가계도, 회사의 조직도, 컴퓨터의 디렉토리 구조, 인공지능 문제에서도 사용됩니다. 대표적인 것이 결정트리 트리의 용어들 루트(root) : 계층적인 구조에서 가장 높은 곳에 있는 노드 : (A) 서브트리(subtree) : 루트노드를 제외한 나머지 노드들 : { (B,D,E,H,I,J) , (C,F,G) } 간선(edge) : 트리에서 루트와 서브트리는 선으로 연결됩니다. : 10개 (공식::노드의 개수-1) 부모노드(parent node) : 데이터 구조의 트리에서 모든 노드의 선행 노드인 노드를 부모 노드라고 하거나 자신에서 다른 연속 노드로 분기하는 노드를 부모 노드라고 합니다. : (A),(B),(C),(D),(E),(F),(G) 자식노드(children no..

자료구조 <스택, 응용:괄호검사, 후위표기수식계산>

스택 기본구성 #include #include using namespace std; template class stack { int top; T* array; public: stack() { top = -1;} ~stack() { delete[]array; } void create(int size) { array = new T[size]; } void push(T element) { array[++top]=element; } T pop() { T res; res = array[top]; top--; return res; } T peak() { return array[top]; } int _size() { return top + !; } bool is_empty() { if (top == -1)return..