본문 바로가기

분류 전체보기20

[Journal] 적분 응용 - python을 이용한 몬테카를로 적분의 구현 서론 미적분은 인공지능 등의 정보과학 분야에서는 자주 사용하지만, 알고리즘과 그 응용에 대한 분야에서는 잘 사용되지 않는다. 현장에서 사용되는 미적분 알고리즘에 대해 조사해보던 중 몬테카를로 적분을 알게 되었고, 이에 대해 탐구해 보고자 한다. 몬테카를로 적분(이하 MC 적분)에 대해 학습하고 python으로 분석한 뒤, 더 나은 알고리즘으로 발전시켜보고자 한다. 배경 1) Introduction of Monte Carlo integration 몬테카를로 적분(이하 MC적분)은 난수를 이용하여 적분값을 근사하는 기술이다. 주로 다차원의 정적분 문제를 효율적으로 해결하기 위해 사용된다. 정적분값 I를 근사하는 과정은 아래와 같다. 수식을 그림으로 이해해 보자. 정적분의 결과 I(회색 면적)을 구하기 위해 .. 2024. 4. 7.
[Journal] 미분 응용 - Python으로 경사하강법 구현하기 서론 정보과학 분야에서 미분을 응용한 사례가 있는지 알아보고자 하였다. 경사하강법에서 미분을 사용해 최적해를 구한다는 것을 알았고, 이를 파이썬으로 구현 해보고자 한다. 이론적 배경 편미분 편미분이란 다변수 함수의 특정 변수를 제외한 나머지 변수를 상수로 간주하여 미분하는 것이다. 예를 들어보자. 를 에 대해 편미분한 결과는 다음과 같이 표현될 수 있다. 기울기 함수 f가 모든 변수에 대해 편미분 가능할 경우, f의 기울기는 각 변수에 대한 편미분을 좌표로 갖는 벡터이다. 경사하강법 경사 하강법은 1차 근삿값 발견용 최적화 알고리즘이다. 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다. 복잡하고 비선형적이어서 미분을 통해 극값을 구하기 어려운 경우 .. 2023. 12. 2.
[DREAMHACK] Robot Only https://dreamhack.io/wargame/challenges/680 Robot Only Description 로봇만 이용할 수 있는 도박장이에요. 로봇임을 인증하고 경기에서 이겨 플래그를 구매하세요! dreamhack.io crypto level 1으로 분류되어있지만 misc에 가깝다. 다른 말로 하면, crypto 관련 지식 없이도 문제를 해결할 수 있다. 아래와 같은 방법으로 문제를 해결한다. 특별히 코드를 짜지 않아도 동적 분석만으로 해결 가능하기 때문에, 정적 분석을 자세하게 할 것이다. 정적 분석 : robot_only.py의 코드를 해석하고 nc에서 실행시킬 것이다. 취약점을 찾는다. 동적 분석 : DREANHACK 서버를 생성해 발견한 취약점으로 flag를 얻는다. main() 부.. 2023. 11. 16.
[DREAMHACK] random-test https://dreamhack.io/wargame/challenges/931 random-test Description 새 학기를 맞아 드림이에게 사물함이 배정되었습니다. 하지만 기억력이 안 좋은 드림이는 사물함 번호와 자물쇠 비밀번호를 모두 잊어버리고 말았어요... 드림이를 위해 사물함 번호와 dreamhack.io 웹해킹 문제이다. 4자리 아이디(영문 소문자 + 숫자)와 비밀번호(100~200)를 맞추면 FLAG를 얻을 수 있다. 주어진 python 파일을 열어 작동 원리를 알아보고, brute force 방식을 이용해 문제를 해결한다. app.py의 전문은 아래와 같다. 설명이 필요한 부분에 주석을 달았다. #!/usr/bin/python3 from flask import Flask, reques.. 2023. 11. 16.
[BOJ] [C++] 1028 다이아몬드 광산 https://www.acmicpc.net/problem/1028 1028번: 다이아몬드 광산 첫째 줄에 R과 C가 주어진다. R과 C는 750보다 작거나 같은 자연수이다. 둘째 줄부터 R개의 줄에는 다이아몬드 광산의 모양이 주어진다. www.acmicpc.net 입력 내에서 가장 큰 다이아몬드 모양의 길이를 출력하는 문제이다. 문제 해결을 위해선 공통적으로, 대각선 길이에 대한 아이디어가 필요하다. 문제의 핵심은 grid[i][j]로부터 뻗어나오는 대각선의 길이를 배열에 저장하는 것이다. 이 과정에서 Dinamic Programming을 사용하고, 이후는 다양한 방법으로 접근할 수 있다. DP_D[2][i][j], DP_U[2][i][j]를 만들었다. 각각은 연속된 1의 개수를 의미한다. DP_D[0].. 2023. 11. 4.
[Journal] 제2코사인법칙 응용 - 뉴스 분류 알고리즘 서론 웹페이지에 무언가를 검색하고, 그것과 관련된 기사를 제공하는 것이 검색엔진의 역할이다. 여기서 생기는 합당한 의문점은 ‘어떻게 관련된 기사를 찾는가?’이다. 도서 ‘수학의 아름다움’의 내용 중, 코사인법칙과 벡터 연산을 응용하여 텍스트끼리의 유사성을 비교할 수 있다는 내용이 들어있다. 이것에 대해 추가적으로 조사하고 직접 구현해보고자 한다. 기본 원리 무언가를 검색하면 그것과 관련된 기사를 제공하는 것이 검색엔진의 역할이다. 여기서 생기는 합당한 의문점은 ‘어떻게 관련된 기사를 찾는가?’이다. 먼저 사용자가 검색한 문장의 각 단어들에게 가중치를 매긴다. 이후 가중치를 이용해 임의의 뉴스가 얼마나 검색한 문장과 관련되었는지 연산한다. 이 과정에서 코사인법칙과 벡터 연산을 응용하는 것이다. TF – I.. 2023. 10. 27.