Khi nào thì hai thuật toán được cho là giống nhau của Wap?


16

Tôi không làm việc trên lý thuyết, nhưng công việc của tôi đòi hỏi phải đọc (và hiểu) các bài lý thuyết mỗi lần. Khi tôi hiểu (một bộ) kết quả, tôi sẽ thảo luận về những kết quả này với những người tôi làm việc cùng, hầu hết những người này cũng không làm việc trên lý thuyết. Trong một trong những cuộc thảo luận như vậy, câu hỏi sau đây đã xuất hiện:

Khi nào người ta nói rằng hai thuật toán đã cho là "tương tự"?

"Tương tự" nghĩa là gì? Hãy để chúng tôi nói rằng hai thuật toán được cho là tương tự nhau nếu bạn có thể đưa ra một trong những tuyên bố sau đây trong một bài báo mà không gây nhầm lẫn / làm phiền bất kỳ nhà phê bình nào (được định nghĩa tốt hơn hoan nghênh):

Yêu cầu 1. "Thuật toán , tương tự như thuật toán B , cũng giải quyết vấn đề X "ABX

Yêu cầu 2. "Thuật toán của chúng tôi tương tự như Thuật toán "C

Hãy để tôi làm cho nó một chút cụ thể hơn. Giả sử chúng ta đang làm việc với các thuật toán đồ thị. Đầu tiên một số điều kiện cần thiết để hai thuật toán giống nhau:

  1. Họ phải giải quyết cùng một vấn đề.
  2. Họ phải có cùng một ý tưởng trực quan cấp cao.

Ví dụ, nói về truyền tải đồ thị, chiều rộng đầu tiên và chiều ngang đầu tiên thỏa mãn hai điều kiện trên; đối với các tính toán đường đi ngắn nhất, thuật toán đầu tiên và Dijkstra đáp ứng hai điều kiện trên (tất nhiên là trên các biểu đồ không trọng số); Vân vân.

Đây cũng là điều kiện đủ? Cụ thể hơn, giả sử hai thuật toán thỏa mãn các điều kiện cần thiết là tương tự nhau. Bạn thực sự sẽ gọi họ tương tự, nếu

  1. họ có hiệu suất tiệm cận khác nhau?
  2. cho một lớp học đặc biệt của đồ thị, một thuật toán đòi hỏi thời gian trong khi người kia đòi hỏi O ( n 1 / 3 ) thời gian?Ω(n)O(n1/3)
  3. họ có điều kiện chấm dứt khác nhau? (nhớ lại, họ đang giải quyết cùng một vấn đề)
  4. Bước tiền xử lý có khác nhau trong hai thuật toán không?
  5. độ phức tạp bộ nhớ là khác nhau trong hai thuật toán?

Chỉnh sửa: Câu hỏi rõ ràng rất phụ thuộc vào bối cảnh và chủ quan. Tôi đã hy vọng rằng năm điều kiện trên, tuy nhiên, sẽ cho phép nhận được một số gợi ý. Tôi rất vui khi sửa đổi thêm câu hỏi và cung cấp thêm chi tiết, nếu cần để có câu trả lời. Cảm ơn!


1
nó thực sự phụ thuộc vào bối cảnh. Ví dụ, đối với các thuật toán tuần tự nhất định, DFS và BFS rất khác nhau và người ta thậm chí có thể không hoạt động. Trong cài đặt song song, DFS (hoặc ít nhất một biến thể) là P-Complete, trong khi BFS là "song song dễ dàng".
Suresh Venkat

@SureshVenkat - Tôi đồng ý rằng câu hỏi phụ thuộc rất nhiều vào bối cảnh. Vì lợi ích của việc không bắt đầu một cuộc tranh luận, tôi đã kiềm chế không lấy tên của "hai thuật toán" có nguy cơ nghe có vẻ mơ hồ :-)
Rachit

4
Vấn đề là có gần và có gần. Có một cách nghĩ về phương pháp cập nhật trọng số nhân là "về cơ bản là tìm kiếm nhị phân", nhưng trong bối cảnh sai, điều này nghe có vẻ điên rồ. FWIW, trong tất cả các trường hợp của bạn ở trên, tôi có thể tưởng tượng việc khai báo hai thuật toán là khác nhau.
Suresh Venkat

1
Câu hỏi này có vẻ quá chủ quan với tôi. Về cơ bản, bạn đang yêu cầu một định nghĩa "tương tự", khi không có định nghĩa chính tắc nào tồn tại.
Joe

Câu trả lời:


23

Đây là một vấn đề khó khăn để đưa ra một định nghĩa mạch lạc về "Thuật toán A tương tự như Thuật toán B". Đối với một người, tôi không nghĩ rằng "họ phải giải quyết cùng một vấn đề" là điều kiện cần. Thông thường khi người ta nói trong một bài báo rằng "thuật toán của Định lý 2 tương tự như thuật toán B trong Định lý 1 ", thuật toánA2B1 thực sự đang giải quyết một vấn đề khác so với B , nhưng có một số sửa đổi nhỏ để xử lý vấn đề mới .AB

Thậm chí cố gắng xác định ý nghĩa của hai thuật toán là gì giống nhau là một vấn đề thú vị và khó khăn. Xem bài báo "Khi nào hai thuật toán giống nhau?" http://research.microsoft.com/~gurevich/Opera/192.pdf


17

Thường xuyên hơn không, điều đó có nghĩa là "Tôi không muốn viết chi tiết Thuật toán B, bởi vì tất cả các chi tiết thú vị gần giống với Thuật toán A và tôi không muốn vượt quá giới hạn 10 trang, và dù sao thì thời hạn nộp là trong ba giờ. "


7

Nếu bạn có nghĩa là "tương tự" theo nghĩa thông tục, tôi nghĩ câu trả lời của JeffE nắm bắt ý nghĩa của một số người.

Trong một ý nghĩa kỹ thuật, nó phụ thuộc vào những gì bạn quan tâm. Nếu độ phức tạp thời gian tiệm cận là tất cả những gì bạn quan tâm, sự khác biệt giữa đệ quy và lặp có thể không quan trọng. Nếu khả năng tính toán là tất cả những gì bạn quan tâm, thì sự khác biệt giữa biến đếm và ngăn xếp một ký hiệu không thành vấn đề.

Để so sánh các thuật toán, bước đầu tiên sẽ là làm cho khái niệm tương đương chính xác. Bằng trực giác, chúng ta hãy là không gian của thuật toán và M là một không gian của các đối tượng toán học và s đ m : Một M là một mã hóa hàm s đ m ( P ) là ý nghĩa của thuật toán P . Không gian M có thể chứa bất cứ thứ gì, từ số lượng biến trong thuật toán của bạn, đến biểu đồ trạng thái của nó hoặc độ phức tạp thời gian của nó. Tôi không tin có một khái niệm tuyệt đối về những gì M có thể. Cho MAMsem:AMsem(P)PMMMmặc dù, chúng ta có thể nói hai thuật toán là tương đương nếu bằng s e m ( Q ) . Hãy để tôi nói thêm rằng tôi nghĩ rằng mỗi trong năm tiêu chí bạn đề cập có thể được chính thức hóa bằng toán học theo cách này.sem(P)sem(Q)

Nếu chúng ta muốn nói về một thuật toán tổng quát hơn một thuật toán khác (hoặc một thuật toán tinh chỉnh một thuật toán khác), tôi sẽ ban cho nhiều cấu trúc hơn. Hãy tưởng tượng rằng ( M , ) là một tập hợp có thứ tự một phần và thứ tự x y mã hóa rằng x là một đối tượng được xác định nhiều hơn y . Ví dụ, nếu M chứa bộ dấu vết của một thuật toán và là bộ bao gồm, s đ m ( P ) s đ m ( Q ) có nghĩa rằng tất cả các dấu vết của PM(M,)xyxyMsem(P)sem(Q)Plà một dấu vết của . Chúng ta có thể giải thích điều này như nói rằng P là hơn xác định hơn Q .QPQ

Tiếp theo, chúng ta có thể hỏi liệu có thể định lượng được hai thuật toán gần nhau như thế nào không. Trong trường hợp này, tôi sẽ tưởng tượng rằng phải được ban cho một số liệu. Sau đó, chúng ta có thể đo khoảng cách giữa các đối tượng toán học mà hai thuật toán đại diện. Các khả năng khác là lập bản đồ thuật toán để đo không gian hoặc không gian xác suất và so sánh chúng bằng các tiêu chí khác.M

Tổng quát hơn, tôi sẽ hỏi - bạn quan tâm điều gì (về mặt trực quan), các đối tượng toán học đại diện cho các tính chất trực quan này là gì, làm thế nào tôi có thể ánh xạ từ các thuật toán đến các đối tượng này và cấu trúc của không gian này là gì? Tôi cũng sẽ hỏi liệu không gian của các vật thể có đủ cấu trúc để thừa nhận một khái niệm tương tự hay không. Đây là cách tiếp cận tôi sẽ thực hiện từ góc độ ngữ nghĩa ngôn ngữ lập trình. Tôi không chắc liệu bạn có thấy cách tiếp cận này hấp dẫn hay không, do các nền văn hóa tư tưởng khác nhau trong khoa học máy tính.


5

Theo dòng câu trả lời của Jeff, hai thuật toán tương tự nhau nếu tác giả của một trong số họ hy vọng rằng tác giả của người kia có thể đang xem xét bài viết của mình.

Nhưng đùa, sang một bên, trong cộng đồng lý thuyết, tôi sẽ nói rằng thuật toán A đang giải quyết vấn đề gì khá quan trọng với việc nó có "tương tự" với thuật toán B hay không, có thể giải quyết một vấn đề hoàn toàn khác. A tương tự như B nếu nó "hoạt động" vì cùng một ý tưởng lý thuyết chính. Ví dụ, ý tưởng chính trong cả hai thuật toán là bạn có thể chiếu dữ liệu vào không gian chiều thấp hơn nhiều, bảo toàn định mức với bổ đề Johnson-Lindenstrauss, và sau đó thực hiện tìm kiếm vũ phu? Sau đó, thuật toán của bạn tương tự như các thuật toán khác thực hiện điều này, bất kể bạn đang giải quyết vấn đề gì. Có một số lượng nhỏ các kỹ thuật thuật toán hạng nặng có thể được sử dụng để giải quyết nhiều vấn đề khác nhau và tôi nghĩ rằng các kỹ thuật này tạo thành trọng tâm của nhiều bộ thuật toán "tương tự".


3

Câu hỏi rất thú vị, và giấy rất hay Ryan!

Tôi hoàn toàn đồng ý với ý kiến ​​cho rằng việc đánh giá về sự tương đồng tổng thể giữa các thuật toán chủ yếu là đánh giá giá trị chủ quan. Mặc dù từ quan điểm kỹ thuật, có một số tính năng được quan sát chặt chẽ để quyết định sự giống nhau của thuật toán, cuối cùng, đó cũng là vấn đề sở thích cá nhân. Tôi sẽ cố gắng cung cấp một mô tả về tầm quan trọng của cả hai mặt của cùng một đồng tiền trong khi đề cập đến các điểm cụ thể của câu hỏi của bạn:

Từ quan điểm kỹ thuật:

  1. Ryan đã chỉ ra rằng cả hai thuật toán phải giải quyết cùng một vấn đề . Người ta có thể đi xa hơn và khái quát hóa khái niệm này bằng cách nói rằng nó thường đủ để chứng minh rằng có một phép biến đổi đa thức của cùng một thể hiện có thể hiểu được bằng thuật toán A để thuật toán B có thể xử lý nó. Tuy nhiên, điều này sẽ thực sự rất yếu. Tôi thích nghĩ về sự tương đồng theo nghĩa mạnh mẽ hơn.
  2. Tuy nhiên, tôi sẽ không bao giờ mong đợi hai thuật toán tương đương có cùng một ý tưởng trực quan --- mặc dù, một lần nữa, đây là một định nghĩa không dễ nắm bắt. Hơn thế nữa, thường thì các thuật toán được coi là tương tự nhau không tuân theo lý do chính. Ví dụ, xem xét một số thuật toán sắp xếp, tuy nhiên, bắt nguồn theo những cách khác nhau theo các ý tưởng khác nhau. Như một ví dụ cực đoan, hãy xem xét các thuật toán di truyền thường được cộng đồng toán học coi là các quá trình ngẫu nhiên (và do đó chúng tương đương nhau theo quan điểm của chúng) sau đó được mô hình hóa và phân tích theo một cách hoàn toàn khác.
  3. N(N21)cơ sở dữ liệu mẫu phụ gia thực sự sẽ mở rộng cùng một số nút theo cùng một thứ tự và điều đó làm cho cả hai thuật toán (và heuristic của chúng) tương đương nhau theo nghĩa rất mạnh, trong khi cách tiếp cận thứ nhất không có tiền xử lý và cách thứ hai có một chi phí đáng kể trước khi bắt đầu giải quyết một trường hợp cụ thể. Tuy nhiên, ngay khi Cơ sở dữ liệu Mẫu của bạn xem xét các tương tác tương tự nhiều hơn, có một khoảng cách lớn về hiệu suất giữa chúng, do đó chúng chắc chắn là các ý tưởng / thuật toán khác nhau.
  4. Trên thực tế, tôi nghĩ rằng hầu hết mọi người sẽ đánh giá các thuật toán cho mục đíchhiệu suất của họ . Do đó, hiệu suất tiệm cận là một số liệu tốt để lý giải về sự giống nhau giữa các chương trình. Tuy nhiên, hãy nhớ rằng hiệu suất này không nhất thiết là trường hợp điển hình để nếu hai thuật toán có hiệu suất tiệm cận giống nhau nhưng hoạt động khác nhau trong thực tế, thì có lẽ bạn sẽ kết luận rằng chúng khác nhau. Bằng chứng mạnh mẽ về vấn đề này là cả hai thuật toán có cùng hiệu suất cả về thời gian và bộ nhớ (và điều này, như Suresh đã nói, làm cho DFS và BFS trông khác nhau). Trong trường hợp khẳng định này không có vẻ thuyết phục với bạn, vui lòng tham khảo cuốn sách xuất sắc (và rất được đề xuất): Lập trình vũ trụbởi Seth Lloyd. Trong trang 189, ông đề cập đến một danh sách với hơn 30 biện pháp phức tạp có thể được sử dụng để coi các thuật toán là khác nhau.

Vậy điều gì làm cho các thuật toán trở nên giống / khác nhau? Theo quan điểm của tôi (và đây hoàn toàn là suy đoán), sự khác biệt chính là về những gì họ đề xuất với bạn. Nhiều, rất nhiều (nhiều!) Thuật toán chỉ khác nhau ở một vài kỹ thuật khi phục vụ cho cùng một mục đích sao cho trường hợp điển hình là khác nhau cho các phạm vi khác nhau của đầu vào. Tuy nhiên, điểm khác biệt lớn nhất của tất cả là (theo mắt tôi) những gì họ gợi ý cho bạn. Các thuật toán có khả năng khác nhau và do đó điểm mạnh và điểm yếu riêng của chúng. Nếu hai thuật toán trông giống nhau nhưng có thể được mở rộng theo nhiều cách khác nhau để đối phó với các trường hợp khác nhau thì tôi sẽ kết luận rằng chúng khác nhau. Tuy nhiên, thông thường, hai thuật toán trông giống nhau nhiều đến mức bạn sẽ coi chúng giống nhau ... cho đến khi ai đó đến tạo ra sự khác biệt chính và đột nhiên, chúng hoàn toàn khác nhau!

Xin lỗi, phản hồi của tôi cuối cùng đã quá lâu ...

Chúc mừng


1
Trên thực tế, Ryan cho rằng không cần thiết cho cả hai thuật toán để giải quyết cùng một vấn đề.
Jeffε

Thật! Tôi chỉ thu thập ý kiến ​​của tôi về vấn đề này, nhưng bạn chắc chắn đúng!
Carlos Linares López

2

Bất kỳ đề cập đến sự tương tự mà không xác định một số liệu tương tự không được xác định rõ. Có nhiều cách trong đó hai thuật toán có thể giống nhau:

Quicksort và Mergesort giải quyết các vấn đề rất giống nhau, nhưng họ sử dụng các thuật toán khác nhau để làm như vậy. Chúng có độ phức tạp thuật toán tương tự (mặc dù hiệu suất trong trường hợp xấu nhất và việc sử dụng bộ nhớ có thể khác nhau). Quicksort và Mergesort đều tương tự như Bubbledort, tuy nhiên Bubbledort có các số liệu hiệu suất rất khác nhau. Nếu bạn bỏ qua số liệu thống kê phức tạp Quicksort, Mergesort và Bubbledort đều thuộc cùng một lớp tương đương. Tuy nhiên, nếu bạn quan tâm đến sự phức tạp của thuật toán, thì Quicksort và Mergesort tương tự nhau nhiều hơn so với Bubbledort.

Lập trình động Smith-Waterman và so sánh trình tự HMM để giải quyết vấn đề sắp xếp hai chuỗi. Tuy nhiên, họ có đầu vào khác nhau. Smith-Waterman lấy hai chuỗi làm đầu vào và so sánh trình tự HMM lấy HMM và chuỗi làm đầu vào. Cả hai sắp xếp thứ tự đầu ra. Về mặt thúc đẩy các ý tưởng, cả hai đều tương tự như khoảng cách chỉnh sửa của Levenshtein , nhưng chỉ ở mức rất cao.

Dưới đây là một số tiêu chí theo đó hai thuật toán có thể được gọi là tương tự nhau:

  1. Các loại đầu vào / đầu ra
  2. Độ phức tạp của thuật toán / bộ nhớ
  3. Giả định về các loại đầu vào (ví dụ: chỉ có số dương hoặc độ ổn định dấu phẩy động)
  4. Mối quan hệ lồng nhau (ví dụ: một số thuật toán là trường hợp đặc biệt của người khác)

Quyết định quan trọng về ý nghĩa của sự tương tự vẫn còn. Đôi khi bạn quan tâm đến sự phức tạp của một thuật toán, đôi khi bạn không. Do định nghĩa về độ tương tự phụ thuộc vào ngữ cảnh của cuộc thảo luận, thuật ngữ "thuật toán tương tự" không được xác định rõ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.