Giao diện
Module 3: Optimization 🚀
📝 Stats
- Số lượng: 5 câu hỏi
- Độ khó: Khó
MCQ
Q1. Hàm nào dùng để đo thời gian chạy (Profiling) và vẽ biểu đồ Flame Graph?
- [ ]
system.time() - [ ]
profvis() - [ ]
bench::mark() - [ ]
traceback()
Đáp án:
profvis(). (system.timechỉ đo tổng thời gian, không chi tiết dòng code).
Q2. Tại sao 1:1000 + 1 nhanh hơn for(i in 1:1000) x[i] + 1?
- [ ] Do Vectorization đẩy việc tính toán xuống tầng C (Low-level).
- [ ] Do R bỏ qua kiểm tra lỗi trong Vectorization.
- [ ] Do phép cộng vector không cần bộ nhớ.
Đáp án: Do Vectorization đẩy việc tính toán xuống tầng C.
Coding Challenge
Challenge: The Slow Loop
Tối ưu đoạn code sau (gấp 100 lần):
r
# BEST PRACTICE: Preallocate vectors before loops to avoid growing them iteratively
# Code chậm
n <- 10000
res <- c()
for (i in 1:n) {
res <- c(res, sqrt(i)) # Lỗi: Grow vector từng bước
}
# Code tối ưu:
# Cách 1: Pre-allocation
res <- numeric(n)
for(i in 1:n) res[i] <- sqrt(i)
# Cách 2: Vectorization (Best)
res <- sqrt(1:n)