2 điểm bởi GN⁺ 2025-01-03 | 1 bình luận | Chia sẻ qua WhatsApp
  • Thử thách Advent of Code 2024 bằng SQL thuần

  • Tổng quan

    • Tác giả đã quyết định giải Advent of Code năm nay hoàn toàn bằng SQL thuần.
    • Trải nghiệm này thú vị vì buộc phải suy nghĩ về bài toán theo cách khác, và họ đã giải được mọi bài chỉ với SQL.
    • SQL đôi khi lại rất dễ sử dụng.
  • Ví dụ Day 11

    • Bài viết đưa ra toàn bộ lời giải cùng dữ liệu đầu vào.
    • Việc phân tích cú pháp đầu vào trong SQL có phần rườm rà, nhưng không phải không thể.
    • Thuật toán tương đối ngắn và thực hiện duyệt đệ quy theo trường.
    • SQL phù hợp cho các phép tìm kiếm quy mô nhỏ.
  • Thử thách các ngày khác

    • Ở Day 16, tác giả thực hiện một bài toán tương tự để tính khoảng cách duyệt ngắn nhất trên trường.
    • Dễ diễn đạt bằng SQL, nhưng việc đánh giá không hiệu quả.
    • Khi xử lý dữ liệu đầu vào lớn, cần giữ rất nhiều trạng thái và đòi hỏi trên 200GB bộ nhớ.
    • Một số DBMS không cung cấp các tính năng để giải bài toán này.
  • Giới hạn của SQL đệ quy

    • Ở Day 23, cần tìm clique lớn nhất trong một đồ thị thưa.
    • Có thể dùng thuật toán Bron-Kerbosch, nhưng thể hiện dưới dạng SQL đệ quy lại khá phức tạp.
    • SQL đệ quy chỉ truyền được một tập hợp nên không tương thích với các thuật toán cần duy trì nhiều tập hợp cùng lúc.
  • Kết luận

    • Việc lập trình các thuật toán phức tạp bằng SQL là khả thi và mã SQL có thể bất ngờ dễ đọc, dễ dùng.
    • Nếu có cơ chế cập nhật trạng thái, SQL đệ quy sẽ hiệu quả hơn và thân thiện hơn khi sử dụng.
    • Khi bổ sung cơ chế thao tác trạng thái phức tạp, SQL có thể trở thành lựa chọn mạnh mẽ cho việc chạy thuật toán phức tạp ngay trong cơ sở dữ liệu.

1 bình luận

 
GN⁺ 2025-01-03
Bình luận Hacker News
  • Phản ứng với mục menu mới là sự pha trộn giữa ham muốn, sự mặc cảm và sự ngưỡng mộ trước sức sáng tạo của con người
  • Trong sự nghiệp, tôi đã viết SQL nhiều nhất, và dù 5 năm gần đây dùng ít hơn nhưng vẫn thấy thú vị
  • Khi dừng nghĩ theo kiểu lặp đi lặp lại và bắt đầu nhìn nhận theo phép toán tập hợp, nó trở nên rất tự nhiên và mạnh mẽ
  • Đã thử AoC bằng Google Sheets và đã tới Day 6, nhưng gặp giới hạn ký tự ở một số input
    • Nên tránh mở trên điện thoại di động
  • Trước đây đã từng gặp bài toán phỏng vấn vận hành yêu cầu tạo báo cáo hóa đơn cho bộ dữ liệu quy mô lớn
    • Vì không phải nhà khoa học dữ liệu nên gặp khó khi cấu trúc giải pháp
    • Đã giải thích rằng có thể sẽ dùng một gói báo cáo như Crystal Reports
    • Tôi đã giải bài toán bằng SQL, nhưng cần khá nhiều kỹ thuật
  • Đã thử AoC bằng EdgeQL và đây là một trải nghiệm thú vị
    • Đã chia sẻ tweet liên quan
  • Tôi đã xây dựng một hệ thống queue/container bằng SQL và sử dụng một số extension bổ sung
    • Thuật toán cơ bản rất khớp với chức năng của SQL
    • Một vài khía cạnh khó để thu nhỏ vừa với SQL
  • Đang làm AoC2024 trên Google Sheets và dự định sẽ ghi lại để làm tài liệu
  • Thật ấn tượng khi làm toàn bộ bằng SQL, và việc duy trì blog cũ như vậy cho thấy một dạng "thành thạo ngách"