Skip to content

Commit 6b78cf3

Browse files
author
JeonggyunKim
committed
init
0 parents  commit 6b78cf3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1946
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
_book
2+
.DS_Store
3+
src/.DS_Store
4+
node_modules

BF/bf_concept.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Bloom Filter
2+
3+
## Concept
4+
5+
Bloom Filter는 1970년에 Burton Howard Bloom에 의해 고안되어 원소가 집합에 속하는지 여부를 검사하는데 사용되는 공간 효율적인 확률적 자료 구조이다.
6+
7+
Bloom Filter에 의해 어떤 원소가 집합에 속한다고 판단된 경우 실제로는 원소가 집합에 속하지 않는 False Positive가 발생 가능하지만, 반대로 원소가 집합에 속하지 않는 것으로 판단되었는데 실제로는 원소가 집합에 속하는 False Negative는 절대로 발생하지 않는다는 특성이 있다.
8+
9+
집합에 원소를 추가하는 것은 가능하나, 집합에서 원소를 삭제하는 것은 불가능하다 (이를 해결하기 위해, Counting Bloom Filter라는 것이 존재한다).
10+
또한, 집합 내의 원소가 증가할수록 False Positive의 발생 확률도 증가한다.
11+
12+
## Structure
13+
14+
Bloom Filter는 m-bit 크기의 비트 배열 구조로 구성되어 있으며 그 값은 모두 0으로 초기 설정된다. 또한, k 개의 서로 다른 Hash Fuction을 사용한다.
15+
16+
k 개의 함수는 들어온 원소를 hash했을 때의 값이 배열에 균등하게 분포되게 하며 그 값이 지정하는 위치를 배열에서 1로 바꾸게 한다.
17+
18+
일반적으로 k는 m보다 훨씬 작은 상수로 지정되며 배열에 들어갈 원소의 개수에 비례한다.
19+
20+
False Positive 확률에 의해 k와 m을 결정한다.
21+
22+
아래는 m이 18이고 k가 3일때의 BloomFilter에 대한 예시이다.
23+
24+
![BF IMG](/img/bf_concept.png)
25+
26+
각 원소가 해당하는 bit를 같은 색의 화살표가 가르키고 있고 w라는 원소는 집합에 포함되지 않기 때문에 가르키는 위치에 값이 0인 경우가 존재하는 것을 확인할 수 있다.
27+
28+
출처 - [BloomFilter Wikipedia](https://en.wikipedia.org/wiki/Bloom_filter)

BF/bf_eval.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Performance Evaluation
2+
3+
추후 업로드 예정

BF/bf_example.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Bloom Filter Code Example
2+
3+
추후 업로드 예정

BF/bloomftl.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Bloom-FTL
2+
3+
추후 업로드 예정

BF/intro.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Introduction
2+
3+
Bloom Filter는 1970년에 Burton Howard Bloom에 의해 고안되어 원소가 집합에 속하는지 여부를 검사하는데 사용되는 공간 효율적인 확률적 자료 구조이다.
4+
5+
Bloom Filter에 의해 어떤 원소가 집합에 속한다고 판단된 경우 실제로는 원소가 집합에 속하지 않는 False Positive가 발생 가능하지만, 반대로 원소가 집합에 속하지 않는 것으로 판단되었는데 실제로는 원소가 집합에 속하는 False Negative는 절대로 발생하지 않는다는 특성이 있다.
6+
7+
이러한 특성을 갖는 Bloom Filter를 사용한 FTL을 이해하고 이를 최적화하는 것을 목표해본다.
8+
9+
## Goals
10+
11+
BloomFilter의 구조를 이해하고 이를 C를 사용하여 직접 구현해본다. (Byte-based, Bit-based인 두가지 방식)
12+
13+
Bloom Filter를 이용한 간단한 Storage Management를 구현해본다.
14+
15+
Bloomfilter를 이용한 FTL을 이해하고 해당 FTL에서 Bloomfilter를 최적화 할 수 있는 기법을 구상해본다.
16+
17+
## Prerequisite
18+
19+
* C/C++
20+
* Data Structure
21+
* Flash Translation Layer (FTL)
22+
23+
## Weekly Plans
24+
25+
| 기간 | 내용 |
26+
| ---- | ---- |
27+
| 1주차 | Bloom Filter 개념 공부, Byte/Bit based version 구현 |
28+
| 2주차 | Bloom Filter를 이용한 간단한 Storage Management 구현 |
29+
| 3주차 | BloomFTL 초기형 개요 설명 및 코드 이해 |
30+
| 4주차 | BloomFTL의 Bloom Filter 탐색 알고리즘적 최적화 |
31+
| 5주차 | SIMD Instruction의 설명과 적용 방법 탐색 / 연구 성과 발표 |
32+
33+
34+
## 페이지 모음
35+
36+
+ [Bloom Filter Concept](./bf_concept.md)
37+
+ [Bloom Filter Code Example](./bf_example.md)
38+
+ [BloomFTL](./bloomftl.md)
39+
+ [Performance Evaluation](./bf_eval.md)
40+
+ [SIMD](./simd_instruction.md)

BF/simd_instruction.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# SIMD
2+
3+
추후 업로드 예정

C-and-Algorithm-basic/c_basic.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# C 기본
2+
3+
C 언어에 대해 잘 설명된 책이나 사이트가 많이 존재한다. 해당 문서의 목차를 따라 C 언어를 마스터해보자.
4+
5+
주요 서적 및 사이트
6+
7+
- 열혈 C 프로그래밍 (윤성우 저)
8+
9+
- [SoEn](http://soen.kr/)
10+
11+
- [C 언어 코딩 도장](https://dojang.io)
12+
13+
프로그램을 잘못 짤 경우 컴파일 에러, 런타임 에러가 발생할 수 있다. 컴파일 에러는 문법이 잘못된 경우로, 프로그램을 컴파일 할 때 컴파일러가 오류를 말해준다. 런타임 에러는 프로그램이 실행되는 도중에 발생하는 오류로, 잘못된 배열에 접근하거나, 0으로 나누기 등이 그 원인이 된다.
14+
15+
우리는 모든 입력에 대해 프로그램이 잘 돌아가고, 의도한 결과를 내도록 연습할 필요성이 있다. 이러한 것들을 연습하기 좋은 방법으로 '온라인 저지 사이트'를 이용하는 방법이 있다.
16+
17+
온라인 저지 사이트에서는 쉬운 문제에서 어려운 문제까지 다양한 문제를 제공한다. 문제에서 요구하는 사항에 맞추어 프로그램을 작성한 뒤, 작성한 코드를 제출하면 각각의 입력에 대해 요구되는 시간 안에 올바른 결과를 내는지 채점하여 '맞았습니다', '틀렸습니다', '런타임 에러', '컴파일 에러', '시간 초과' 등의 결과를 알려준다.
18+
19+
온라인 저지 사이트는 굉장히 많이 있지만, 우리는 [백준 온라인 저지](http://www.acmicpc.net)를 사용하여 C 프로그램의 작성을 연습해보도록 하겠다.
20+
21+
22+
## 입출력
23+
24+
scanf, printf, getchar 등의 사용법에 대해 공부를 해보자. 다음과 같은 문제는 금방 풀 수 있을 정도가 되도록 숙지하자.
25+
26+
[Hello World](http://noj.am/2557)
27+
28+
[고양이](http://noj.am/10171)
29+
30+
[단어의 개수](http://noj.am/1152)
31+
32+
33+
## 사칙연산
34+
35+
C에서는 제공하는 기본적인 연산들은 다음과 같다 (+, -, \*, /, %)
36+
37+
[A+B](http://noj.am/1000)
38+
39+
[A/B](http://noj.am/1008)
40+
41+
[사칙연산](http://noj.am/10869)
42+
43+
[곱셈](http://noj.am/2588)
44+
45+
또, C에서는 비트 연산이라는 이름의 연산을 제공한다. (~, &, |, ^, <<, >>)
46+
47+
비트 연산은 활용하기에 따라 간결한 코드를 만드는 강력한 무기가 될 수 있다. 다음 비트 연산들의 결과값이 무엇일지 생각해보자. 여기서 i는 int 형이고, 양수라고 가정하자.
48+
49+
1. i & (i - 1)
50+
2. i & (-i)
51+
52+
## if 문
53+
54+
if문을 연습할 수 있는 문제를 풀어보자
55+
56+
[두 수 비교하기](http://noj.am/1330)
57+
58+
[세 수](http://noj.am/10817)
59+
60+
[시험 성적](http://noj.am/9498)
61+
62+
[윤년](http://noj.am/2753)
63+
64+
## for 문, while 문
65+
66+
for문과 while문을 연습할 수 있는 문제를 풀어보자
67+
68+
[구구단](http://noj.am/2739)
69+
70+
[A+B - 3](http://noj.am/10950)
71+
72+
[A+B - 4](http://noj.am/10951)
73+
74+
[A+B - 8](http://noj.am/11022)
75+
76+
[N 찍기](http://noj.am/2741)
77+
78+
[별 찍기 - 1](http://noj.am/2438)
79+
80+
[별 찍기 - 2](http://noj.am/2439)
81+
82+
[X보다 작은 수](http://noj.am/10871)
83+
84+
[더하기 사이클](http://noj.am/1110)
85+
86+
87+
## 함수
88+
89+
역할에 따라 함수를 정의하여 사용하면, 코드가 깔끔해진다.
90+
91+
[셀프 넘버](http://noj.am/4673)
92+
93+
[한수](http://noj.am/1065)
94+
95+
[정수 N개의 합](http://noj.am/15596)

C-and-Algorithm-basic/final.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Final project
2+
3+
그동안 공부한 C 언어와, 자료구조를 활용하여 다음 프로젝트 중 하나를 골라 진행해봅시다.
4+
5+
1. 스도쿠 풀이 프로그램 만들기
6+
7+
2. 오목 AI 만들기
8+
9+
3. 테트리스 AI 만들기

C-and-Algorithm-basic/hashing.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Hashing
2+
3+
Hashing은 특정 data를 fixed-size value로 mapping하는 기법입니다.
4+
5+
해시 테이블을 사용하면 데이터를 O(1)에 처리할 수 있게 됩니다.
6+
7+
## 연습문제
8+
9+
[Hashing](http://noj.am/15829)
10+
11+
[비밀번호 찾기](http://noj.am/17219)
12+
13+
[시계 사진들](http://noj.am/10266)

0 commit comments

Comments
 (0)