Hướng dẫn python string join complexity - chuỗi python tham gia phức tạp

Có, trong trường hợp của bạn*1 Concatenation chuỗi yêu cầu tất cả các ký tự được sao chép, đây là thao tác O (N+M) (trong đó N và M là kích thước của các chuỗi đầu vào). M cộng sự của cùng một từ sẽ có xu hướng theo thời gian o (m^2).

Nội dung chính ShowShow

  • Một sự kết hợp đơn giản:
  • Tại sao nó như vậy?
  • Kết nối bằng cách sử dụng toán tử + dưới mui xe:
  • Làm thế nào để chúng ta vượt qua điều này?
  • bài chuyển hướng
  • Độ phức tạp thời gian của python nối chuỗi là gì?
  • Sự phức tạp của việc kết hợp một đối tượng chuỗi là gì?
  • Cách hiệu quả nhất để kết hợp các chuỗi trong Python là gì?
  • Concatenation chuỗi có chậm không?

Bạn có thể tránh hành vi bậc hai này bằng cách sử dụng str.join():

word = ''.join(list_of_words)

chỉ mất o (n) (trong đó n là tổng chiều dài của đầu ra). Hoặc, nếu bạn đang lặp lại một ký tự duy nhất, bạn có thể sử dụng:

word = m * char

Bạn đang chuẩn bị các ký tự, nhưng trước tiên xây dựng danh sách, sau đó đảo ngược nó (hoặc sử dụng đối tượng

word = m * char
0 để có được hành vi O (1)) sẽ vẫn là sự phức tạp của O (n), dễ dàng đánh bại lựa chọn O (n^2) của bạn ở đây.


*1 Khi Python 2.4, việc triển khai CPython tránh tạo một đối tượng chuỗi mới khi sử dụng

word = m * char
1 hoặc

word = m * char
0, nhưng tối ưu hóa này vừa mỏng manh vừa không di động. Vì bạn sử dụng
word = m * char
1 (dự bị), việc tối ưu hóa không được áp dụng.

Tôi luôn luôn kết hợp các chuỗi bằng cách sử dụng nhà điều hành++không phân biệt ngôn ngữ mà tôi mã chỉ để nhận ra sau đó rằng tôi đã làm sai chúng. Để chính xác, không hiệu quả.

Hôm nay, chúng ta sẽ thảo luận về sự kết hợp chuỗi trong Python và cách thực hiện nó một cách hiệu quả.

Một sự kết hợp đơn giản:

x =  "hello"
y =  "world"
print(x + y)

Output:
helloworld

Tại sao nó như vậy?

Tại sao nó như vậy?

Kết nối bằng cách sử dụng toán tử + dưới mui xe:

Làm thế nào để chúng ta vượt qua điều này?

def concat_strings():
    """
    This is a program to remove spaces in a string
    :return:
    """

    input_string = "Th is is an ex am pl ew it hs pa ce"

    output_string = ""

    for i in input_string:
        if i == " ":
            pass
        else:
            output_string += i

    print(output_string)


concat_strings()

Output:
Thisisanexamplewithspace

bài chuyển hướng

Độ phức tạp thời gian của python nối chuỗi là gì?

Sự phức tạp của việc kết hợp một đối tượng chuỗi là gì?

Cách hiệu quả nhất để kết hợp các chuỗi trong Python là gì?

Hướng dẫn python string join complexity - chuỗi python tham gia phức tạp

Kết nối bằng cách sử dụng toán tử + dưới mui xe:

Làm thế nào để chúng ta vượt qua điều này?

bài chuyển hướng

Độ phức tạp thời gian của python nối chuỗi là gì?

Sự phức tạp của việc kết hợp một đối tượng chuỗi là gì?

Cách hiệu quả nhất để kết hợp các chuỗi trong Python là gì?

Concatenation chuỗi có chậm không?

Iteration 1:
1 character (“T”) = 1

Iteration 2:
2 characters(“T”, “h”) = 1+1

Iteration 3:
3 characters(“T”, “h”, “i”) = 1+1+1

Iteration 4:
4 characters(“T”, “h”, “i”, ”s”) = 1+1+1+1

Bạn có thể tránh hành vi bậc hai này bằng cách sử dụng str.join():

chỉ mất o (n) (trong đó n là tổng chiều dài của đầu ra). Hoặc, nếu bạn đang lặp lại một ký tự duy nhất, bạn có thể sử dụng:

word = m * char

Bạn đang chuẩn bị các ký tự, nhưng trước tiên xây dựng danh sách, sau đó đảo ngược nó (hoặc sử dụng đối tượng

word = m * char
0 để có được hành vi O (1)) sẽ vẫn là sự phức tạp của O (n), dễ dàng đánh bại lựa chọn O (n^2) của bạn ở đây.

*1 Khi Python 2.4, việc triển khai CPython tránh tạo một đối tượng chuỗi mới khi sử dụng

word = m * char
1 hoặc

word = m * char
0, nhưng tối ưu hóa này vừa mỏng manh vừa không di động. Vì bạn sử dụng
word = m * char
1 (dự bị), việc tối ưu hóa không được áp dụng.

Tôi luôn luôn kết hợp các chuỗi bằng cách sử dụng nhà điều hành++không phân biệt ngôn ngữ mà tôi mã chỉ để nhận ra sau đó rằng tôi đã làm sai chúng. Để chính xác, không hiệu quả.

Làm thế nào để chúng ta vượt qua điều này?

bài chuyển hướng

________ 7 & nbsp; lấy một & nbsp; ________ 25as một đối số và trả về một chuỗi là sự kết hợp của tất cả các đối tượng chuỗi trong & nbsp; ____ ____ 26.

def concat_strings():
    """
    This is a program to remove spaces in a string
    :return:
    """

    </em>input_string = "Th is is an ex am pl ew it hs pa ce"

    output_lst = list()

    for i in input_string:
        if i == " ":
            pass
        else:
            output_lst.append(i)

    print("".join(output_lst))


Output:

Thisisanexamplewithspace

Ở đây, chúng tôi đã sửa đổi ví dụ trước đây của chúng tôi để lưu trữ mỗi chuỗi thành A & nbsp; ________ 22 & nbsp; và cuối cùng & nbsp; ________ 28 & nbsp; Xin lưu ý rằng việc thêm vào danh sách luôn luôn là & nbsp; ________ 29. Vì vậy, điều đó không nên tác động đến thời gian chạy của chương trình.

Đây là một cách hiệu quả hơn để kết hợp các chuỗi thay vì sử dụng một loại++. Độ phức tạp về thời gian của việc sử dụng & nbsp; ________ 30 & nbsp; cho các chuỗi là & nbsp; ________ 31 & nbsp; trong đó n là độ dài của chuỗi được nối.

Phải nói rằng, sự khác biệt trong thời gian thực hiện sẽ chỉ có ý nghĩa nếu các chuỗi được nối là dài. Đối với các chuỗi nhỏ hơn, chúng ta có thể không thấy một sự khác biệt lớn.

  • https://docs.python.org/3/library/stdtypes.html#str.join
  • https://docs.python.org/3/library/stdtypes.html

Lưu ý: Ví dụ thứ hai cũng có thể được viết dưới dạng một lớp lót như được chỉ ra trong các bình luận. Điều này có thể làm giảm thêm số lượng dòng mã. Tuy nhiên, thời gian chạy vẫn sẽ vẫn giống như độ phức tạp thời gian của & nbsp; ________ 32 & nbsp; is & nbsp; ________ 31.

def concat_strings():
    """
    This is a program to remove spaces in a string
    :return:
    """

    input_string = "Th is is an ex am pl ew it hs pa ce"

    print("".join(input_string.split()))


Output:

Thisisanexamplewithspace

Summary:

  • Các chuỗi nối bằng cách sử dụng + không hiệu quả.
  • Độ phức tạp của thời gian của sự kết hợp chuỗi bằng cách sử dụng + is & nbsp; ________ 14
  • Nó luôn luôn tốt hơn để tận dụng & nbsp; ____ ____ 7 & nbsp; để nối dây
  • ________ 7 & nbsp; thực thi trong & nbsp; ________ 31 & nbsp; thời gian.

bài chuyển hướng

Độ phức tạp thời gian của python nối chuỗi là gì?

Độ phức tạp về thời gian của việc kết hợp chuỗi bằng cách sử dụng + là O (N²), luôn luôn tốt hơn để tận dụng STR.tham gia () để nối dây.O(n²) It's always better to leverage the str. join() to concatenate strings.O(n²) It's always better to leverage the str. join() to concatenate strings.

Sự phức tạp của việc kết hợp một đối tượng chuỗi là gì?

Trên mỗi lần ghép, một bản sao mới của chuỗi được tạo, sao cho độ phức tạp tổng thể là O (n^2).Trong Java, sự phức tạp của S1.Concat (S2) hoặc S1 + S2 là O (M1 + M2) trong đó M1 và M2 là độ dài chuỗi tương ứng.O(n^2). In Java, the complexity of s1. concat(s2) or s1 + s2 is O(M1 + M2) where M1 and M2 are the respective String lengths.O(n^2). In Java, the complexity of s1. concat(s2) or s1 + s2 is O(M1 + M2) where M1 and M2 are the respective String lengths.

Cách hiệu quả nhất để kết hợp các chuỗi trong Python là gì?

Các chuỗi Concatenate sử dụng tham gia như được hiển thị ở trên, sử dụng toán tử + hiệu quả hơn.Phải mất ít thời gian hơn để thực hiện.using the + operator is more efficient. It takes less time for execution.using the + operator is more efficient. It takes less time for execution.

Concatenation chuỗi có chậm không?

Mỗi lần gọi Strcat, vòng lặp sẽ chạy từ đầu đến cuối;Chuỗi càng dài, vòng lặp càng dài.Cho đến khi chuỗi rộng, việc bổ sung chuỗi diễn ra rất nặng và chậm.Until the string is extensive, the string addition takes place very heavy and slow.Until the string is extensive, the string addition takes place very heavy and slow.