본문 바로가기
반응형

Computer10

Leetcode 큐빗(Qubit)을 다룬 문제 Quantum bit (Qubit)은 양자컴퓨팅에서 사용하는 개념이라 보통 생소한 개념인데 리트코드 문제로 나와서 인상깊어서 올려본다. 458. Poor Pigs 처음에 언듯보면 바이너리서치를 쓰는 문제 같지만, 솔루션을 보고 충격받았다. Qubit 개념을 적극적으로 쓰는 문제 였다. 솔루션 설명에서도 보듯이 최근 Google, IBM, Amazon 같은 회사에서 양자컴퓨터 개념을 물어보는 문제도 종종 나오기 시작한 것 같다. 다시 본론으로 돌아오면 문제는 돼지 하나를 큐빗 하나로 가정하여 독이든 버켓 하나를 찾는 것이다. 큐빗 처럼 동작하게 하기위해서 문제에서는 몇가지 가정을 준다. 돼지는 동시에 여러 버켓을 먹을 수 있다. 독이든 버켓을 먹은 돼지는 m분후 죽는다. m분동안 다른 돼지에게 버켓을 먹일.. 2022. 8. 8.
Python bisect 라이브러리 알고리즘 활용 개요 이분 탐색(Binary Search)는 알고리즘 문제를 풀다보면 많이 만나는 문제유형이다. 매번 코딩해서 바이너리 서치를 구현해도 좋지만 문제를 많이 풀다보면 매번 구현하기에 피로가 느껴지기 쉽다. 그래서 본인이 생각하는 접근이 맞는지 빨리 확인하고 문제 푸는 용도로 라이브러리를 사용하면 유용한 것 같다. 다음 리트코드 문제를 예시로 bisect 모듈을 사용 예시를 보이겠다. 34. Find First and Last Position of Element in Sorted Array 사용 예시 문제 설명 자체는 간단하다. Non-decreasing (증가하는) 순서로 주어진 리스트에서 주어진 값의 시작과 마지막 인덱스를 반환하는 문제인다. bisect.bisect_left는 타겟 값중 가장 작은 인덱.. 2022. 7. 26.
CUDA 병렬 프로그래밍(Parallel Programming) 행렬 연산 우선 행렬(Matrix) 연산을 하기 전에 CUDA에서 어떤 방식으로 여러 개의 쓰레드를 돌리는지를 알아야한다. CUDA에선 BLOCK과 GRID로 쓰레드 그룹을 관리한다. BLOCK에서는 여러 개의 THREAD를 (x, y, z) 즉, 3차원 이하로 가지고 있을 수 있고, GRID는 여러 BLOCK을 2차원 이하(x, y) 로 가지고 있을 수 있다. 그림으로 나타내면 다음과 같다. 그리고 한 BLOCK에는 1024개가 넘는 THREAD를 가지고 있을 수 없다. 그리고 이와 같은 BLOCK과 GRID를 정의한 다음에 Kernel Function 즉 Device에서 돌아갈 함수랑 같이 쓰여야한다. __global__ void kernelFunc(); dim3 DimGrid(10, 10); //100 thr.. 2016. 10. 16.
CUDA 병렬 프로그래밍(Parallel Programming) 개념 및 데이터 전송(Data transfer) 최근에 병렬 프로그래밍이 많은 관심을 받고 있다. 그 이유는 병렬 프로그래밍을 이용하면 비교적 저렴한 가격에 슈퍼컴퓨터의 성능을 얻을 수 있다는데 있다. 하지만 어떻게 해서 이런 일이 가능한지 우선 알아보도록 하자. GPU 그래픽카드는 그래픽을 실제 출력장치에 그려주는 역할을 한다. 하지만 출력장치의 하나 하나의 Pixel에 대해서 그래픽을 매칭시켜야 하기 때문에 디스플레이 기술이 발전할 수록 그래픽카드는 발전하였다. 그리고 그 그래픽카드에서 그래픽 처리를 하는 장치를 GPU 라고 한다. 많은 연산을 필요로하는 그래픽을 처리하는 GPU는 CPU와 구조가 많이 다르다. 아래 사진을 보면 명확하기 확인할 수 있다. GPU가 CPU보다 엄청나게 많은 량의 ALU를 가지고 있는 것을 알 수 있다. CPU는 순차.. 2016. 10. 15.
기초적인 동적계획법(Dynamic Programming) 문제 풀기 다이나믹 프로그래밍은 문제를 많이 풀어봐야지 느낌이 오는 것 같다. 그래서 이 글에서는 가장 기초적인 1~2차원 다이나믹 프로그램을 활용해야하는 문제에 내가 했던 접근을 설명할 생각이다. 계단오르기 2579번 계단오르기 우선, 이 문제의 설명을 보면 다음과 같은 제약들이 있다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다. 연속된 세 개의 계단을 모두 밟아서는 안된다. 단, 시작점은 계단에 포함되지 않는다. 마지막 도착 계단은 반드시 밟아야 한다. 이 조건을 모두 만족시키는 경우 중에서도 최대의 값으로 가는 경우의 점수를 구해야한다. 다이나믹 프로그래밍에선 중요한 것은 다음과 같다. 이미 계산했던 값은 계산하.. 2016. 10. 14.
깃허브(Github) 기초적인 사용법 최근 학교에서 강제로 Github를 쓰도록하고 있다... 그래서 이 포스트에선 깃허브를 배우면서 알게 된 기초적인 사용설명을 설명해보고자 한다. 우선 왜 깃허브를 쓰는지에 대해 말하자면 프로젝트를 진행할 때, 반드시 프로젝트의 버전 관리를 하여야 한다. 그래야만 나중에 프로젝트 진행 중에 문제가 생길 시 되돌릴 수가 있고, 프로젝트가 어느 정도로 진행되었는지 알 수 있기 때문이다. 깃(Git) 이런 버전 관리 툴은 이미 많이 존재하지만, 최근에 가장 많이 사용하는 툴은 깃(Git)이다. 그 이유는 다른 버전 관리 툴과 다르게 "분산(Distributed)"을 하기 때문이다. 분산을 통해 버전 기록과 통합을 별도로 진행을 해서 프로젝트의 자유도를 높일 수가 있다고 한다. 각자의 버전 기록을 할 때는 com.. 2016. 10. 13.
반응형