일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- SQL
- Autoencoder
- 신경망
- CNN
- deep learning
- 소수
- 오토인코더
- mnist
- neural network
- bayesian
- A Neural Algorithm of Artistic Style
- 역전파법
- 수달
- 히토요시
- 비샤몬당
- 냥코 센세
- project euler
- 오일러 프로젝트
- 베이지안
- 딥러닝
- 자전거 여행
- 소인수분해
- backpropagation
- 역전파
- 합성곱 신경망
- 전처리
- Convolutional Neural Network
- Gram matrix
- c#
- Python
- Today
- Total
목록IT (69)
통계, IT, AI
1. 문제 오라클 DB를 사용하던 중 다음과 같은 상황이 발생했다. 데이터를 화면으로 내보낼 때 유효숫자에 반올림이 있어야 한다. 예를 들면, 0.000001247을 유효숫자 3자리에서 반올림하면 0.00000125가 된다. 2. 해결 방법 먼저 0.000001247에 적절한 수를 곱하여 0.1247을 만든다. 그리고 ROUND 함수를 사용하여 0.125를 만든 뒤 다시 그 수로 나누어 0.00000125를 구하면 된다. 이때, 0.000001247은 1.247E-6으로 표현할 수 있다. 그러므로 1E-5이 "적절한 수"이다. 단, 절대값이 1보다 큰 숫자는 위와 같은 변환을 거칠 필요가 없이 바로 ROUND 함수로 처리할 수 있다. 아래는 오라클에서의 query이다. SELECT T.N AS N , R..
1. 개요 문제는 이곳에서 확인할 수 있다. 1부터 100까지 합의 제곱과 1부터 100까지 제곱의 합과의 차를 구하는 문제이다. 2. Ver 1.0 1부터 \(k\)까지 자연수의 합의 제곱과 제곱의 합의 차이는 다음과 같은 간단한 공식으로 구할 수 있다. $$ \left(\sum_{i=1}^{k}i\right)^2 - \sum_{i=1}^{k}i^2 = \left\{\frac{k(k+1)}{2}\right\}^2 - \frac{k(k+1)(2k+1)}{6}$$ // 자바스크립트로 구현한다. var pow = Math.pow; var k = 100; var front_part = pow( k, 2 ) * pow( k+1, 2 )/4 var rear_part = k * ( k+1 ) *(2*k+1)/6 a..
1. 개요 문제는 이곳에서 확인할 수 있다. 1부터 20까지의 최소공배수(Least Common Multiple, LCM)를 구하는 것이 목적이다. 2. Ver 1.0 먼저 1과 2의 LCM을 구한다. 그 LCM과 3과의 LCM을 구한다. 이를 20까지 반복한다. 두 수의 LCM을 구하기 위해서는 먼저 두 수를 소인수분해 해야 한다. 그리고 공통인수는 거듭제곱이 더 큰 것을 곱하고, 공통인수가 아닌 것은 모두 곱하면 된다. 예를 들어, \(20=2^2 5^1, 24=2^3 3^1\)이므로 20과 24의 최소공배수는 \( 2^3 3^1 5^1 = 120\)이다. # -*- coding: utf-8 -*- # ver 1.0 import numpy as np import utils as u import fun..
문제는 이곳에서 확인할 수 있다. 어떤 세자리수를 곱하여 만들 수 있는 가장 큰 palindromic number를 찾자. 이때 palindrome은 앞으로 읽으나 뒤로 읽으나 같은 문자열을 가르킨다. # -*- coding: utf-8 -*- # ver 1.0 palindrome = [ x*y for x in range( 999, 99, -1 ) for y in range( x, 99, -1 ) if str(x*y) == str(x*y)[::-1] ] print max( palindrome ) 사람들의 코드를 보니 더 나은 아이디어가 있어 이를 소개한다. 6자리의 palindrome \( n\)은 아래와 같이 표현된다. \(n = 100000x + 10000y + 1000z + 100z + 10y + ..
문제는 이곳에서 확인할 수 있다. 600851475143의 가장 큰 소인수를 찾는 문제인데, 이를 해결하기 위해서는 어떤 수가 소수인지 먼저 파악해야 한다. 이를 위하여 소수 판별에 관한 내용을 따로 포스트하였다. 600851475143를 소수로 계속 나누되 1을 만드는 소수를 찾으면 된다. # -*- coding: utf-8 -*- import numpy as np import utils as u # class Prime p = u.Prime() n = 600851475143 # n is not divisible by 2 prime_candidate = 3 find_prime = True while True: while not p.is_prime( prime_candidate ): prime_candi..
오일러 프로젝트의 문제들 가운데에는 소수와 관련된 것들이 많다. 그래서 문제를 계속 풀기 전에 어떤 수가 소수인지 판별하는 코드를 작성하고 넘어가고자 한다. 소수는 1과 자기 자신으로 밖에 나누어 떨어지지 않는 1보다 큰 자연수로 정의된다. 이 정의를 이용하여 어떠한 수가 소수인지 판별하기 위한 룰을 몇가지 생각해 볼 수 있다.1. 2보다 작은 정수와 2를 제외한 짝수는 소수가 아니다. ex) 16: 2로 나누어 떨어지므로 소수가 아니다. 2. 그 수의 제곱근보다 작거나 같은 소수로 나누어 떨어지면 소수가 아니다. ex) 26: 2, 3, 5로만 나누어 떨어지는지 확인하면 된다.. 만약 4로 나누어 떨어진다면 2로도 나누어 떨어질 것이기 때문이다. 문제는 2번 룰에서, 소수를 찾기 위해서 소수를 찾아야 ..
문제에 대한 설명은 이곳에서 확인할 수 있다. 먼저 직관적으로 떠오르는 방식으로 구현하고 이를 ver 1.0이라고 하자. # ver 1.0 a_n2 = 1 a_n1 = 2 answer = a_n1 # since 2 is even while True: a_n = a_n1 + a_n2 if a_n > 4000000: break if a_n % 2 == 0 : answer += a_n a_n1, a_n2 = a_n, a_n1 print answer 문제를 풀고 사람들의 풀이를 보니 더 나은 방법이 있다는 것을 알게 되었다. 이를 소개한다. 먼저 수열의 시작을 1, 1로 바꾸자. 이렇게 바꾸면 매 3번째 수가 짝수가 되어 계산을 줄일 수 있다. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,..
문제에 대한 설명은 이곳에서 확인하자. 이 문제는 굳이 코딩을 거치지 않아도 풀 수 있는 것 처럼 보인다. 그래도 project Euler의 취지에 맞도록 코딩을 하여 문제를 풀어보자. 파이썬 코드는 다음과 같다. answer = sum( [ i for i in range(1,1000) if i % 3 ==0 or i % 5 ==0 ] ) print answer scala 코드는 다음과 같다. object HelloWorld extends App { val x = List.range(1, 1000).filter(x => x % 3 == 0 || x % 5 == 0).sum println(x) } 답은 233168 이다.