일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- SWEA
- php 프로그래밍 입문 문제풀이
- 자바 스프링
- 최단 경로
- php 프로그래밍 입문 연습문제
- C언어
- php 프로그래밍 입문 솔루션
- Java
- programmers
- php 프로그래밍 입문
- 플러터 개발환경 설정
- spring
- Flutter
- php 프로그래밍 입문 3판
- 페이코 친구코드
- 자바
- 배열
- 한정 분기
- C
- 플러터
- php
- 페이코 추천인
- JAVA SPRING
- 페이코 초대코드
- php 프로그래밍 입문 예제
- 스프링
- 페이코 추천인코드
- php 프로그래밍
- 파이썬
- Today
- Total
목록파이썬 (13)
ImJay
Traveling Salesman Problem(TSP) 최고 우선 검색 기반 한정 분기(Branch and Bound) 서론 Traveling Salesman Problem(TSP) : 외판원이 자신의 집이 위치하고 있는 도시에서 출발하여 다른 도시들을 "각각 한번씩만 방문"하고, "다시 자기 도시로 돌아오는" 가장 짧은 일주여행경로(tour)를 결정하는 문제 최고 우선 검색 기반 한정 분기(Branch and Bound) 전략 - 각 노드는 출발노드로부터의 일주여행경로를 나타냄 - 단말노드에 있는 일주여행경로를 모두 검사하여 그 중에서 가장 비용이 낮은 일주여행경로를 찾으면 된다. (무작정 알고리즘: Brute Force 전략) - 분기한정 가지치기로 최고우선 검색을 사용하기 위해서 각 노드의 한계치..
0-1 Knapsack Problem 최고 우선 검색을 사용한 한정분기 (Branch and Bound) 서론 한정 분기 전략의 동기 : 되추적의 비효율되추적의 탐색 과정에서 Valid가 적용되더라도 여전히 상당한 비율의 정점을 방문하지 않아도 됨을 발견 되추적의 비효율 해결책 : 각 노드를 방문할 때마다 한계치(bound)를 계산 한계치(Bound) : 해당 노드로부터 가지를 뻗어나가서(branch) 얻을 수 있는 해답치의 한계 값 0/1 Knapsack Problem의 최고 우선 검색을 사용한 한정분기(Branch and Bound) 전략 1. 그 노드의 profit과 weight를 계산한다. 2. 그 노드의 bound를 계산한다. 3. 현재 노드의 profit이 maxprofit보다 크면 maxpr..
0-1 Knapsack Problem 너비 우선 검색을 사용한 한정분기 (Branch and Bound) 서론 한정 분기 전략의 동기 : 되추적의 비효율되추적의 탐색 과정에서 Valid가 적용되더라도 여전히 상당한 비율의 정점을 방문하지 않아도 됨을 발견 되추적의 비효율 해결책 : 각 노드를 방문할 때마다 한계치(bound)를 계산 한계치(Bound) : 해당 노드로부터 가지를 뻗어나가서(branch) 얻을 수 있는 해답치의 한계 값 기존 깊이 우선 검색(DFS) 기반 알고리즘은 분기한정의 특성을 제대로 활용하고 있지 못함. 그렇다면… 너비 우선 검색(BFS)을 수정하여 구현 0/1 Knapsack Problem의 너비 우선 검색을 사용한 한정분기(Branch and Bound) 전략 1. 그 노드의 p..
0-1 Knapsack Problem 깊이 우선 검색을 사용한 한정분기 (Branch and Bound) 서론 한정 분기 전략의 동기 : 되추적의 비효율되추적의 탐색 과정에서 Valid가 적용되더라도 여전히 상당한 비율의 정점을 방문하지 않아도 됨을 발견 되추적의 비효율 해결책 : 각 노드를 방문할 때마다 한계치(bound)를 계산 한계치(Bound) : 해당 노드로부터 가지를 뻗어나가서(branch) 얻을 수 있는 해답치의 한계 값 0/1 Knapsack Problem의 깊이 우선 검색을 사용한 한정분기(Branch and Bound) 전략 1. 그 노드의 profit과 weight를 계산한다. 2. 그 노드의 bound를 계산한다. 3. 현재 노드의 profit이 maxprofit보다 크면 maxpr..
색칠 문제 - 백트래킹(Backtracking) 상태 공간 트리와 알고리즘 서론 상태 공간 트리(State Space Tree)는 문제 해결 과정의 중간 상태를 각각 한 노드로 나타낸 트리입니다. 백트래킹(Backtracking)은 상태 공간 트리에서 새로운 탐색이 무의미하다고 판단되면, 다른 새로운 탐색이 가능한 선택 포인트(choice point)로 backtrack하여 새로운 탐색을 시도합니다. 더 이상의 선택 포인트가 존재하지 않으면, 탐색은 실패로 끝납니다. 되추적은 갈림길에 표시를 해두고 막다른 골목에 다다르면 갈림길까지 되돌아가서 다른 골목으로 가보는 방법입니다. 깊이 우선 탐색과 관련 있습니다. 색칠 문제(Coloring Problem)는 주어진 그래프에서 인접한 정점은 같은 색을 칠할 수..
허프만 알고리즘을 통한 최적 이진 문자 코드 구축 과정 분석하기 (허프만 코드) 서론 허프만 코드(Huffman Code)란 문자들로 이루어진 데이터 파일 크기를 작게 만들기 위해 문자 각각을 코드화 하는 방법 중 하나입니다. 더 자주 출현하는 문자에 대하여 더 짧은 코드를 할당합니다. 최적 이진 코딩 문제(Optimal Binary Code)는 주어진 텍스트 파일에 있는 문자들을 이진 코드로 표현하기 위해 필요한 비트의 개수가 최소가 되는 이진 문자 코드를 찾는 문제입니다. 즉, 허프만 코딩 문제는 주어진 문자 집합에 대해 최적 코드에 해당하는 이진 트리를 구축하여 최적 이진 문자 코드(Huffman code)를 만들어 보는 문제입니다. 본론 허프만 코딩 문제 알고리즘 1) Priority Queue ..
[파이썬/Python] 최단 경로 알고리즘 작동원리 이해하기 ( Floyd-washall ) 서론 [파이썬/Python] 최단 경로 알고리즘 구현하기 ( Dijkstra / Bellman-ford / floyd-warshall ) 최단 경로 알고리즘 구현하기 ( Dijkstra / Bellman-ford / floyd-warshall ) 서론 최단 경로(Shortest Paths)는 두 정점 사이의 경로를 구성하는 모든 간선의 가중치 합이 최소인 경로를 말합니다. 최단 경.. develop247.tistory.com 이전 시간 구현하였던 Floyd-washall 알고리즘의 작동원리에 대해 간단한 예제를 통해 그림으로 이해해보려고 합니다. 본론 문제 1. Floyd-washall 알고리즘을 이용하여 위 그..
[파이썬/Python] 최단 경로 알고리즘 작동원리 이해하기 ( Dijkstra ) 서론 [파이썬/Python] 최단 경로 알고리즘 구현하기 ( Dijkstra / Bellman-ford / floyd-warshall ) 최단 경로 알고리즘 구현하기 ( Dijkstra / Bellman-ford / floyd-warshall ) 서론 최단 경로(Shortest Paths)는 두 정점 사이의 경로를 구성하는 모든 간선의 가중치 합이 최소인 경로를 말합니다. 최단 경.. develop247.tistory.com 이전 시간 구현하였던 Dijkstra 알고리즘의 작동원리에 대해 간단한 예제를 통해 그림으로 이해해보려고 합니다. 본론 문제 1. Dijkstra 알고리즘을 이용하여 위 그래프의 v4를 시작으로 하는..
최소 비용 신장 트리 알고리즘 작동원리 이해하기 ( Prim / Kruskal ) 서론 [파이썬/Python] 최소 비용 신장 트리 알고리즘 구현하기 ( Prim / Kruskal ) 최소 비용 신장 트리 알고리즘 구현하기 서론 신장 트리(Spanning tree)란 연결된 비방향성 그래프에서, 노드는 그대로 유지한 채로, 순환경로(cycle)가 없어지도록 이음선을 제거하여 구성한 연결된 develop247.tistory.com 이전 시간 구현하였던 Prim, Kruskal 알고리즘의 작동원리에 대해 간단한 예제를 통해 그림으로 이해해보려고 합니다. 본론 문제 1. Prim 알고리즘을 이용하여 위 그래프의 최소비용 신장 트리를 구하는 과정을 제시하시오. 처음 start_node = 1이므로, d[1] =..
동적 프로그래밍 - 행렬 곱셈 순서 계산하기 ( Brute-Force Algorithm ) 서론 동적 프로그래밍(Dynamic Programming)은 최적 부분 구조(Optimal Substructure)를 가지고 있고, 재귀 호출 시 비효율적인 중복이 발생하는 경우(Overlapping Recursive Calls) 사용하면 효과적이다. 최적 부분 구조(Optimal Substructure)란 큰 문제의 최적 솔루션에 작은 문제의 최적 솔루션이 포함되는 것을 말한다. 동적 프로그래밍을 적용하기 위해 항상 최적 부분 구조를 갖고 있는지 먼저 확인해야 한다. 그렇다면, 대표적인 동적 프로그래밍 문제로 행렬 곱셈 순서에 대해 동적 프로그래밍을 적용해보자. 본론 i × j 행렬과 j × 행렬을 곱하기 위해서..