141 lines
2.7 KiB
Markdown
141 lines
2.7 KiB
Markdown
|
|
# F2: 간격 반복 (Spaced Repetition)
|
|||
|
|
|
|||
|
|
## FSRS 알고리즘
|
|||
|
|
|
|||
|
|
### 기본 원리
|
|||
|
|
|
|||
|
|
간격 반복은 정보를 점점 더 긴 간격으로 반복하여 장기 기억을 강화하는 기법입니다.
|
|||
|
|
|
|||
|
|
### FSRS 파라미터
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
w = [0.4, 0.6, 2.4, 5.8, 4.93, 0.94, 0.86, 0.01, 1.49, 0.14, 0.94, 2.18, 0.05, 0.34, 1.26, 0.29, 2.61]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 간격 계산
|
|||
|
|
|
|||
|
|
**새 카드:**
|
|||
|
|
- 최초 학습 후: 1일
|
|||
|
|
- 첫 번째 복습 후: 3-7일 (난이도 기반)
|
|||
|
|
- 두 번째 복습 후: 7-30일
|
|||
|
|
- 이후: 지수적 증가 (최대 365일)
|
|||
|
|
|
|||
|
|
**Rating별 간격:**
|
|||
|
|
|
|||
|
|
| Rating | 의미 | 간격 조정 |
|
|||
|
|
|--------|------|-----------|
|
|||
|
|
| `again` | 잊어버림 | 간격 초기화 (1일) |
|
|||
|
|
| `hard` | 노력해서 회상 | 간격 × 1.2 |
|
|||
|
|
| `good` | 정확히 회상 | 간격 × FSRS 공식 |
|
|||
|
|
| `easy` | 쉽게 회상 | 간격 × 1.3 × FSRS 공식 |
|
|||
|
|
|
|||
|
|
### 안정성(Stability) 계산
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
new_stability = stability * exp(
|
|||
|
|
(w6 - w7 * delta) * (w8 - w9 * (rating-1)) * w10 +
|
|||
|
|
(1 - w11) * exp(w12 - w13 * (rating-1))
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
단, again일 때:
|
|||
|
|
```
|
|||
|
|
new_stability = w14 * max(stability * w15, 1) * min(new_stability, w16 * stability)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 간격(Interval) 계산
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
interval = stability * target_retention
|
|||
|
|
interval = max(min_interval, min(interval, max_interval))
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 카드 관리
|
|||
|
|
|
|||
|
|
### 카드 생성
|
|||
|
|
|
|||
|
|
학습 세션에서 추출된 각 개념/팩트에 대해 자동 생성:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": "card_001",
|
|||
|
|
"concept_id": "concept_001",
|
|||
|
|
"front": "Rust의 Ownership이란?",
|
|||
|
|
"back": "메모리 안전성을 보장하는 시스템으로, 각 값에 대해 하나의 소유자가 존재합니다",
|
|||
|
|
"difficulty": 0.6,
|
|||
|
|
"interval_days": 0,
|
|||
|
|
"due_date": "timestamp",
|
|||
|
|
"reps": 0,
|
|||
|
|
"lapses": 0
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 카드 업데이트
|
|||
|
|
|
|||
|
|
복습 후 FSRS 알고리즘에 따라 업데이트:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": "card_001",
|
|||
|
|
"interval_days": 7,
|
|||
|
|
"due_date": "7일 후 timestamp",
|
|||
|
|
"reps": 3,
|
|||
|
|
"lapses": 0,
|
|||
|
|
"stability": 2.5,
|
|||
|
|
"retrievability": 0.85
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 복습 세션
|
|||
|
|
|
|||
|
|
### 복습할 카드 선택
|
|||
|
|
|
|||
|
|
1. 오늘 예정된 카드 우선
|
|||
|
|
2. 연체된 카드 다음
|
|||
|
|
3. 새로운 카드는 설정된 수만큼 (기본 20개/일)
|
|||
|
|
|
|||
|
|
### 복습 흐름
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
복습할 카드 목록
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
각 카드에 대해:
|
|||
|
|
│
|
|||
|
|
├── 문제 표시
|
|||
|
|
│
|
|||
|
|
├── 답변 시도
|
|||
|
|
│
|
|||
|
|
├── 정답 확인
|
|||
|
|
│
|
|||
|
|
└── Rating 선택 (again/hard/good/easy)
|
|||
|
|
│
|
|||
|
|
└── 카드 간격 업데이트
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 메모리 저장 형식
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"cards": [
|
|||
|
|
{
|
|||
|
|
"id": "card_001",
|
|||
|
|
"front": "...",
|
|||
|
|
"back": "...",
|
|||
|
|
"interval_days": 7,
|
|||
|
|
"due_date": "2024-01-15",
|
|||
|
|
"reps": 3,
|
|||
|
|
"lapses": 0,
|
|||
|
|
"stability": 2.5
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"stats": {
|
|||
|
|
"total_cards": 100,
|
|||
|
|
"due_today": 15,
|
|||
|
|
"due_this_week": 45,
|
|||
|
|
"overdue": 5,
|
|||
|
|
"retention_rate": 0.88
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|