컴퓨터 알고리즘 2023-03-29 수업정리

Flow

Dynamic Programming - Binomial Coefficient


Dynamic Programming 적용

#include <iostream>
using namespace std;
 
void initialize_binomial_coefficient_matrix(int ** arr, int N, int K)
{
	for(int i = 0; i < N; i++) 
	{
		arr[i][0] = 1;
		for(int j = 1; j <= i; j++)
		{
			if(i == j) arr[i][j] = 1;
			else arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
		}
	}
}
 
int main()
{
	int ROW, COL;
	cout << "Type ROW and COL size of total space" << endl;
	cin >> ROW >> COL;
	int ** binomial_coefficient_matrix = new int*[ROW+1];
	for(int i = 0; i < ROW+1; i++)
	{
		binomial_coefficient_matrix[i] = new int[COL+1];
		for(int j = 0; j < COL+1; j++) 
			binomial_coefficient_matrix[i][j] = 0;
	}
 
	initialize_binomial_coefficient_matrix(binomial_coefficient_matrix, ROW+1, COL+1);
 
	cout << "type n and r for calculate nCr" << endl;
	int n, r; cin >> n >> r;
	cout << n << "C" << r << " = " << binomial_coefficient_matrix[n][r] << endl;
 
	return 0;
}

Dynamic Programming - Floyd's Algorithm


Dynamic Programming 적용

#include <iostream>
#include <climits>
using namespace std;
 
int main()
{
    cout << "Type the number of nodes : " << endl;
    int N; cin >> N;
 
    /* Floyd's Algorithm - Initialization of adjacent matrix */
    int ** graph = new int*[N+1];
    for(int i = 0; i < N+1; i++)
    {
        graph[i] = new int[N+1];
        for(int j = 0; j < N+1; j++)
        {
            if(i == j) graph[i][j] = 0;
            else graph[i][j] = 1000;
        }
    }
 
    cout << "Type the number of edges : " << endl;
    int E; cin >> E;
    cout << "Type Start Node, Destination Node and their weights of each edges" << endl;
    for(int i = 0; i < E; i++)
    {
        int start, end, weight; cin >> start >> end >> weight;
        graph[start][end] = weight;
    }
    /* Floyd's Algorithm - Initialization of adjacent matrix */
 
    /* Floyd's Algorithm - Finding lowest cost from start to destination */
    for(int transfer = 1; transfer < N+1; transfer++)
    {
        for(int start = 1; start < N+1; start++)
        {
            for(int end = 1; end < N+1; end++)
            {
                graph[start][end] = 
                (graph[start][end] <= graph[start][transfer] + graph[transfer][end])
                 ? graph[start][end] : graph[start][transfer] + graph[transfer][end];
            }
        }
    }
    /* Floyd's Algorithm - Finding lowest cost from start to destination */
 
    for(int i = 1; i < N+1; i++)
    {
        for(int j = 1; j < N+1; j++)
        {
            if(graph[i][j] >= 1000) cout << "INF" << " ";
            else cout << graph[i][j] << " ";
        }
        cout << endl;
    }
 
    return 0;
}