Cấp số cộng - Cấp số nhân

MỖI BÀI VIẾT, MỘT ĐIỀU HỌC ĐƯỢC
← Tất cả bài viết

Cấp số cộng - Cấp số nhân

Trao đổi về bài viết ↓
Trong bài viết này


Ngày xưa, chắc ai trong chúng ta cũng đã làm qua các bài tập này. Mình cũng vậy nó nằm trong 1000 bài tập của thầy Nguyễn Tấn Trần Minh Khang. Nhưng chắc nhiều bạn giải bài với mục đích ra kết quả đúng là được :))), Nhưng nhiều lúc có nhiều vấn đề thực tế đòi hỏi chúng ta phải tư duy để giải quyết vấn đề vừa đúng mà vừa nhanh phải không nào 😗😗.
Mục đích của bài này là mình sẽ giúp các bạn giải các bài trên với độ phức tạp là O(1) thay vì là O(n). Để làm được điều này chúng ta cần nhớ lại các kiến thức về cấp số cộng, cấp số nhân để thấy sự xảo diệu của toán học :)).
Mình sẽ lấy python làm ví dụ minh họa.

Cấp số cộng ( CSC )

Định nghĩa: Là một dãy số trong đó kể từ số thứ hai trở đi thì hiệu của nó và số trước nó là một số không đổi người ta gọi là phương sai.
Gồm hai loại:
  1. CSC hữu hạn phần từ.
  2. CSC vô hạn phần tử.
Ví Dụ:
  1. 1,2,3,4,5,6 là một cấp số cộng hữu hạn phần tử với phương sai là 1.
  2. 2,4,6,8,10,12.... là một cấp số cộng vô hạn phần tử với phương sai là 2.
Phân Loại thêm:
  1. dãy tăng dần.
  2. dãy giảm dần.
  3. dãy chặn trên. Ví dụ: với mọi x thuộc N và x <=5 ta có dãy ..,4,5 thì giá trị 5 được gọi là hệ số chặn trên vì nó chặn bên phải.
  4. dãy chặn dưới. Ví dụ: với mọi x thuộc N ta có dãy 0,1,2,3,4,5,... thì giá trị 0 được gọi là hệ số chặn dưới vì nó chặn bên trái.
  5. dãy vừa chặn trên vừa chặn dưới.  Ví dụ: với mọi x thuộc N và 5<=x<=10 là dãy vừa chặn trên và chặn dưới. Với hệ số chặn dưới là 5 và hệ số chặn dưới là 10.
Tính Chất:


Chứng minh:



Cấp số nhân ( CSN )

Định nghĩa: Là một dãy số trong đó kể từ số thứ hai trở đi thì thương của nó và số trước nó là một số không đổi người ta gọi là công bội.
Gồm hai loại:
  1. CSN hữu hạn phần từ.
  2. CSN vô hạn phần tử.

Ví Dụ:
  1. 1,2,4,8,16,32 là một cấp số nhân hữu hạn phần tử với công bội là 2.
  2. 1,1/3,1/9,1/27,1/81.... là một cấp số nhân vô hạn phần tử với công bội là 1/3.
Tính chất:
Phân loại và chứng minh tương tự với CSC.

Tìm tổng dảy số (ứng dụng CSC và CSN).

S(n) = 1 + 2 + 3 + ....  + n

Với bài một ta phát hiện nó là một cấp số cộng với công sai là 1 nên ta áp dụng công thức.

def sum():
    return (1+n)*(n/2)

S(n) = 12 + 22 + 32 + .... + n2

Ta sẽ tìm tổng của nó thông qua phương trình bậc 3 như sau:
Như ta thấy nếu lấy vế + vế của tất cả lại thì ta sẽ có và ta thấy có CSC từ 0 đến n , n lần số 1, tổng S cần tìm và dư lại (n+1)^3:
Ta có: (n+1)3 = 3S + 3(n*(n+1)/2) + n + 1.
S= n(n+1)(2n+1)/6.

def sum():
    return (n*(n+1)*(2n+1))/6

S(n) = 1 + 1/2 +1/4 + 1/8 + .... + 1/2^i

Với bài một ta phát hiện nó là một cấp số nhân với công bội là 1/2 nên ta áp dụng công thức.

def sum():
    return (1-pow(1/2,n))/(1-(1/2))

S(n) = 1/2 + 1/6 + 1/12  + .... +  1/n*(n+1)

Ta có : 1/(n*(n+1)) = (n+1-n)/(n*(n+1)) = 1/n - 1/(n+1)
S = 1/2 + 1/6 +1/12 + ... +  1/(n*(n+1))
S = 1 - 1/2 + 1/2 - 1/3 + 1/3 - 1/4 + .... + 1/n - 1/n+1
S = 1 - 1/n+1

def sum():
    return 1-(1/(n+1))

S(n) = 1 + 1/(1+2) + 1/(1+2+3) + .... + 1/(1+2+3+4+....+n)

Ta có dãy : 1 + 1/3 +1/6 +1/10 + .... + 1/(1+...+n)
Chia 2 vế cho 2 ta có : 1/2 + 1/6 + 1/12 + 1/20 + ... + 1/(2*(1+....+n)) để đưa về dạng: 1/(n*(n+1))
S = 2 * (1 - (1/(n+1)))

def sum():
    return 2*(1-(1/(n+1)))

Kết Luận

Như các bạn thấy toán xuất hiện ở mọi nơi trong lập trình để giải quyết một cách hiệu quả thì việc ứng dụng đến toán là việc không tránh khỏi.
Mặc dù có thể khi tối ưu xong thì người đọc code của bạn sẽ không hiểu gì đâu cũng giống mình mấy tháng sau nên hãy nhớ ghi comment lại nhé chứ không sau này có người cứ lẩm bẩm tên bạn khi đọc code bạn đấy :))). Không hiểu dạo này mình hay cảm lạnh hay sao mà hay hắt hơi.
Cuối cùng là hi vọng qua bài viết giúp bạn ứng dụng được một tí gì đó về toán để giải quyết vấn đề một cách nhanh nhất có thể.
Cảm ơn bạn đã ghé đọc. Nếu có một góc nhìn khác, hãy chia sẻ ở phần bình luận nhé.

Cùng trao đổi

Bình luận bằng tài khoản Google qua Blogger.

Nhận xét