반응형

Software Engineering 41

벡터 데이터베이스로 검색을 강화하다.

벡터DB (Vector Database) 벡터DB는 말그대로 벡터를 저장하는 데 사용되는 데이터베이스로서 여기에는 텍스트나, 이미지와 같은 비정형 데이터를 벡터로 바꾸어서 저장하게 된다. 기존의 관계형 데이터베이스 (RDB)는 대용량 텍스트나 이미지를 비롯한 다양한 미디어 형태의 비정형 데이터를 저장하기에 적합하지 않았다. 따라서 이러한 데이터는 NoSQL에 저장하게 된다. 한편 이렇게 다양한 데이터를 저장하는 건 좋으나 정작 데이터를 찾으려 할 때 새로운 해결책이 필요하게 되었다. 대용량의 문서, 이미지, 심지어는 동영상과 같은 데이터는 어떻게 검색할 것인가하는 문제를 해결하기 위해 벡터DB가 등장하였다. 결과적으로 현재까지 비정형 데이터의 정보 검색에는 벡터DB가 많이 활용되고 있다. 벡터 임베딩 (..

[Python 문제 풀이] 프로그래머스 '배달'

Programmers Lv.2 '배달' 파이썬 코드 및 풀이 Dijkstra 알고리즘을 몰라도 DP적으로 접근하면 풀 수 있다. 접근 출발지가 정해져 있고 출발지에 인접하지 않은 지점은 반드시 어딘가를 거쳐서 온다고 확신할 수 있다. 그렇다면 거쳐온 중간지점까지 누적된 거리에 추가로 한 단계의 거리만 추가하면 출발지로부터의 거리가 된다. 어느 한 위치의 관점에서 봤을 때 여기서 주변 지점으로 더 나아갈 수 있는지 없는지만 확인하면 된다. 그리고 도달 가능했던 지점들에 대해서 도달가능한 지점이 없을 때까지 이전 수행결과를 전파시키면 된다. 이는 큰 문제를 작은 부분 문제로 쪼개 생각하는 DP와 완벽히 동일하다. 그도 그럴게 Dijkstra가 애초에 DP의 특수한 케이스이다. 현실에 적용하기 안성맞춤인 알고..

간단하게 온라인에서 Python 실행하기 (JupyterLite)

What is JupyterLite? 이번 포스팅에서는 주피터 노트북을 온라인에서 쉽게 실행할 수 있는 주피터라이트에 대해 소개한다. JupyterLite 바로가기 JupyterLite jupyter.org JupyterLite란? JupyterLite는 다양한 유즈케이스를 위해 도구, 표준 및 서비스를 제공하는 Project Jupyter의 일환으로 개발된 실험적인 기술이다. 무료로 제공되는 JupyterLite는 브라우저에서 실행되는 자체 Jupyter 환경을 제공한다. JupyterLite는 Pyodide Project를 통해 Python환경을 브라우저에서 제공하며, 커널을 포함한 Jupyter Notebook의 웬만한 환경은 모두 사용가능하다. Pyodide는 CPython을 WebAssembly..

[Python 문제 풀이] 프로그래머스 '하노이의 탑'

Recursive method로 풀 수 있는 아주아주 유명한 문제 접근 DP 방법으로 접근하여 작은 문제로 분해해야 한다. 디스크는 큰 것이 아래로 가야 하기 때문에 디스크를 옮기다 보면 결국 target pole의 가장 아래에 가장 큰 디스크를 먼저 놓게 될 것이다. N개의 디스크가 있다고 할 때 일반화된 과정은 다음과 같다. 1. N-1개의 디스크를 mid pole로 옮긴다. 2. N번 째 디스크를 target pole로 옮긴다. 3. N-1개의 디스크를 target pole로 옮긴다. *N-1까지의 디스크를 옮길 때에는 source pole, mid pole, target pole이 번갈아가며 바뀐다. 위와 같이 큰 하나의 문제가 두 개의 부분문제로 나뉠 수 있고 그것들이 다시 더 작은 문제로 나뉜..

[Python 문제 풀이] 프로그래머스 '정수 삼각형'

DP의 정석적인 유형 조건파악 - 삼각형의 높이는 최대 500 - 바로 아래 양쪽에 있는 두 개의 노드로만 누산될 수 있다. 접근 깊이 우선 탐색을 고려한다면 그것은 전체탐색이나 다름 없다. 최대가 어떤 경우에 발생하는지 알 수 없기 때문이다. 최상단에서 누적되는 방향이 두가지 밖에 없다 하더라도 경우의 수가 너무 많아진다. 다행히 최대가 되는 경로까지는 기록하지 않아도 되니 수의 합에만 집중할 수 있다. DP의 기본 원리는 큰 문제를 작은 문제로 분해하여 작성하는 것이다. 노드 하나에 더해질 수 있는 인접 노드는 두 개 뿐인 것에 주목하자. 최종적으로 최대값이 만들어지기 위해서는 단지 두 개의 노드 중 하나를 선택하는 작은 문제에서도 최대값을 취해야 한다. 작은 문제를 발견한 다음엔 이것들의 결과를 전..

DataProc vs DataFlow

Dataflow와 Dataproc은 Google Cloud Platform (GCP)에서 데이터 처리 및 분석을 위한 서비스이다. 각각의 특징과 용도를 살펴보겠다. Dataproc: 특징: Dataproc은 Apache Spark 및 Apache Hadoop과 같은 오픈 소스 분산 데이터 처리 프레임워크를 위한 관리형 서비스이다. 클러스터 기반의 환경에서 대규모 데이터 처리 작업을 실행할 수 있다. 용도: Dataproc은 대용량 데이터 분석, ETL 작업, 머신러닝 모델 학습 등에 사용된다. 복잡한 데이터 분석 및 처리 작업을 위해 유연한 클러스터를 제공하여 성능을 최적화할 수 있다. Dataflow: 특징: Dataflow는 스트리밍 및 배치 데이터 처리를 위한 관리형 서비스이다. Apache Bea..

[Python 문제풀이] 프로그래머스 '표현 가능한 이진트리'

포화 이진트리의 노드 수는 2^n - 1이다.programmers lv2 파이썬 표현 가능한 이진트리접근 이진트리로 표현가능하기 위해선 중간에 끊긴 부분이 없어야 한다. 부모노드가 없이 자식노드가 있다면 하나의 이진트리로 표현 불가능할 것이다. 해당 부분을 체크하면서 탐색하면 되겠다. numbers의 원소는 최대 10^15 이며 leaf nodes를 제외한 모든 노드를 검사한다고 하면 (10^15- 1)/2이고 numbers의 길이는 10,000이다. 따라서 N의 크기는 (10^19-10^4)/2이며 전체탐색으로 풀 수 없는 크기이다. 근데 이게 된다. 입력값을 어느정도 제한해놓았을 것이라 생각한다. 의사코드1. 이진수로 바꾼다 2. 포화이진트리를 표현하기 위해 2^n-1의 길이가 되도록 앞에 '0'을 ..

[Python 문제 풀이] 프로그래머스 '인사고과'

Programmers Lv.3 '인사고과' 파이썬 코드 및 풀이조건파악두 수가 있고 둘 중 하나라도 어느 다른 것보다 높아야 원소를 남긴다.순서는 두 수의 합을 기준으로 한다. 접근 일단 하나씩 뽑아서 서로 다른 원소들과 비교하면 시간초과가 발생한다. 따라서 사전 정렬을 통해 문제를 단순화할 필요가 있다. 편의상 각 원소의 0번째 원소를 s0, 1번째 원소를 s1라 하겠다. 두 수 중 하나만 가지고 일단 내림차순으로 정렬시킨다. s0를 기준으로 정렬했다면 뒤에 오는 원소의 s1은 작거나 같을 테니 앞에서 순서대로 처리하면 된다. s0을 기준으로 정렬했으니 s1을 가지고 비교한다. 이를 위해서 앞에서부터 발견된 s1의 최대값을 기록한다. 이 최대값보다 작은 수가 발견된다면 해당 원소는 버린다. s0가 같은..

반응형