backend 269

알고리즘 기초: 이진트리 (Binary Search)란? (+파이썬코드)

Binary search 순차탐색: 특정 데이터를 찾기 위해서 앞에서부터 확인하는 방법 이진탐색: 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 시작점, 끝점, 중간점 ex. 이미 정렬된 10개의 데이터 중 값이 4인 원소를 찾는 예시 시작접: 0, 끝점: 9, 중간점 4 (index) 중간점을 기준으로 다시 끝점, 중간점을 옮김 시간복잡도: logN (단계마다 탐색범위를 2로 나누는 것) 이진탐색 소스: 재귀적 구현 def binary_search(array, target, start, end): if start > end: return None mid = (start + end) // 2 # 찾은 경우 중간점 인덱스 반환 if array[mid] == target: return mid # 중간점..

알고리즘 기초: 그리디 (Greedy) 알고리즘이란? (파이썬코드)

Greedy algorithm 현재 상황에서 지금 당장 좋은것만 고르는 방법 문제를 풀기 위한 최소한의 아이디어 정당성 분석: 이 방법으로도 문제가 제공하는 최적의 해를 구할 수 있는지 일반적인 상황에서 그리디 알고리즘으로는 최적의 해를 보장하지 못할 때가 많음 문제 거스름돈 문제 (500, 100, 50, 10) 정당성 분석 큰 단위가 항상 작은 단위의 배수이기 때문에 작은 단위의 배수가 아니라면 최적의 해를 보장해주지 못함 (i.e. 500, 400, 100...) 시간복잡도 화폐의 개수에 따라 증가하므로 O(K) (화폐가 K개일때) n = 1260 count = 0 coins = [500, 100, 50, 10] for coin in coins: count += n // coin n = n % co..

Nand2tetris: 02 boolean arithmetic and the alu

2.1. Binary numbers 2진법에 대한 간단한 설명. 자세한 내용은 생략 2.2. Binary addition 이진법을 더하는 법. 10진수처럼 더하면 된다. 다만 할당된 비트 (ex. 8bit + 8bit)를 넘어서는 carry는 overflow로 처리된다. 3가지 형태의 adder를 만들어볼 예정 Half adder 두 bit를 더함. a, b를 더해서 sum(값)과 carry가 나옴 | a | b | sum | carry | | 0 | 0 | 0 | 0 | | 0 | 1 | 1 | 0 | | 1 | 0 | 1 | 0 | | 1 | 1 | 0 | 0 |Full adder 위의 half adder에서 이전 계산에서 나온 carry도 받는 adder a, b, c(이전 carry)를 받아서 s..

Nand2tetris: 01. boolean functions and gate logic

1.1 boolean logic 불 대수: true/false, yes/no, on/off, 1/0 같은 2진수(bool) 값을 다루는 대수학. bool function: 2진수를 입력받아 2진수를 출력하는 함수 컴퓨터는 2진수를 표현하고 처리하는 하드웨어이기 때문에 불 함수는 하드웨어 아키텍처의 중심. Boolean Operation AND, OR, NOT Boolean expression NOT(0 OR (1 AND 1)) = NOT(0 OR 1) = NOT(1) = 0general expression을 만들 수 있음 f(x, y, z) = (x AND y) OR (NOT(x) AND z)이 함수가 어떤 함수인지 알기 위해서는 모든 x, y, z을 truth table로 만들어보면 된다. 1.2 Bo..

리눅스 쉘 스크립트란? 첫 쉘 스크립트를 만들고 써보자

지금까지는 command line의 tools들을 사용하였다. 이는 많은 컴퓨팅 문제를 해결해주긴 하지만, 이들만으로 해결하기 힘든 문제들도 있다. 이 다양한 툴들을 사용하여 자신만의 프로그램을 작성한다면, shell에서 더 복잡한 태스크들도 실행시킬 수 있는데 이를 shell scripts라고 부른다. shell script란? 간단하게, 쉘 스크립트는 "여러 명령어들을 담은 파일"이다. 쉘은 이 파일을 읽고 명령어를 실행시켜 준다. 쉘 스크립트는 어떻게 동작할까 쉘 스크립트를 만들고 실행하기 위해서, 세가지 단계를 해야한다. Write a script: shell scipt는 text file이다. syntax highlighting이 지원되는 에디터에서 쓰면 더 좋다. Make the script ..

backend/ubuntu 2021.04.04

kafka-python 사용법

kafka python usage 카프카 셋업은 이전 글인 kafka setup for ec2 server에서 설명되어있다. 해당 셋업을 완료한 후 테스트를 하면 편리하다. python client로 실제 메세지 처리하는 방법. kafka python client는 크게 세가지 정도가 있다. confluent-kafka-python: 퍼포먼스가 가장 좋음. confluent의 공식 클라이언트. kafka-python: pure python. confluent-python에 비해서는 속도가 느림 pykafka: 2018년 이후 업데이트가 잘 안됨.. 나는 다음의 이유로 kafka-python을 사용하였다. 활발한 contribution 및 활동 직관적이고 간결한 사용법 sync 기준 confluent-ka..

backend/python 2020.12.31

Kubernetes CRD (Custom Resource Definition)

Kubernetes CRD (Custom Resource Definition) kubernetes api에 자체 리소스를 추가할 수 있음. CRD를 통해 CLI를 지원하고 persistent storage를 제공하는 CRUD API가 제공됨. object 모델을 만들고 원하는만큼 리소스를 생성/삭제/사용 가능하다. 뿐만 아니라 이를 감시하고 컨트롤하는 컨트롤러를 가질수도 있다. (ArgoCD가 이런 방식으로 작동한다) Example superhero.yaml로 SuperHero CRD를 만들어보자. apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: # spec과 일치해야됨. (.) name: superhero..

backend 2020.12.25