알고리즘(52)
-
MachineLearning - Introduction
* 모든 자료의 저작권은 COSERA에 있음을 미리 밝힙니다. Machine Learning - Introduction 어떤 주제에 대한 깊이있는 공부를 하기 위한 첫 단계는 우선 주제의 정의와 의미에 대해 한번 생각해보는 것일 가능성이 크다.코세라의 머신 러닝 강의에서는 머신 러닝(기계학습)의 정의를 다음과 같이 두번에 걸쳐 소개하고 있다. 1. 명확하게 프로그래밍하지 않고, 컴퓨터에게 학습할 능력을 부여하는 분야의 학문이다.2. 컴퓨터가 P라는 측정방법을 통해 퍼포먼스를 측정할 수 있는 일 T가, 경험 E를 통해 향상된다면, 이 컴퓨터 프로그램은 경험을 통해 학습한다고 정의한다. 예를 들면 다음과 같다. 체스 게임을 하는 경우- P : 프로그램이 다음에 승리할 확률- T : 프로그램이 체스 게임을 수..
2019.01.27 -
MachineLearning - Begin
학부생 연구 프로그램 (UROP) 에서 머신러닝 & 딥 러닝 관련 프로젝트를 시작하게 되었다.아무 배경 지식 없이 무작정 부딪히는 것도 어느 정도의 유익과 도움은 있겠지만미리 조금이나마 공부를 해 가면 더 많은 것들을 실전경험을 통해 가져갈 수 있지 않을까 싶었다 Machine Learning은 COSERA 에서 진행하는 Stanford Univ. 의 Andrew 교수님의 강의를 기반으로 학습할 계획이다.앞으로 이 Machine Learning 코너에서 정리하는 내용들은상당 부분 Stanford Univ. Andrew 교수님과 COSERA에 그 저작권이 있음을 미리 밝힌다 총 11주 짜리의 수업으로 강의가 진행되며, 강의 도중에 온라인으로 풀어야 하는 퀴즈와 프로그래밍 과제도 잘 나와있어 학습 효율을 올..
2019.01.27 -
[BOJ_1753 | Dikjstra]최단경로
풀이 문제 자체는 다익스트라 알고리즘을 이용해서 한 노드에서 다른 모든 노드들에 이르는최단 경로를 출력하면 되는 간단한 문제였다. 우선순위 큐 (Priority Queue)를 이용해서 다익스트라 알고리즘을 구현했고, 우선순위 큐를 이용하기 위해서 목적지 노드의 인덱스와 시작점으로부터의 거리를 저장하는 Element라는 원소 클래스를 정의하였다. *우선순위큐를 이용한 다익스트라 알고리즘은 시간 복잡도가 O(ElogV)정도이다. 문제는 간단했으나, 문제에 걸린 제약조건이 보기보다 꽤나 까다로웠다. 맨 처음에는 인접행렬과 Scanner를 통해 알고리즘을 수행했으나메모리초과와 시간초과가 동시에 발생하였다. 메모리 초과 이유는 인접행렬을 사용했기 때문인데,예를 들어 2만개의 노드가 존재한다면, Integer형을 ..
2019.01.24 -
[BOJ_11562 | Floyd]백양로 브레이크
풀이 플로이드 와샬 알고리즘을 응용해야 하는 쉽지만은 않은 문제였던것 같다.숫자에 의미를 부여하여 그래프를 구성해야 하고, 이 의미를 부여하여 그래프를 완성하는 과정 자체가생각해내기 쉽지는 않았다. 문제 해결을 위한 생각의 과정은 다음과 같다.예를 들어 1 2 0 이라는 input이 주어지면 1에서 2로 가는 경로를 dis[1][2] 배열에 생성한다. 즉, 0이라는 값을 배열에 넣어준다는 것이다. 그리고 여기서 중요한 것이 2에서 1로 가는 경로가 없지만, 1에서 2로 가는 경로가 있기 때문에양방향의 경로가 연결될 가능성이 있으므로, 1이라는 값을 dis[2][1]에 넣어준다. 다시말해서, 이미 단방향이든, 양방향이든 경로가 있으면 거기에는 도로를 추가할 일이 없으므로 0을 넣어주고단방향의 경로가 없지만..
2019.01.22 -
[BOJ_1389 | Floyd]케빈 베이컨의 6단계 법칙
풀이 플로이드 와샬 알고리즘을 조금만 응용할 수 있다면 쉽게 해결되는 문제이다.그래프의 가중치를 저장하는 dis 배열과 같이 동작하는 count배열을 추가하였다.이 count 배열은 dis 배열이 갱신될 때마다 중간에 얼마나 많은 정점들이 연결되는 지를 카운트하여 저장하는 배열이다. 예를들어1 - 2 를 연결하는 가중치를 나타내는 dis[1][2] 값이1 - 3 - 2로 갱신될 때 count[1][2]값이 count[1][3] + count[3][2] 값으로 갱신되는 것이다. 이렇게 모든 점에 대해서 플로이드 알고리즘을 한바퀴 돌고 나면, dis배열과 count배열이 갱신되게 되고각각의 count값을 i값에 대해 합을 낸 것을 구하면, 각 i 값에 따른 케빈 베이컨의 수가 나오게 된다. 정리하면, 배열 ..
2019.01.19 -
[BOJ_11650 | compareTo] 좌표 정렬하기
문제 풀이 문제 자체는 그렇게 어렵지 않았으나, compareTo 메소드를 구현하여Arrays.sort 를 사용하면 간단하게 해결할 수 있는 문제였다. 따로 Merge Sort, Quick Sort 등을 구현하기 귀찮았다면Object 객체를 하나 선언하고Comparable Class를 구현하여 기준만 제대로 할당해 준다면굉장히 간단하게 문제를 해결할 수 있었다. 간단한 설명을 덧붙이자면x좌표가 비교하고자 하는 객체의 x좌표보다 작으면 -1, 크면 1을 리턴하고같은 경우에 y좌표를 비교하여 리턴값을 -1, 1로 설정해주면간단하게 구현이 가능하다. 소스 코드 1234567891011121314151617181920212223242526272829303132import java.util.*;public cla..
2019.01.05