Việc cài đặt Python đi kèm với thư viện chức năng riêng của nó. Hàm nhân tố math.factorial() được bao gồm trong mô -đun toán học của nó. Các mô -đun toán học là một phần của gói mã cài đặt Python. Các mô -đun toán học hoặc các chức năng như giai thừa, gốc, sin và hàm mũ có thể được sử dụng trong các chương trình Python. Để sử dụng chúng, lệnh nhập phải được sử dụng trước cuộc gọi hàm toán học, như được hiển thị trong mã sau.
import math print(math.factorial(4)) # the output is: 24 because 4 factorial is 24Lệnh import math def fcto(n): '''Factorial called fcto is defined''' if n==0 or n==1 : return 1 else : return n * fcto(n-1) # the rest of factorial expression, n(n-1)(n-2)...3(2)(1) print(fcto(5)) # 1200 kết hợp các chức năng toán học từ thư viện Python trong quá trình thực thi mã.
- Đơn vị trong toán học
- Giải pháp thay thế chức năng của toán học toán học
- Giải pháp thay thế giai thừa 1: Cách tiếp cận đệ quy
- Giải pháp thay thế giai thừa 2: Phương pháp lặp lại
- Độ phức tạp thời gian chạy của Toán học
- Ví dụ 1: Thời gian phương pháp đệ quy cho 30!
- Ví dụ 2: Thời gian tiếp cận lặp cho 30!
- Ví dụ 3: Thời gian Chức năng toán học cho 30!
Đơn vị trong toán học
Giải pháp thay thế chức năng của toán học toán học
Giải pháp thay thế giai thừa 1: Cách tiếp cận đệ quy
Giải pháp thay thế giai thừa 2: Phương pháp lặp lại
Độ phức tạp thời gian chạy của Toán học
Ví dụ 1: Thời gian phương pháp đệ quy cho 30!
Ví dụ 2: Thời gian tiếp cận lặp cho 30!
Ví dụ 3: Thời gian Chức năng toán học cho 30!
Trong toán học, thuật ngữ Factorial được đưa ra cho một biểu thức cụ thể dẫn đến sản phẩm của các số tự nhiên theo thứ tự tuần tự hoặc tăng dần hoặc giảm dần. Trình tự bắt đầu hoặc kết thúc bằng 1. Ví dụ: 1*2*3*4 = 24, được cho là của 4 4 giai thừa và được ký hiệu là 4! (Với dấu chấm than.n! here refers to the range of numbers used in a pair. For example, if the 2-digit numbers are picked from 1 to 40, then the result is:
Do đó, 1*2*3*4*5 là 5! cũng có thể được viết là 5*4*3*2*1. Nói chung, đối với số nguyên tùy ý (lớn hơn) n, bạn có thể viết n! = n * (n-1) * (n-2) * * * 3 * 2 * 1.
Số lượng nhân tố có nhiều ứng dụng, đặc biệt là trong lĩnh vực xác suất và toán học kết hợp. Kết hợp là về việc đếm, hoặc cách sắp xếp mọi thứ, hoặc hoán vị. Đối với một ví dụ rất đơn giản, có bao nhiêu cách có thể cho một người đặt 4 cuốn sách lên kệ?
Giải pháp thay thế chức năng của toán học toán học
Giải pháp thay thế giai thừa 1: Cách tiếp cận đệ quy
Giải pháp thay thế giai thừa 1: Cách tiếp cận đệ quy
import math def fcto(n): '''Factorial called fcto is defined''' if n==0 or n==1 : return 1 else : return n * fcto(n-1) # the rest of factorial expression, n(n-1)(n-2)...3(2)(1) print(fcto(5)) # 120Giải pháp thay thế giai thừa 2: Phương pháp lặp lại
Giải pháp thay thế giai thừa 2: Phương pháp lặp lại
import math def factorial(n): fact = 1 for num in range(2, n+1): fact *= num return fact print(factorial(4)) # 24Hàm giai thừa được gọi với 4. Trong phạm vi của hàm, biến import math def factorial(n): fact = 1 for num in range(2, n+1): fact *= num return fact print(factorial(4)) # 24 2. Và sau đó, phép lặp vòng lặp bắt đầu với giá trị 2 cho num. & nbsp; vì trong lần lặp đầu tiên import math def factorial(n): fact = 1 for num in range(2, n+1): fact *= num return fact print(factorial(4)) # 24 3 là 2, sau đó 2 × 1 được trả về. Ở lần lặp tiếp theo import math def factorial(n): fact = 1 for num in range(2, n+1): fact *= num return fact print(factorial(4)) # 24 4, do đó biến thực tế được gán 2 × 3, do đó 6 được trả về. Cho đến nay, 2 và 6 đã được trả lại. Điều này tạo thành hai số giai thừa đầu tiên, hoặc 1 × 2 = 2 hoặc 2! và 1x2x3 = 6 hoặc 3 !. Trong lần lặp tiếp theo import math def factorial(n): fact = 1 for num in range(2, n+1): fact *= num return fact print(factorial(4)) # 24 3 là 4, vì vậy thực tế được gán 6 × 4 = 24, đó là 4 !. Đây là lần lặp cuối cùng vì giới hạn trên là N + 1 hoặc 4 + 1 = 5.
5 không được sử dụng, vì giới hạn trên của lệnh phạm vi không được thực thi.
Độ phức tạp thời gian chạy của Toán học
Số lượng nhân tố, n !, Tăng giá trị rất nhanh khi n lớn hơn, sản phẩm phát triển nhanh hơn nhiều so với các hàm số mũ phát triển nhanh, 10^x làm ví dụ.
Một so sánh tăng trưởng của các chức năng phổ biến trong toán học thường được biểu thị bằng N! >> 10^x >> x^3 >> x^2 >> lnx, trong đó >> có nghĩa là nhiều hơn nhiều. Trong khoa học máy tính, họ dạy ký hiệu lớn:
Vấn đề là khi bạn thiết kế các thuật toán bằng cách sử dụng các tính toán với N !, Đó là cách thực hành tốt để thực hiện phân tích thời gian chạy cẩn thận.
Vì lý do này, cách bạn viết các chương trình sử dụng các chức năng giai thừa có thể tạo ra sự khác biệt đáng kể trong thời gian chạy. Khi tính toán số lượng lớn, có thể sử dụng tuyến tính O (n) hoặc O (log (n)) tuyến tính nếu có thể. Nó thậm chí có thể được chấp nhận để sử dụng các ước tính. Ví dụ, vì
bằng nhau
& nbsp; Đó là một trường hợp trong đó O (n log (n)) có thể được áp dụng, nhưng đó là một ước tính. Điều này được gọi là xấp xỉ Stirling, mang lại giá trị gần đúng cho & nbsp; factorial & nbsp; function. Tuy nhiên, nếu các số liên quan đến thuật toán là đủ lớn, đây có thể là một giải pháp chấp nhận được cho thời gian chạy hợp lý.
Python là một ngôn ngữ loại phiên dịch - một trong đó không cần thiết phải biên dịch. Điều này làm cho Python di động trên các hệ điều hành và dễ sử dụng. Nhưng giá bạn phải trả cho các tiện ích này, ví dụ, là các ngôn ngữ này chậm hơn về mặt tính toán. Ví dụ, chúng chậm hơn Java hoặc C ++. Đây là một lý do khác tại sao bạn phải cẩn thận với việc thực hiện chức năng import math def fcto(n): '''Factorial called fcto is defined''' if n==0 or n==1 : return 1 else : return n * fcto(n-1) # the rest of factorial expression, n(n-1)(n-2)...3(2)(1) print(fcto(5)) # 1202. Dưới đây là 3 ví dụ minh họa sự khác biệt thời gian chạy. Cả 3 đã được thảo luận ở trên. Lặp, đệ quy và ____ 12 & nbsp; Runtimes cho các đoạn trích được so sánh ở đây.
Ví dụ 1: Thời gian phương pháp đệ quy cho 30!
import math import time start = time.time() def fcto(n): if n==0 or n==1: return 1 else: return n*fcto(n-1) print(fcto(30)) stop = time.time() print("\ntime elapsed for Recursive: " + str(stop-start), "\n")Đầu ra:
265252859812191058636308480000000 time elapsed for Recursive: 0.011820793151855469Ví dụ 2: Thời gian tiếp cận lặp cho 30!
import math import time start = time.time() def factorial(n): fact = 1 for num in range(2, n + 1): fact *= num return fact print(factorial(30)) stop = time.time() print("\ntime elapsed for iterative: " + str(stop-start), "\n")Đầu ra:
265252859812191058636308480000000 time elapsed for iterative: 0.0Ví dụ 2: Thời gian tiếp cận lặp cho 30!
import math import time start = time.time() print(math.factorial(30)) stop = time.time() print("\ntime elapsed for math.factorial: " + str(stop-start), "\n") Output: 265252859812191058636308480000000 time elapsed for math.factorial: 3.1948089599609375e-05Đầu ra:
265252859812191058636308480000000 time elapsed for Recursive: 0.011820793151855469Ví dụ 2: Thời gian tiếp cận lặp cho 30!