CS 스터디
챕터 24: 알고리즘은 이상, 프로그래밍은 현실, 챕터 25: 다른 프로그램을 처리하기 위한 프로그램
알고리즘
추상적이고 이상적인 절차를 기술한 것. 어떤 문제의 해결을 위해 필요한 절차를 기술한 것이다.
그 절차나 방법을 이해할 수 있다면 어떤 방법으로도 기술할 수 있다.
- 입력이 있어야 한다.
- 결과를 구할 수 있어야 한다.
- 각 단계(방법)는 명백하고 모호하지 않아야 한다.
- 순서대로 실행을 할 수 있고, 실행이 종료되어야 한다.
- 모든 절차는 오류 없이 실행되어야 한다.
프로그램
실제 컴퓨터가 과제를 완료하기 위해 수행해야 하는 모든 단계를 구체적으로 서술한다.
즉, 컴퓨터가 어떤 일을 처리할 수 있게 하는 명령어의 집합을 말한다.
- 하나 이상의 알고리즘이 컴퓨터가 직접 처리할 수 있는 형태로 표현한 것일 수도 있다.
- 결과가 구해지지 않을 수도 있다.
- 순서대로 실행이 되지만, 실행이 종료되어야만 하는 것은 아니다.
- 오류가 발생할 수도 있다.
프로래밍 언어
- 저수준 언어(Low-level)
- 명령어와 데이터를 이진수로 변환하고 카드나 종이 테이프에 구멍을 뚫어서 그 수를 기계가 판독할 수 있게 만든 다음, 컴퓨터 메모리에 적재해야 한다.
- 어셈블리 언어(Assembly Language)
- 컴퓨터가 알아들을 수 있는 기계어와 일대일로 대응이 되는 컴퓨터 프로그래밍의 저급언어이다.
- 컴퓨터는 0과 1만을 인식 할 수 있는데, 이를 사람이 이해하기 쉽게 약간 변형하여 만든 언어이다.
- 기계어와 가장 가깝기 때문에 컴퓨터 구조를 이해하기 용이한 장점이 있지만, 길고 복잡하며 프로세서마다 언어가 다르다는 단점이 있다.
- 어셈블리어로 작성한 프로그램으로 프로그램에 의해서 기계어로 변환하는 것을 어셈블러라고 한다.
- 어셈블러는 프로그램을 수정하는 일을 훨씬 쉽게 해준다.
알고리즘
최단 경로 (2)
- 다익스트라:
- 출발점을 정했을 때 다른 노드에 이르는 최단거리.
- 플로이드-워셜:
- 모든 지점에서 다른 모든 지점까지 최단거리.
- 자기자신으로 가는 비용은 0
- 직접 연결되어있지 않은 경로는 무한대.


구현
INF = int(1e9)
def floyd_warshall(graph):
N = len(graph)
dist = [[INF] * (N + 1) for _ in range(N + 1)]
for idx in range(1, N + 1):
dist[idx][idx] = 0
for start, adjs in graph.items():
for adj, d in adjs:
dist[start][adj] = d
for k in range(1, N + 1):
for a in range(1, N + 1):
for b in range(1, N + 1):
dist[a][b] = min(dist[a][b], dist[a][k] + dist[k][b])
return dist
알고리즘 문제
플로이드 - 백준
최단경로 - 백준
운동 - 백준
녹색 옷 입은 애가 젤다지? - 백준
전보 - 이코테
'TIL' 카테고리의 다른 글
[TIL]20220603 (0) | 2022.06.04 |
---|---|
[TIL]20220602 (0) | 2022.06.03 |
[TIL]20220531 (0) | 2022.05.31 |
[TIL]20220530 (0) | 2022.05.30 |
[TIL]20220529 (0) | 2022.05.29 |