[Graph] 최단경로검색, Dijkstra algorithm(다익스트라)
Dijkstra algorithm(다익스트라 알고리즘) 열심히 그렸는데, 맞겠지. stack에 값을 넣어놓고 pop해서 꺼내면 된다. *A에서 D로 가는 경우, A에서 B를 거쳐 D로 가게되면 8이 됨으로, 7A를 저장해 준다. class Graph: def __init__(self): self.node = set() self.edges = {} self.distances = {} def add_node(self, value): self.nodes.add(value) def add_edge(self, from_node, to_node, distance): self._add_edge(from_node, to_node, distance) self._add_edge(to_node, from_node, dist..
2018. 9. 25.
[Graph] BFS(Breadth first Search), 넓이우선탐색
[Graph] DFS(Depth first Search), 깊이우선탐색에서는 stack을 이용하고, BFS에서는 queue를 이용하면 된다. vertextList = [0, 1, 2, 3, 4, 5, 6] edgeList = [(0, 1), (1, 0), (0, 2), (2, 0), (1, 3), (3, 1), (2, 4), (4, 2), (2, 5), (5, 2), (4, 6), (6, 4)] graphs = (vertextList, edgeList) def bfs(graph, start): vertextList, edgeList = graph visitedVertex = [] queue = [start] adjacencyList = [[] for vertex in vertextList] for edg..
2018. 9. 25.
[heap sort] 힙 힙 힙!
Heap tree parent 와 child로 이루어진 구조 heapify: 트리를 heap 트리로 바꾸는 과정 siftdown: (max) heap에서는 parent가 child보다 크면 된다 1단계만 실제로 보자면 root(6)의 right child(4)에서는 child와 비교헀을때, 8이 가장 크기 때문에 8과 4를 swap해준다. 이러한 과정을 거치면 아래와 같이 된다. [6, 2, 4, 9, 7, 5, 8] [6, 2, 8, 0, 7, 5, 4] [6, 9, 8, 2, 7, 5, 4] [9, 7, 7, 2, 6, 5, 4] (max) heap에서는 가장 큰 값만 뽑으면 되기 때문에, 8, 5, 4의 경우 더이상 순회 하지 않는다. def heapsort(a): def swap(a, i, j):..
2018. 9. 24.