컴퓨터/자료구조(7)
-
우선순위 큐 2
지금까지는 우선순위 큐에서 최대값이 먼저 나오는 구조였다.. 하지만 최소값이 먼저 나오고 싶게 할 때가 있을것이다. (최단경로 등) Enqueue와 Dequeue를 할 때 이 조건을 반대로 하면 될것이다.. 하지만 이러한 구조를 건들지 않고 할 수 있는 하나의 방법이 더 있었는데 Enqueue를 할 때, 음수를 넣어주는 방법도 있었다..... 와..ㅋㅋ 음수는 수(절댓값)가 클수록 작다는 성질이 있기 때문에 -10이 제일 큰 수가 될것 근데 음수가 나오니까 이런 구조에서는 Dequeue를 할 때 -1을 곱해줌! 자 이런 방법이 있었고 이제 이 우선순위 큐에 int형 말고 다른 자료형이 들어오려면 어떻게 해야할까.. 먼저, Generic 형태로 모든 자료형을 받는다 하지만 '비교' 에서 문제가 생긴..
2023.11.05 -
우선순위 큐
이전에 힙 트리라는 자료구조에 대해 알아보았다. 우선순위 큐는 이 힙 트리를 이용한 자료구조인데... 간단하게 우선순위가 있는 애가 맨 첫번째로 나가는 자료구조이다! 힙 트리는 최상위(root)에 가장 큰 놈이 있으니까 root를 빼는 방식 이제 '우선순위 큐' 를 구현해보자. List (힙 트리의 제약조건으로 List를 Tree로 사용할 수 있다) List로 데이터를 받고 힙트리의 제약조건중 부모가 커야하니까 들어온 데이터를 내 부모와 비교한다. (현재 - 1) / 2가 부모가 된다는 사실은 전에 보았으니 생략. 그리고 내가 더 크다면 부모와 나를 교체하는 방식으로 끝까지 올라가도록 반복! Dequeue 도 구현해보면 결국 힙의 제약조건으로 인해 0번째 인덱스가 제일 큰 수라는것을 알 수 있기에 과감히..
2023.11.04 -
이진 트리, 힙 트리
이진 트리는 부모가 최대 2개의 자식을 가지는 트리이다. 이런식의 구조를 가지고 있음! 이진 트리 중에 이진 검색 트리가 있는데 왼쪽에는 부모보다 작은것, 오른쪽에는 부모보다 큰 것이 존재함! 이러한 구조를 지니고 있어 검색에 용이하다! 32라는 값을 찾는다면? 크니까 오른쪽 작으니까 왼쪽 이렇게 빠르게 찾을 수 있다. (이진탐색 알고리즘과 비슷한 것 같음) 하지만 하나의 문제점이 있는데, 이렇게 한줄로 할 경우에는 결국 이진 검색 트리의 이점을 잃고 리스트와 동일한 구조가 되어버리니까 삽입, 삭제가 일어날 때 트리를 재 배치한다고 한다! 이진 검색 트리와 비슷한 힙 트리라는 개념도 있는데 힙 트리는 이진 트리의 구조를 하고있으나 몇가지의 제약조건이 추가된 형태다. 제약조건중 첫 번째는 부모가 자식보다 ..
2023.11.02 -
Tree 구현하기
트리를 구현한다면 이렇게 자신의 데이터와 자식들을 List로 가지고 있게 할수 있다. 그리고 어제 그렸던 그림과 같은 구조를 표현한다면? 이런식으로 Children을 추가하는 방식으로 Tree를 구현함! 이제 Tree를 순회하는 방법에 대해서 알아보자면 트리의 구조상 재귀함수로 순회하는것이 합리적 (트리를 자르면 트리..를 자르면 트리) 이렇게 자식을 돌면서 재귀함수로 트리의 구조같이 쭉 뻗어나가면서 출력을 진행한다. 굿
2023.11.01 -
그래프
그래프라는 자료구조에 대해서 간단하게 알아보았다. 그래프는 정점(Vertex) 와 간선(Edge)로 구성되있다. 여기서 Vertex는 데이터를 표현하는것이고 Edge는 Vertex와 Vertex를 잇는 선이다. 대충 이런식! 관계망, 노선 등 여러가지를 표현할 수 있다. 여기서 가충치 그래프라는 개념이 등장하는데, Edge에 가중치를 부여하는것이다. 예를 들어서, Vertex가 자하철 역이라고 생각해보면 Edge가 각 역의 거리, 밀집도 등을 표현할 수 있다. 이런 가중치 그래프를 사용해서 길찾기 알고리즘을 진행하는듯? 암튼 이것 말고도 방향 그래프 등 여러 그래프가 있고 상황에 따라서 구현하는듯 하다. 그래프를 구현하는 방법 중 여러가지가 있는데 첫 번째로 관계에 대해 생각해보면 양방향 LinkedLi..
2023.10.27 -
Stack 과 Queue
Stack 과 Queue에 대해 간단히 공부했다. 둘다 선형 자료구조로 자료가 일렬로 있는 자료구조이다. Stack = 후입 선출(LIFO) Queue = 선입 선출(FIFO) Stack은 마지막으로 들어온 데이터가 첫 번째로 나가는 Last In First Out 구조이다. Push로 데이터가 들어오고 Pop으로 데이터가 나간다. Peek는 다음 데이터를 꺼내지 않고 보는것 Queue는 첫 번째로 들어온 데이터가 첫 번째로 나가는 First In First Out 구조이다. InQueue로 데이터가 들어오고 DeQueue로 데이터가 나간다. 동일하게 Peek는 다음 데이터를 꺼내지 않고 보는것 그렇다면, Linked List로 First Node , Last Node 해서 똑같은 구조를 만들 수 있는 ..
2023.10.27