Hướng dẫn deletion distance python - xóa khoảng cách python
Ngược lại, bạn đã thực hiện một công việc rất tốt để đưa ra một giải pháp. Có nhiều cách để cải thiện nó mặc dù. Như bạn lưu ý, đây chỉ là vấn đề tiếp theo chung dài nhất trong một ngụy trang mỏng. "Khoảng cách xóa" giữa hai chuỗi chỉ là tổng chiều dài của các chuỗi trừ chiều dài của LCS. Đó là, LCS của 0 (4 ký tự) và 1 (5 ký tự) là 2 (3 ký tự), do đó khoảng cách xóa là (4 + 5) - 2 * 3 = 3.Do đó, tất cả những gì bạn cần làm để giải quyết vấn đề là có được độ dài của LCS, vì vậy hãy giải quyết vấn đề đó. Giải pháp của bạn khá tốt nhưng vấn đề chính là thời gian và bộ nhớ của O (Mn) nếu các chuỗi có độ dài m và n. Bạn có thể cải thiện điều này. Điều đầu tiên cần chú ý là nếu các chuỗi có tiền tố hoặc hậu tố chung thì bạn có thể tự động loại bỏ nó. Đó là, khoảng cách xóa cho 3 và 4 giống như khoảng cách xóa cho 5 và 6. Nó rất rẻ và dễ dàng để xác định xem hai chuỗi có tiền tố và hậu tố chung hay không, và bạn đi từ việc có một mảng với 25*29 phần tử đến một mảng với các yếu tố 5*9, một chiến thắng lớn.It is very cheap and easy to determine if two strings have a common prefix and suffix, and you go from having an array with 25*29 elements to an array with 5*9 elements, a huge win.Điều tiếp theo cần chú ý là: Bạn xây dựng toàn bộ mảng 7 phía trước, nhưng trong khi bạn đang điền vào mảng, 8 chỉ nhìn vào 9 hoặc 0 hoặc 1. Vì bạn không bao giờ nhìn vào một dòng mảng cách đó hai, bạn không bao giờ cần nhiều hơn hai dòng! Đó là, bạn có thể:
Bạn vẫn thực hiện các hoạt động O (MN) và bạn vẫn phân bổ tổng số lượng bộ nhớ, nhưng bạn chỉ có một lượng nhỏ trong bộ nhớ cùng một lúc. Nếu các chuỗi lớn, đó là một khoản tiết kiệm đáng kể. 25 tháng 4 năm 2018 Tổng quanKhoảng cách xóa của hai chuỗi là số lượng ký tự tối thiểu bạn cần xóa trong hai chuỗi để có được cùng một chuỗi. Chẳng hạn, khoảng cách xóa giữa 2 và 3 là 4:
Examples:
Constraints:
Gợi ý
Dung dịchĐặt 3 và 4 lần lượt là độ dài của 2 và 3. Hãy xem xét chức năng: 7 trả về khoảng cách xóa cho tiền tố 8 của 2 và tiền tố 0 của 3. Những gì chúng tôi muốn làm trong giải pháp này, là sử dụng lập trình động để xây dựng một hàm tính toán OPT (Str1Len, Str2Len). Chú ý những điều sau:
Điều này đúng vì nếu một chuỗi là chuỗi trống, chúng ta không có lựa chọn nào khác ngoài việc xóa tất cả các chữ cái trong chuỗi khác.
Điều này được giữ vì chúng ta cần xóa ít nhất một trong các chữ cái 6 hoặc 7 và việc xóa một trong các chữ cái được tính là xóa 5 (do đó 5 trong công thức). Sau đó, vì chúng tôi đã rời đi với tiền tố 0 của STR1 hoặc tiền tố 1 của 3, cần phải lấy mức tối thiểu giữa 3 và 4. Do đó, chúng tôi có được phương trình 5.
Điều này được tổ chức vì chúng tôi không cần xóa các chữ cái cuối cùng để có được cùng một chuỗi, chúng tôi chỉ cần sử dụng cùng một lần xóa mà chúng tôi sẽ làm cho các tiền tố 0 và 1.Giải pháp 1Sau khi tìm thấy các mối quan hệ ở trên cho 7, chúng tôi sử dụng các phương pháp lập trình động để tính toán 2, tức là khoảng cách xóa cho hai chuỗi, bằng cách tính 7 cho tất cả 4, 5 và tiết kiệm các giá trị trước đó để sử dụng sau:Pseudocode:
Độ phức tạp về thời gian: Chúng tôi có một vòng lặp lồng nhau thực hiện các bước 6 steps at every iteration, thus we the time complexity is 7 where 8 and 9 are the lengths of 2 and 3, respectively.Độ phức tạp của không gian: Chúng tôi lưu mọi giá trị của 7 in our 3 2D array, which takes O(N⋅M) space, where 8 and 9 are the lengths of 2 and 3, respectively.Giải pháp 2Giải pháp ở trên mất không gian 7 Vì chúng tôi lưu tất cả các giá trị trước đó, nhưng lưu ý rằng 7 chỉ yêu cầu 3, 4 và 02. Do đó, bằng cách lặp đầu tiên thông qua 4, và sau đó cho mỗi 8 tính toán 5, chúng ta chỉ cần lưu các giá trị cho 8 hiện tại và 8 cuối cùng. Điều này sẽ làm giảm không gian cần thiết cho chức năng.Pseudocode:
Độ phức tạp về thời gian: Độ phức tạp thời gian vẫn giữ nguyên, tức là 7, since we still run a nested loop with 09 iterations.
Độ phức tạp không gian: 10, as we only need to hold two rows of the double array.Mã ví dụMã PHP
Mã Python 1 (làm việc)
Mã Python 2 (không hoạt động)
Mã Python 3 (không hoạt động)
Trường hợp kiểm traPHP
Python
https://stackoverflow.com/questions/44490091/deletion-distance-between-2-strings https://stackoverflow.com/questions/41275345/deletion-distance-between-words Làm thế nào để Python tính khoảng cách chỉnh sửa?Khoảng cách chỉnh sửa giữa hai chuỗi đề cập đến số lượng tối thiểu của các lần chèn, xóa và thay thế ký tự cần thiết để thay đổi một chuỗi sang chuỗi kia. Ví dụ: khoảng cách chỉnh sửa giữa "mèo con" và "ngồi" là ba: thay thế "k" cho "s", thay thế "e" cho "i", và nối "g".substitute the "k" for "s", substitute the "e" for "i", and append a "g". Khoảng cách chỉnh sửa tối thiểu giữa hai chuỗi là bao nhiêu?Khoảng cách chỉnh sửa tối thiểu giữa hai chuỗi STR1 và STR2 được định nghĩa là số lượng hoạt động chèn/xóa/thay thế tối thiểu cần thiết để biến STR1 thành str2. Ví dụ: nếu str1 = "ab", str2 = "abc" sau đó tạo một thao tác chèn của ký tự 'C' trên str1 biến đổi str1 thành str2.the minimum number of insert/delete/substitute operations required to transform str1 into str2. For example if str1 = "ab", str2 = "abc" then making an insert operation of character 'c' on str1 transforms str1 into str2. Làm thế nào để bạn tìm thấy khoảng cách giữa hai chữ cái trong Python?Khoảng cách giữa hai chữ cái là sự khác biệt giữa các vị trí của chúng trong bảng chữ cái. Ví dụ: dist (c, e) = dist (e, c) = 2. dist (a, z) = dist (z, a) = 25.difference between their positions in the alphabet. for example: dist(c, e) = dist(e, c) = 2. dist(a, z) = dist(z, a) = 25. Làm thế nào để bạn tìm thấy khoảng cách giữa hai chuỗi?Có một số cách để đo khoảng cách giữa hai chuỗi. Điều đơn giản nhất là sử dụng khoảng cách Hamming để tìm số lượng không khớp giữa hai chuỗi. Tuy nhiên, hai chuỗi phải có cùng chiều dài.use hamming distance to find the number of mismatch between two strings. However, the two strings must have the same length. |