본문 바로가기
Algorithms

그림으로 개념을 이해하는 알고리즘 - CH 08

by soojitasan 2024. 6. 26. 16:57

 

 

CH 08 탐욕 알고리즘

 

- 탐욕 알고리즘 : 각각의 단계에서 최적의 수 찾기 (=국소최적해)

  > 최종적으로 전역 최적해를 산출

 

- 근사 알고리즘 : 정답과 가장 비슷한 값 유추 (정확한 답 계산에 시간이 너무 오래걸릴 경우)

  > 성능 기준 : 얼마나 빠른지, 최적해에 얼마나 가까운지

 

- 집합 커버링 문제 : 가능한 모든 집합을 계산해야 풀이 가능

  > 모든 경우의 수를 따져서 최단/최소를 구하는 문제 => NP-완전 문제

 

** NP-완전 문제 특징

1) 항목에 적을 때는 알고리즘이 빠른데, 항목이 늘어나면 갑자기 느려짐

2) 'X의 모든 조합'과 같은 표현

3) 더 작은 하위 문제로 변환할 수 없어 X의 가능한 모든 버전을 계산해야하는 경우

 

## CH 08. 탐욕 알고리즘

states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"])

stations = {}
stations["kone"] = set(["id", "nv", "ut"]) # 집합 형태로 저장
stations["ktwo"] = set(["wa", "id", "mt"])
stations["kthree"] = set(["or", "nv", "ca"])
stations["kfour"] = set(["nv", "ut"])
stations["kfive"] = set(["ca", "az"])

final_stations = set()

while states_needed:
  best_station = None
  states_covered = set()
  for station, states in stations.items():
    covered = states_needed & states ## 교집합
    if len(covered) > len(states_covered):
      best_station = station
      states_covered = covered

  states_needed -= states_covered
  final_stations.add(best_station)

print(final_stations)

 


참고자료

Hello Coding 그림으로 개념을 이해하는 알고리즘