Độ phức tạp của danh sách tổng hợp python

Trong bài viết này, chúng tôi đã giải thích thuật toán cộng các chữ số của một số N và trình bày phân tích độ phức tạp thời gian và không gian. Chúng tôi cũng đã trình bày việc triển khai bằng Ngôn ngữ lập trình C

Mục lục

  1. Thuật toán cộng các chữ số của một số
  2. Mẫu
  3. Thời gian phức tạp
  4. Độ phức tạp không gian

Thuật toán cộng các chữ số của một số

Thuật toán cộng các chữ số của một số như sau

  • Khởi tạo tổng là 0
  • Cho một số N
    • Trích xuất chữ số cuối cùng là N % 10 [mô-đun]
    • Thêm chữ số cuối cùng vào một biến tổng
    • Cập nhật N bằng cách bỏ chữ số tận cùng là N/10 [phép chia]
    • Lặp lại các bước trên cho đến khi N lớn hơn 0

Ý tưởng cốt lõi là chúng tôi trích xuất chữ số cuối cùng ở mỗi giai đoạn và thêm nó vào một biến chung được khởi tạo bằng 0 ngay từ đầu. Điều này dẫn đến tổng tất cả các chữ số của một số

Sau đây là mã giả

sum = 0
Let input be N

// Make N positive if it is negative
If N < 0
    N = -1 * N

// Loop through all digits and get sum
while N > 0
    sum = sum + N%10
    N = N / 10
    
answer = sum

Mẫu

Nếu một số N có M chữ số thì giá trị lớn nhất của câu trả lời sẽ là

9*M

Vậy nếu có 5 chữ số thì tổng lớn nhất sẽ là 9 x 5 = 45
Tổng sẽ tăng và giảm trên tất cả các số có 5 chữ số

Nếu số có dạng 8****, thì tổng lớn nhất sẽ là 44 và nhỏ nhất sẽ là 8. Nếu bạn bắt đầu từ 8000, tổng sẽ bắt đầu từ 8 và tăng dần, tăng dần cho đến 17 là 8009. Nó sẽ lại giảm mạnh xuống 9 vào lúc 8010

Nếu bạn mã hóa cứng mẫu này trong chương trình của mình, bạn có thể giải quyết vấn đề này hiệu quả hơn nhiều với chi phí yêu cầu không gian cao hơn

Thời gian phức tạp

Trong một số N đã cho, có các bit log[N]

Nếu số N ở trong cơ sở B [thường là B=10], thì số chữ số trong N là log10N. Vì chúng ta đang lặp qua tất cả các chữ số của số N để tìm tổng, nên độ phức tạp về thời gian sẽ là O[logN]

Trường hợp xấu nhất, trung bình và tốt nhất là giống nhau đối với vấn đề này khi chúng tôi lặp qua số chữ số cố định

  • Độ phức tạp thời gian trường hợp tốt nhất. O[logN]
  • Độ phức tạp thời gian trường hợp trung bình. O[logN]
  • Trường hợp xấu nhất thời gian phức tạp. O[logN]

Độ phức tạp không gian

Độ phức tạp không gian của phương pháp này là O[1] vì không cần bộ nhớ có kích thước thay đổi bổ sung

Chúng ta chỉ cần ba biến để lấy tổng và trích xuất từng chữ số của số ban đầu

Thực hiện trong C

Sau đây là cách thực hiện trong Ngôn ngữ lập trình C để tìm tổng tất cả các chữ số của một số N

// Part of iq.opengenus.org
#include 
int main[] {
	int N = 9453;
	int sum = 0;
	
	// Convert number to positive 
	// if negative
	if[N < 0]
	    N = -1 * N;
	    
	// Loop through all digits
	while[N > 0]
	{
	    sum = sum + N%10;
	    N = [int]N/10;
	}
	
	printf["%d", sum];
	return 0;
}

đầu ra

21

Ví dụ từng bước

  • Trạng thái ban đầu
    N = 9453
    tổng = 0

  • Bước 1. Trích xuất chữ số đầu tiên
    tổng = 0 + 3
    N = 945

  • Bước 2. Trích xuất chữ số thứ hai
    tổng = 3 + 5
    N = 94

  • Bước 3. Trích xuất chữ số thứ ba
    tổng = 8 + 4
    N = 9

  • Bước 4. Trích xuất chữ số thứ tư
    tổng = 12 + 9
    N = 0

  • Câu trả lời
    tổng = 21
    Trả lời là giá trị của tổng là 21

Với bài viết này tại OpenGenus, bạn phải có ý tưởng đầy đủ về cách tìm tổng tất cả các chữ số của một số

Chúng ta có thể duyệt qua các danh sách bên trong danh sách và tính tổng tất cả các phần tử trong một danh sách đã cho và bằng hàm max lấy tổng tối đa của tất cả các phần tử trong danh sách của danh sách.  

con trăn




# Python program to find the

# list in a list of lists whose

# sum of elements is the highest

33
0

 

33
1
33
2

33
3_______3_______4_______3_______5
33
6

 

33
3_______3_______8

33
3_______3_______0
33
1
33
2
33
3

33
4_______3_______5
33
5
33
6

33
4_______3_______9

33
4_______3_______0
sum[max[list1, key=sum]]
2
33
2
sum[max[list1, key=sum]]
4

sum[max[list1, key=sum]]
5
33
5
sum[max[list1, key=sum]]
7
33
5
sum[max[list1, key=sum]]
9

33
4_______3_______4_______3_______5
33
3
33
4
33
5
33
6

33
4

33
3_______3_______9
33
4

33
3

33
2

33
3
33
5
33
5
33
6
33
7
33
8
33
7
33
0
33
1
33
2
33
7
33
4
33
7
33
6
33
1
33
8
33
7# Python program to find the0
33
7# Python program to find the2
33
1# Python program to find the4
33
7# Python program to find the6
33
7# Python program to find the8# Python program to find the9

# list in a list of lists whose0 # list in a list of lists whose1

Đầu ra

33

Thời gian phức tạp. O[n*m] trong đó n là số lượng danh sách và m là kích thước tối đa của danh sách
Không gian phụ trợ. Ô[1]

Phương pháp 2. Tra cứu danh sách

Chỉ duyệt qua danh sách bên ngoài và tính tổng tất cả các phần tử trong danh sách bên trong bằng cách sử dụng hàm sum[], tìm tổng của tất cả các danh sách và lấy giá trị lớn nhất của tất cả các tổng được tính.  

con trăn




# Python program to find the

# list in a list of lists whose

# sum of elements is the highest

# list in a list of lists whose5

 

33
1
33
2

33
3_______3_______4_______3_______5
33
6

33
3_______255_______3

33
3_______3_______0
33
1
33
2
33
3

33
4_______3_______4_______3_______5
33
3_______3_______4
33
5
33
05

33
4

33
3_______3_______9
33
4

33
3

 

33
2

33
3
33
5
33
5
33
6
33
7
33
8
33
7
33
0
33
1
33
2
33
7
33
4
33
7
33
6
33
1
33
8
33
7# Python program to find the0
33
7# Python program to find the2
33
1# Python program to find the4
33
7# Python program to find the6
33
7# Python program to find the8# Python program to find the9

# list in a list of lists whose0 # list in a list of lists whose1

Đầu ra

33

Thời gian phức tạp. O[n*m] trong đó n là số lượng danh sách và m là kích thước tối đa của danh sách
Không gian phụ trợ. Ô[1]

Phương pháp 3. Hàm tổng và hàm Max

sum[max[list1, key=sum]]

Cú pháp trên của hàm max[] cho phép chúng ta tìm tổng của danh sách trong danh sách bằng cách sử dụng key=sum. max[list1, key=sum], cái này tìm danh sách có tổng các phần tử lớn nhất và sau đó sum[max[list1, key=sum]] trả về cho chúng ta tổng của danh sách đó.  

con trăn




# Python program to find the

# list in a list of lists whose

# sum of elements is the highest

33
44

 

33
1
33
2

33
3_______3_______9
33
4_______3_______5_______3_______4
33
3
33
53
33
5
33
5
33
56

33
3

 

33
2

33
3
33
5
33
5
33
6
33
7
33
8
33
7
33
0
33
1
33
2
33
7
33
4
33
7
33
6
33
1
33
8
33
7# Python program to find the0
33
7# Python program to find the2
33
1# Python program to find the4
33
7# Python program to find the6
33
7# Python program to find the8# Python program to find the9

# list in a list of lists whose0 # list in a list of lists whose1

Đầu ra

33

Thời gian phức tạp. O[n*m] trong đó n là số lượng danh sách và m là kích thước tối đa của danh sách
Không gian phụ trợ. Ô[1]

Phương pháp 4. Sử dụng các phương thức sum[] và sort[]

Python3




# Python program to find the

# list in a list of lists whose

# sum of elements is the highest

33
0

 

33
1
33
2

33
3_______3_______1_______3_______5
33
97

33
3_______3_______0
33
00
33
2
33
3

33
4_______3_______04
33
5
33
06

33
3______3_______08

33
3_______3_______9
33
11_______3_______12
33
6
33
14

33
4

33
3

33
17

33
3
33
5
33
5
33
6
33
7
33
8
33
7
33
0
33
1
33
2
33
7
33
4
33
7
33
6
33
1
33
8
33
7# Python program to find the0
33
7# Python program to find the2
33
1# Python program to find the4
33
7# Python program to find the6
33
7# Python program to find the8# Python program to find the9

# list in a list of lists whose0

33
46

Đầu ra

33

Thời gian phức tạp. O[NlogN]
Không gian phụ trợ. TRÊN]

Phương pháp 5. Sử dụng giảm[]

Phương pháp này sử dụng hàm reduce[] để lặp qua danh sách các danh sách và hàm lambda để so sánh tổng của từng danh sách. Hàm lambda trả về danh sách có tổng lớn hơn và hàm rút gọn theo dõi tổng tối đa bằng cách áp dụng lặp lại hàm lambda cho danh sách các danh sách. Kết quả cuối cùng là tổng của danh sách với tổng lớn nhất

Đây là một cách tiếp cận khác sử dụng hàm reduce[] và hàm lambda

Python3




33
47
33
48
33
49
33
50

 

33
1
33
52

33
3_______3_______54

33
3_______3_______56

33
3_______3_______58
33
5
33
50_______3_______4
33
62
33
63
33
64
33
5
33
66
33
5
33
68
33
69
33
70

33
3_______3_______9
33
5
33
74

 

33
75
33
5
33
5
33
6
33
7
33
8
33
7
33
0
33
1
33
2
33
7
33
4
33
7
33
6
33
1
33
8
33
7# Python program to find the0
33
7# Python program to find the2
33
1# Python program to find the4
33
7# Python program to find the6
33
7# Python program to find the8# Python program to find the9

Độ phức tạp về thời gian của list[] trong Python là gì?

Độ phức tạp về thời gian trung bình của toán tử in cho danh sách là O[n] . Nó trở nên chậm hơn khi có nhiều yếu tố. Thời gian thực hiện rất khác nhau tùy thuộc vào vị trí của giá trị cần tìm. Mất nhiều thời gian nhất khi giá trị của nó ở cuối hoặc không tồn tại.

Tổng có hoạt động trên danh sách Python không?

sum[] trong Python . Python cung cấp một hàm sum[] sẵn có để tính tổng các số trong danh sách. cú pháp. tổng [có thể lặp lại, bắt đầu] có thể lặp lại. iterable có thể là bất kỳ danh sách, bộ dữ liệu hoặc từ điển nào, nhưng quan trọng nhất nó phải là số. Sum of numbers in the list is required everywhere. Python provides an inbuilt function sum[] which sums up the numbers in the list. Syntax: sum[iterable, start] iterable : iterable can be anything list , tuples or dictionaries , but most importantly it should be numbers.

Độ phức tạp thời gian chạy của phương thức append[] tích hợp trong danh sách là gì?

Độ phức tạp về thời gian. Nối có độ phức tạp thời gian không đổi i. e. , O[1] .

Chủ Đề