# 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) │ └── 카드 간격 업데이트 ``` 카드 데이터와 통계를 메모리에 저장합니다.