1. Hãy dành vài giây Đăng nhập hoặc Đăng ký tài khoản để truy cập và sử dụng TBit hiệu quả nhất.
    Ẩn thông báo
  2. Bạn hãy like trang Facebook của TBit để nhận được tin tức công nghệ nhanh nhất từ chúng tôi.
    Ẩn thông báo

Hãy suy nghĩ đơn giản - Mọi thứ sẽ dễ dàng hơn

Thảo luận trong 'Lập trình Pascal' bắt đầu bởi Phạm Đạt, 26/6/18.

0/5, 0 phiếu

    1. Phạm Đạt TBit-Mod

      Xin chào tất cả các bạn, hôm nay chúng ta sẽ đến với một bài viết mang tính góc nhìn. Đánh giá về cách sử dụng thuật toán trong lập trình nhé !. Giả sử mình có một đề bài như sau:
      Đây là một bài tập rất cơ bản với những người mới học lập trình, nó không hề khó, thậm chí dễ như ăn kẹo.

      Nhưng trên mạng có Share một cách giải mới đây:

      [​IMG]

      Có thể chương trình trên chỉ mang tính chất hài hước, mang nặng tinh thần chống đối, tuy nhiên theo tinh thần của bài viết hôm nay chúng ta sẽ phân tích theo một cách khác, dưới góc nhìn thực tế.

      Nếu đây là một dự án thực tế
      Hãy tưởng tượng có một ông khách giàu sụ đến và bảo bạn rằng "Viết cho tôi chương trình in ra các số chẵn trong khoảng từ 1 đến 100, hoàn thành trong 01 ngày, tôi sẽ trả cho anh 1000 đô". Và tất nhiên, bạn không thể để lỡ kèo thơm như thế được.

      [​IMG]

      Một cách giải tốt
      Tại sao lại là lời giải tốt, mà không phải là lời giải đúng? Bởi vì trong trường học, nếu bạn đưa ra lời giải đúng bạn sẽ được điểm cao. Nhưng trong thực tế, cùng một vấn đề có rất nhiều cách để giải quyết, và không có phương án nào là đúng tuyệt đối cả, chỉ có phương án này tốt hơn phương án kia mà thôi.
      Có hàng tỉ cách để in ra được dãy số này, nhưng ai mà quan tâm cơ chứ? Cái mà người ta mong muốn là gì? Là chương trình in ra được dãy số trên, tất cả chỉ có vậy. Ông khách kia trả tiền để có được sản phẩm, chứ không phải code hay thuật toán gì cả.
      Hiệu năng và giá trị
      Có thể cách giải trên có vẻ không thông minh cho lắm, nhưng nếu đây là một sản phẩm thực tế, tôi sẽ cho nó điểm 10, rõ ràng rằng chương trình đã làm tốt nhiệm vụ, tối ưu về tốc độ, ít (hoặc không có) lỗi phát sinh, sản phẩm dùng tốt đối với khách hàng, mang lại giá trị thực tế.

      Đây là phương án phù hợp
      Sau khi xem ảnh trên, một số bạn comment rằng: "Thế nếu là 10.000 thì viết đến sáng à"
      Không, nếu như bài toán là 10.000, chúng ta sẽ chọn phương án khác, các phương án đưa ra phải phù hợp với điều kiện và khả năng thực tế. Sử dụng những công nghệ và thuật toán phức tạp cho một vấn đề đơn giản là không thông minh cho lắm.

      Mặc dù diện tích tờ giấy làm bài thi là có hạn, nhưng nó đủ để đáp ứng trong trường hợp này. Liên hệ với thực tiễn, chẳng việc gì phải sử dụng NoSql database cho một bảng chỉ có 100 record cả.
      Về thời gian hoàn thành dự án, thời gian làm bài đủ để viết dãy số trên. Do đó, đây là một phương án tốt đảm bảo tiến độ trước deadline.


      Nhận định từ bài toán

      [​IMG]

      Từ một bài toán giả sử trên ta có thể dàng có cho mình một bài học nhỏ. Trong cuộc sống hãy nhìn nhận mọi thứ, suy nghĩ chúng đơn giản hơn - Bạn sẽ thấy mọi thứ thật dễ dàng. Hãy nhìn nhận, đáng giá, đong đếm chính xác vấn đề rồi đưa ra một phương pháp, sử dụng một thuật toán hay công nghệ hợp lý. Vì đơn giản có hàng nghìn cách code nhưng sản phẩm tốt mới là điều mà kháng hàng cần. Hãy tối ưu nó một cách tốt nhất có thể.
       
      Đang tải...
    2. Admin

      Admin Founder Thành viên BQT

      Điểm:
      13.646ß
      Còn một bài toán nữa: Tính tổng các số từ 1 tới n?

      @Phạm Đạt giải như thế nào?
       
    3. Phạm Đạt

      Phạm Đạt TBit-Mod Thành viên BQT

      Điểm:
      675ß
      Đầu tiên có ta xác định số N từ người dùng
      Sau đó em nghĩ có 2 cách:
      C1: Sử dụng lệnh For to do để cộng dồn tổng
      C2: Ta sử dụng công thức toán học
      +) Tính số số hạng: (Số cuối - Số đầu)/Khoảng cách + 1
      +) Tính tổng: (Số đầu + Số cuối) * Số số hạng / 2
       
    4. Admin

      Admin Founder Thành viên BQT

      Điểm:
      13.646ß
      Thật ra, CÁCH đơn giản nhất là:
      PHP:
      1. sum = n*(n+1)/2;
      Đấy, công thức toán học đơn giản như vậy. Và đoạn code này chạy nhanh hơn dùng FOR n lần. =D>=D>
       
    5. Phạm Đạt

      Phạm Đạt TBit-Mod Thành viên BQT

      Điểm:
      675ß
      Vâng ạ
       

Chia sẻ trang này

Đang tải...