Skip to content

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.time chỉ đ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)