분류 전체보기
-
네트워크: Application layer 정리2(DNS, P2P, CDN)네트워크 2020. 9. 28. 01:17
우리는 URL을 통해 네이버에 접근할 때 보통은 IP를 통해 접근하지 않는다. IP 주소를 외우기는 쉽지 않으므로 보통은 "www.naver.com" 이라는 이름으로 접근한다. "www.naver.com" 이라는 이름으로 접속 시, 자동으로 해당하는 웹 사이트의 IP로 바뀌어 접속한다. 이러한 도메인을 IP로 바꾸어 주는 것이 DNS이다. 이렇게 DNS는 host나 routers들을 구별하기 위해 필요한 정보를 제공한다. DNS는 32bit 크기의 IP address를 저장하고 제공함으로 distributed database의 속성을 갖는다. (필요한 관계를 저장해두고 필요할 때 제공한다) - Application-layer에 존재 ..
-
알고리즘: 큰 수의 곱셈 알고리즘(feat. c++ pseudocode )알고리즘 2020. 9. 27. 19:11
빅데이터 시대에서는 엄청나게 큰 숫자를 다루는 일이 존재한다. 하지만 자료형들은 수를 담을 수 있는 한계가 존재하고 배열로 표현함으로써 더 큰 정수를 표현할 수 있다. 예를 들어, S[5]S[4]S[3]S[2]S[1] = 92420로 표현할 수 있다. 이런 방식으로 표현한다면 표현하지 못할 수는 없다. 하지만 큰 수만 표현할 수 있으면 뭐하냐 효율적으로 연산이 가능해야 한다. 큰 수의 덧셈뺄셈은 많은 시간복잡도를 잡아먹지는 않지만, 곱셈의 경우에는 단순한 방법으로 quadratic-time algorithm(두개의 반복문)을 이용하여 곱셈으로 자릿수를 표현하면 시간복잡도는 다음과 같다. 하지만 이보다 더 좋은 큰자리수 곱셈알고리즘이 존재한다. 분할정복으로 이 보다 더 좋은 차수의 큰 정수 곱셈을 만들어보..
-
알고리즘: 슈트라센(Strassen) 행렬 곱셈 알고리즘 (feat.c++ ,pseudocode)알고리즘 2020. 9. 27. 15:33
이번 포스팅은 일반적인 정방행렬의 곱셈을 알아보고 더 빠른 슈트라센(Strassen) 행렬곱셈에 대해서 알아본다. void matrixMulti(const int a[][N], const int b[][N], int c[][N]) { for (int i = 0; i < N;i++) for (int j = 0; j < N; j++) { c[i][j] = 0; for (int k = 0; k < N; k++) { c[i][j] = c[i][j] + a[i][k] * b[k][j]; } } } 일반적인 행렬곱셈은 우리가 아는 행렬곱셈 그대로 코딩하면 위와 같은 3중 for문으로 구성된다. 1. 시간복잡도 분석 입력 크기 행과 열의 수가 n이라고 할 때 1) 곱셈의 관점 2) 덧셈의..
-
알고리즘: Divide and conquer를 이용한 quick sort 구현 (feat. c++)알고리즘 2020. 9. 27. 11:27
이름은 빠른 정렬이지만 사실상 가장빠른 정렬 알고리즘이라고 할 수는 없다. 차라리 분할교환정렬(partition exchange sort)라고 하는게 더 정확하다. 이번 포스팅은 quick sort를 분할 정복으로 구현한다. 사실상 quick sort 분할정복구현에는 가중치가 분할 > 정복이다. 즉 정복에는 별거 없다. 하지만 분할과정이 까다롭다. quick sort를 분할 정복으로 다음과 같이 나눈다. 배열의 원소 중 하나를 pivot으로 잡는다. (어떤 값을 pivot으로 잡든 상관 없다. 단지 기준을 만들어주기 위함이다) 주로 배열의 가장 끝값이나 처음 값을 기준으로 잡는다. 예를 들어 다음과 같은 배열이 있다. array = { 6, 2, 5, 3, 7, 10..
-
머신러닝: K-nearest neighbors란? 왜 Linear classification을 사용할까머신러닝 2020. 9. 26. 12:56
우선 K-nearest neighbors에 대해서 먼저 알아보고 왜 Linear classification을 사용하는지 알아보자. 1. K-Nearest Neighbors 새로운 데이터를 받았을 때 가장 가까이 있는 것이 어떤 데이터인가를 구분하여 classification하는 방식이다. 위는 K 값에 따라 classification한 K-nearest neighbors 방법인데 query 데이터와 가장 유사한 기준의 갯수 K를 잡아서 어떤 클래스인지 확인한다. 쿼리 데이터와 가장 유사한 클래스를 찾기 위해 distance를 구하고 현재 disatnce를 구하는 두가지 방법이 사용된다. (일반적으로 K값이 증가하면 이상치의 영향은 줄지만 분류자체를 못하게 될 수도 있다.) 1) L1 distance 두 ..
-
안드로이드: 간단 그림판 만들기!(Canvas, Paint 클래스 사용하기)안드로이드 스튜디오 2020. 9. 23. 18:20
Canvas클래스와 Paint클래스를 이용해서 간단한 그림판을 만들었다. 메뉴를 버튼을 이용해 직선, 원, 직사각형을 그릴 수 있게 했고 서브 메뉴로 색 변경 버튼을 달아 빨강, 파랑, 초록을 선택할 수 있도록 했다. 디폴트 값은 직선, 빨강이다. 메뉴버튼을 달아서 색을 변경할 수 있다. MyShape 클래스를 추가로 설정해서 다른 그림을 그려도 지워지지 않고 남아있다. 또한 xml파일을 따로 두지 않고 클래스만으로 만들었다. package org.techtown.minipaint; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import a..
-
안드로이드: xml파일 만들어서 사용하기 (대화상자, 토스트메시지 커스텀)안드로이드 스튜디오 2020. 9. 22. 16:26
대화상자와 토스트 메시지의 xml파일을 직접 만들어서 커스텀 해보았다. (기존과는 다른 대화상자 메시지) (기존과는 다른 토스트 메시지) layout 디렉토리에 다음과 같이 dialog.xml 과 toast.xml을 만들어 주었다. package org.techtown.prac02; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View;..
-
안드로이드: 파일 입출력을 통해 간단한 일기장을 만들어보자!안드로이드 스튜디오 2020. 9. 22. 16:04
파일 입출력을 이용해서 간단한 일기장을 만들어 보았다. 원하는 날짜에 글을 기록하고 수정할 수 있다. package org.techtown.iostream; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CalendarView; import android.widget.DatePicker; import android.widget.EditText; import android.widge..