Sự khác biệt và mối quan hệ giữa các thuật toán ngẫu nhiên và không điều kiện?


30

Sự khác biệt và mối quan hệ là gì giữa các thuật toán ngẫu nhiên và thuật toán không xác định?

Từ Wikipedia

Một thuật toán ngẫu nhiên là một thuật toán sử dụng một mức độ ngẫu nhiên như là một phần của logic của nó. Thuật toán thường sử dụng các bit ngẫu nhiên thống nhất làm đầu vào phụ trợ để hướng dẫn hành vi của nó, với hy vọng đạt được hiệu suất tốt trong "trường hợp trung bình" trên tất cả các lựa chọn có thể của các bit ngẫu nhiên. Chính thức, hiệu suất của thuật toán sẽ là một biến ngẫu nhiên được xác định bởi các bit ngẫu nhiên; do đó, thời gian chạy hoặc đầu ra (hoặc cả hai) là các biến ngẫu nhiên.

Một thuật toán không đơn định là một thuật toán có thể biểu hiện những hành vi khác nhau trên chạy khác nhau, như trái ngược với một thuật toán xác định. Có một số cách mà một thuật toán có thể hành xử khác nhau từ chạy sang chạy. Một thuật toán đồng thời có thể thực hiện khác nhau trên các lần chạy khác nhau do điều kiện cuộc đua. Các hành vi của thuật toán xác suất phụ thuộc vào trình tạo số ngẫu nhiên. Một thuật toán giải quyết vấn đề trong thời gian đa thức không xác định có thể chạy trong thời gian đa thức hoặc thời gian theo cấp số nhân tùy thuộc vào các lựa chọn mà nó đưa ra trong quá trình thực hiện.

Các thuật toán ngẫu nhiên và thuật toán xác suất có cùng một khái niệm không?

Nếu có, các thuật toán ngẫu nhiên chỉ là một loại thuật toán không xác định?


Tôi nghĩ rằng một phần của sự nhầm lẫn phát sinh bởi vì âm thanh "không xác định" và "không xác định" giống như chúng có nghĩa giống nhau, nhưng chúng không: "xác định" ngụ ý "không ngẫu nhiên" và "không xác định". Vì vậy, "ngẫu nhiên" và "không xác định" là cả hai cách mà thuật toán có thể "không xác định", nhưng "không xác định" có một định nghĩa kỹ thuật cụ thể và không chỉ đơn giản là một từ trái nghĩa với "xác định".
Joe

Câu trả lời:


24

Các thuật toán không xác định rất khác với các thuật toán xác suất.

Các thuật toán xác suất là những thuật toán sử dụng tung đồng xu và hoạt động "hầu hết thời gian". Như một ví dụ, ngẫu nhiên các biến thể của công việc quicksort trong thời gian trong kỳ vọng (và với xác suất cao), nhưng nếu bạn không may mắn, có thể kéo dài nhiều như Θ ( n 2 ) . Các thuật toán xác suất là thực tế và được máy tính của bạn sử dụng ví dụ khi tạo khóa RSA (để kiểm tra hai yếu tố của khóa bí mật của bạn là số nguyên tố). Thuật toán xác suất không sử dụng bất kỳ lần tung đồng xu nào đôi khi được gọi là "xác định".Θ(nđăng nhậpn)Θ(n2)

Các thuật toán không xác định là những thuật toán "cần một gợi ý" nhưng luôn luôn chính xác: chúng không thể bị đánh lừa bằng cách đưa ra gợi ý sai. Ví dụ, đây là một thuật toán không xác định có yếu tố : đoán hệ số của n và xác minh rằng tất cả các yếu tố là số nguyên tố (có thuật toán xác định "nhanh về lý thuyết" để thực hiện điều đó). Thuật toán này rất nhanh và từ chối các gợi ý sai. Hầu hết mọi người nghĩ rằng các thuật toán ngẫu nhiên không thể nhanh chóng tạo ra các số nguyên. Rõ ràng mô hình tính toán này không thực tế.nn

Tại sao chúng ta quan tâm đến các thuật toán không xác định? Có một loại vấn đề, được gọi là NP, bao gồm các vấn đề quyết định có thuật toán không xác định hiệu quả. Hầu hết mọi người nghĩ rằng các vấn đề khó nhất trong lớp đó, được gọi là các vấn đề hoàn thành NP, không có thuật toán xác định hiệu quả (hoặc thậm chí ngẫu nhiên); đây được gọi là câu hỏi P vs NP. Vì nhiều vấn đề tự nhiên là NP-đầy đủ, thật thú vị khi biết liệu trên thực tế chúng không thể giải quyết được một cách hiệu quả, trong trường hợp xấu nhất (trong thực tế, đôi khi các trường hợp phát sinh trong thực tế có thể giải quyết được trong thời gian hợp lý).


Cảm ơn! (1) Tôi nhớ các vấn đề NP là những vấn đề có thể được giải quyết bằng thuật toán trên máy Turing không xác định trong thời gian đa thức. Vì vậy, "một thuật toán trên một máy Turing không đặc biệt" và "một thuật toán không xác định trên một máy Turing xác định" có nghĩa nào đó tương đương? (2) Bạn có nghĩ thuật toán probabalistic và thuật toán ngẫu nhiên là cùng một khái niệm không? (3) Bạn có nghĩ rằng Wikipedia nói rằng thuật toán đồng thời và thuật toán tập trung là hai loại thuật toán không xác định là sai?
Tim

1
Tôi không nghĩ rằng hương vị chứng nhận của thuyết không điều kiện phục vụ để làm rõ sự khác biệt với ngẫu nhiên.
Raphael

(1) Vâng, hai cái này giống nhau. (2) Đây là hai tên cho cùng một khái niệm. (3) Wikipedia đang đưa ra một số ví dụ về các loại thuật toán khác, mặc dù cách trình bày có thể gây hiểu nhầm. Các thuật toán song song và xác suất không phải là không xác định.
Yuval Filmus

4
@ShelbyMooreIII Không xác định có ý nghĩa kỹ thuật rất cụ thể trong lý thuyết đệ quy và khoa học máy tính lý thuyết.
Yuval Filmus

1
Yuval, vui lòng gắn cờ các bình luận mà bạn cho là không mang tính xây dựng hoặc lỗi thời; Chúng tôi sẽ loại bỏ chúng sau đó.
Raphael

15

Một thuật toán chỉ định một phương thức để có được từ một đầu vào nhất định đến một đầu ra mong muốn có mối quan hệ nhất định với đầu vào. Chúng tôi nói rằng thuật toán này có tính xác định nếu tại bất kỳ thời điểm nào, nó được chỉ định chính xác và rõ ràng bước tiếp theo trong thuật toán phải được thực hiện như một phần của phương thức đó, có khả năng phụ thuộc vào đầu vào hoặc dữ liệu một phần được tính toán cho đến nay, nhưng luôn luôn được xác định duy nhất.

Nondeterminism có nghĩa là một số phần của thuật toán bị bỏ lại hoặc thậm chí không được chỉ định. Ví dụ: "int i = số chẵn từ 0 đến n" không được xác định rõ. Điều này có nghĩa là không có hành vi duy nhất được chỉ định tại thời điểm này.

Để sự khác biệt này trở nên hữu ích, bạn cần có khái niệm (thông thường) về 'tính chính xác' cho các thuật toán (xác định), một cách không chính thức là "thuật toán luôn tính toán những gì tôi muốn nó tính toán". Sau đó, sẽ trở nên thú vị khi nghĩ về tính chính xác có nghĩa là gì đối với các thuật toán không xác định, điều này phải tính đến các lựa chọn có thể có trong các hướng dẫn chưa được xác định rõ.

Có hai cách để xác định tính đúng đắn cho thuyết không điều kiện. Cách thứ nhất khá đơn giản và ít thú vị, vì tính chính xác có nghĩa là "thuật toán luôn tính toán những gì tôi muốn nó tính toán, cho tất cả các chuỗi lựa chọn mà tôi được phép thực hiện". Điều này đôi khi xảy ra nếu một tác giả của một mã giả quá lười biếng để chọn một số và nói "chọn bất kỳ số chẵn nào trong khoảng từ 0 đến n", khi "chọn 0" sẽ làm cho thuật toán xác định. Về cơ bản, bằng cách thay thế tất cả các điều kiện không xác định bằng kết quả của một số lựa chọn, bạn có thể thực hiện thuật toán xác định.

Đây cũng là 'chủ nghĩa không xác định' được đề cập trong đoạn thứ hai của bạn. Đây cũng là điều không phổ biến trong các thuật toán song song: trong các thuật toán này, bạn không hoàn toàn chắc chắn việc thực thi chính xác trông như thế nào, nhưng bạn biết rằng nó sẽ luôn hoạt động, bất kể điều gì xảy ra chính xác (nếu không thuật toán song song của bạn sẽ không chính xác).

Định nghĩa thú vị về tính đúng đắn của thuật toán không xác định là "thuật toán luôn tính toán những gì tôi muốn nó tính toán, đối với một số người chuỗi các lựa chọn tôi được phép thực hiện". Điều này có nghĩa là có thể có những lựa chọn sai, theo nghĩa là chúng làm cho thuật toán tạo ra câu trả lời sai hoặc thậm chí đi theo một vòng lặp vô hạn. Trong ví dụ "chọn bất kỳ số chẵn nào trong khoảng từ 0 đến n", có lẽ 4 và 16 là lựa chọn đúng, nhưng tất cả các số khác đều sai và các số này có thể thay đổi tùy thuộc vào đầu vào, kết quả một phần và các lựa chọn được thực hiện cho đến nay.

Khi được sử dụng trong khoa học máy tính, thuyết không điều kiện thường bị giới hạn trong việc chọn không điều kiện bằng cách chọn 0 hoặc 1. Tuy nhiên, nếu bạn chọn nhiều bit như vậy không nhất thiết, bạn có thể tạo ra các số không dài không xác định hoặc các đối tượng khác, cũng như đưa ra các lựa chọn không xác định dài, (nếu có) giới hạn khả năng ứng dụng của nó - nếu khả năng áp dụng bị hạn chế, thì điều không thuyết phục là quá mạnh ngay từ đầu.

Nondeterminism là một công cụ mạnh mẽ như thuật toán xác định dựa trên chứng chỉ, nghĩa là thuật toán kiểm tra một thuộc tính được cung cấp một thể hiện và chứng chỉ cho thuộc tính đó. Bạn có thể chỉ cần đoán chứng nhận không xác định cho một hướng và bạn có thể đưa ra một chứng chỉ có chứa tất cả các câu trả lời 'đúng' cho các phỏng đoán không xác định 0 và 1 của chương trình của bạn cho hướng khác.

Nếu chúng ta ném thời gian chạy vào hỗn hợp, thì mọi thứ sẽ trở nên thú vị hơn. Thời gian chạy của một thuật toán không xác định thường được lấy là tối thiểu trên tất cả các lựa chọn (phải). Tuy nhiên, các lựa chọn khác có thể dẫn đến thời gian chạy tồi tệ hơn đáng kể (có thể tồi tệ hơn về mặt triệu chứng hoặc thậm chí tệ hơn mức tối thiểu), hoặc thậm chí là một vòng lặp vô hạn. Đây là lý do tại sao chúng tôi lấy tối thiểu: chúng tôi không quan tâm đến những trường hợp kỳ lạ này.

Bây giờ chúng ta có được các thuật toán ngẫu nhiên. Các thuật toán ngẫu nhiên giống như các thuật toán không xác định, nhưng thay vì 'cho phép' lựa chọn giữa 0 và 1 tại một số điểm nhất định, lựa chọn này được xác định bởi một lần tung đồng xu ngẫu nhiên tại thời điểm lựa chọn phải được thực hiện (có thể khác với chạy để chạy hoặc khi cùng một lựa chọn phải được thực hiện lại sau này trong quá trình thực thi thuật toán). Điều này có nghĩa là kết quả là 0 hoặc 1 với xác suất bằng nhau. Tính chính xác bây giờ trở thành "thuật toán gần như luôn luôn tính toán những gì tôi muốn nó tính toán" hoặc "thuật toán luôn tính toán những gì tôi muốn nó tính toán" (chỉ là phiên bản xác định). Trong trường hợp thứ hai, thời gian thuật toán cần tính toán câu trả lời của nó thường là 'gần như luôn luôn nhanh', tương phản với một định thức 'luôn luôn nhanh'.

PZPPNP


1
Ôi(|S|)S

14

Tóm lại: chủ nghĩa không xác định có nghĩa là có nhiều lựa chọn, có giá trị như nhau về cách tiếp tục tính toán. Ngẫu nhiên có nghĩa là sử dụng một nguồn bit (ngẫu nhiên) bên ngoài để hướng dẫn tính toán.


Để hiểu được chủ nghĩa không điều kiện, tôi khuyên bạn nên xem automata hữu hạn (FA). Đối với FA xác định (DFA), chức năng chuyển đổi là, một chức năng. Với trạng thái hiện tại và ký hiệu đầu vào tiếp theo, trạng thái tiếp theo được xác định duy nhất.

(mộtb)*(mộtc)*

NFA
[ nguồn ]

một(mộtb)*(mộtc)*một.

Điểm mấu chốt ở đây là sự chấp nhận được định nghĩa là "chấp nhận nếu một hoạt động chấp nhận" đối với NFA. Tiêu chí tồn tại này có thể được hiểu là "luôn luôn đoán đúng", mặc dù không có phỏng đoán thực tế.

Lưu ý rằng không có xác suất ở đây, bất cứ nơi nào. Nếu bạn dịch ngôn ngữ không điều kiện sang các ngôn ngữ lập trình, bạn sẽ có các câu lệnh có thể gây ra các bước nhảy khác nhau cho các câu lệnh khác có cùng trạng thái . Một điều như vậy không tồn tại, ngoại trừ có thể trong các ngôn ngữ lập trình bí truyền được thiết kế để đánh lừa tâm trí của bạn.


Ngẫu nhiên là khá khác nhau. Nếu chúng tôi phá vỡ nó, chương trình tự động / chương trình không có nhiều lựa chọn để tiếp tục thực hiện. Khi (các) bit ngẫu nhiên được rút ra, câu lệnh tiếp theo được xác định duy nhất:

if ( rand() > 5 )
  do_stuff();
else
  do_other_stuff();

Về mặt automata hữu hạn, hãy xem xét điều này:

PFA
[ nguồn ]

Bây giờ mỗi từ đều có xác suất và automaton xác định phân phối xác suất trên {một,b,c}* (Khác biệt giữa 1và tổng các cạnh đi là xác suất chấm dứt; những từ không thể được chấp nhận có xác suất0).

Chúng ta có thể xem đây là một máy tự động xác định, đưa ra chuỗi các quyết định ngẫu nhiên (mô hình thực hành khá tốt, vì chúng ta thường không sử dụng các nguồn ngẫu nhiên thực sự); điều này có thể được mô hình hóa như một DFA hơnΣ×Π Ở đâu Π là một bảng chữ cái đủ lớn được sử dụng bởi nguồn ngẫu nhiên.


Một lưu ý cuối cùng: chúng ta có thể thấy rằng thuyết không thuyết phục là một khái niệm lý thuyết thuần túy, nó không thể được thực hiện! Vậy tại sao chúng ta sử dụng nó?

  1. Nó thường cho phép các đại diện nhỏ hơn. Bạn có thể biết rằng có NFA mà DFA nhỏ nhất theo cấp số nhân là lớn nhất. Sử dụng những cái nhỏ hơn chỉ là vấn đề đơn giản hóa thiết kế tự động và bằng chứng kỹ thuật.

  2. Dịch giữa các mô hình thường đơn giản hơn nếu không cho phép thuyết không được phép trong mô hình đích. Ví dụ, xem xét chuyển đổi các biểu thức thông thường sang DFA: cách thông thường (và đơn giản) là dịch nó sang NFA và xác định biểu thức này. Tôi không biết về một công trình trực tiếp.

  3. Đây có thể là một mối quan tâm học thuật, nhưng điều thú vị là thuyết không phá hủy có thể làm tăng sức mạnh của một thiết bị. Đây không phải là trường hợp của máy tự động và máy Turing hữu hạn, được cho là thiết bị mô hình máy phổ biến nhất, nhưng ví dụ, tính năng đẩy xuống tự động, Büchi automata và automata cây từ trên xuống có thể chấp nhận ngôn ngữ ít hơn so với anh chị em không xác định của họ.


  1. Xem câu hỏi này trên cstheory.SE để biết ví dụ.
  2. Xem ở đây , ở đâyở đây (Dự luật 1.6.2) , tương ứng.

Vì vậy, vì trong lập trình, chúng ta không thể tạo ra nhiều "nếu khác" với cùng một điều kiện, đó có phải là lý do tại sao xác suất / trọng lượng đôi khi được đưa vào điều kiện không?
kate

@kate Tôi không biết ý của bạn là gì. Ngôn ngữ lập trình - quái, máy tính! - vốn dĩ mang tính quyết định. Chúng ta có thể tạo ra ảo ảnh về tính ngẫu nhiên bằng cách sử dụng PRNG và đầu vào ngẫu nhiên (bất kể điều đó có nghĩa là gì).
Raphael

14

Bạn nên lưu ý rằng có hai định nghĩa khác nhau về thuyết không vô căn cứ được ném quanh đây.

  1. Như wikipedia định nghĩa nó, khá nhiều "không xác định", nghĩa là, bất kỳ thuật toán nào không luôn có cùng hành vi trên cùng một đầu vào. Các thuật toán ngẫu nhiên là một trường hợp đặc biệt của các thuật toán "không xác định", bởi vì chúng phù hợp với định nghĩa như tôi vừa đưa ra.

  2. Các mô hình không tính toán của máy tính (như máy turing không điều kiện) là mô hình lý thuyết của tính toán. Họ có thể có nhiều đường thực thi có thể và họ "chấp nhận" nếu bất kỳ đường dẫn nào chấp nhận. Bạn nên lưu ý rằng chúng không có thật. Không có cách nào để chạy một thuật toán không nhất thiết theo nghĩa này, mặc dù bạn có thể mô phỏng nó với một thuật toán ngẫu nhiên hoặc xác định.

Trong CS, chủ nghĩa không xác định thường có nghĩa là (2), vì vậy định nghĩa của Wikipedia mà bạn đưa ra (đó là (1)) là sai lệch. Hầu hết các câu trả lời cho đến nay giải thích (2), không phải (1).


Theo 1), Quicksort ngẫu nhiên là một thuật toán xác định; Tôi không chắc đó là thuật ngữ hữu ích. Tôi đoán 1) có thể được mô tả là chế độ xem "hộp đen" trong khi 2) thực sự kiểm tra thuật toán / máy trong tay. Có thể cho rằng, CS là tất cả khoảng 2); Tôi sẽ gán quan điểm 1) cho kỹ thuật phần mềm (mô-đun).
Raphael

@Raphael, Điểm hay, tôi nên sửa (1) để nói "có cùng hành vi trên cùng một đầu vào". Đồng ý về việc thích (2) hơn (1).
usul

"Hành vi" là mơ hồ, chính xác theo cách hộp đen và trắng. :)
Raphael

Chắc chắn, nhưng, tôi đoán tôi xem sự khác biệt quan trọng là giữa một Turing Machine không chính thức, được xác định chính xác (2) và "không xác định" mơ hồ / mơ hồ (1), có thể bao gồm tính ngẫu nhiên (trong khi NTM không có). Vì vậy, đó là tất cả những gì tôi muốn nói ....
usul 2/214

Không có gì "không thực tế" về việc chạy một thuật toán không xác định, điều đó chỉ có nghĩa là trong khi chạy, các lựa chọn cần phải được đưa ra mà kết quả không được xác định bởi thuật toán. Sự khác biệt duy nhất giữa 1 và 2 là trong 1 bạn chưa nói khi thuật toán được coi là "thành công", trong khi ở 2, thuật toán phải là loại luôn luôn nói "có" hoặc "không" ở cuối chạy và bạn có một vấn đề quyết định và bạn xác định câu trả lời của thuật toán cho vấn đề là "có" nếu và chỉ khi bất kỳ một trong số đó có thể chạy câu trả lời "có". Vì vậy, 2 chỉ là một trường hợp đặc biệt của 1.
Revierpost

1

Xem xét lại điều này do một số nghiên cứu liên quan mà tôi đang thực hiện, sự bất đồng giữa tôi và một số người khác đã trả lời, có thể được đồng hóa thành một sự hiểu biết toàn diện trong đó tất cả chúng ta đều đúng. Nhưng IMO thuật ngữ khoa học máy tính được thông qua, giới hạn không giới hạn là một oxymoron không chính xác (đó là quan điểm của tôi trước đây).

Điểm mấu chốt của họ là phân biệt giữa thuyết không giới hạn và không giới hạn. [1]

Các máy Turing không phá hủy (hay còn gọi là NT NTss) đã giới hạn tính không phá hủy ở chỗ mỗi chuyển đổi trạng thái có một số khả năng bị ràng buộc , tức là số lượng chương trình (còn gọi là cấu hình của trộm) là hữu hạn. Các băng vẫn không bị ràng buộc, vì vậy bằng chứng chấm dứt vẫn không thể giải quyết được. Nhưng đối với bất kỳ đầu vào cụ thể nào dừng lại, đầu ra là xác định và bị ràng buộc theo thời gian - tức là đối với bất kỳ đầu vào nào, kết quả là xác định hoặc không chấm dứt. Ngoài ra các NTM thực thi song song tất cả các cấu hình có thể, do đó chúng thực thi nhanh hơn theo cấp số nhân so với mô phỏng các NTM trên các máy Turing xác định (hay còn gọi là DT DTMs). [2]

Thực sự không có bất kỳ mối quan hệ không xác định nào giữa đầu vào và kết quả trong NTM vì kết quả luôn giống nhau đối với bất kỳ trạng thái đầu vào hoặc trạng thái ban đầu nào, điều này là hiển nhiên bởi vì chúng có thể được mô phỏng bởi DTM mà không có bất kỳ sự ngẫu nhiên nào. [2] Không thể quyết định không phải là phản đề của tính xác định, bởi vì không dừng lại cũng là một kết quả xác định. Các máy xác định luôn có cùng kết quả cho một đầu vào nhất định, ngay cả khi kết quả đó không dừng lại. Tính không phổ biến cục bộ của NTM là trong mỗi lần chuyển trạng thái của thuật toán thực thi. Không thể chắc chắn một tiên nghiệm mà con đường của cây có thể chấm dứt cung cấp trạng thái đầu ra. Nhưng sự không chắc chắn không phải là không thuyết phục. Do đó, thuật ngữ không giới hạn giới hạn không giới hạn, nhằm mục đích mô tả sự không xác định cục bộ trong máy trạng thái nhưng không liên quan đến các kết quả đầu vào với kết quả, do đó, khái niệm về giới hạn của ràng buộc. Tôi vẫn nghĩ rằng thuật ngữ nondeterminism ràng buộc ràng buộc là một oxymoron và nó có thể được mô tả chính xác hơn như là một máy chuyển đổi trạng thái song song của Wap.

Trong khi đó, đối với bất kỳ trạng thái đầu vào hoặc trạng thái ban đầu nhất định, chủ nghĩa không giới hạn không giới hạn (hay còn gọi là không xác định rõ ràng) có số lượng trạng thái không giới hạn. Không giới hạn không liên kết không chỉ liên quan đến số lượng cấu hình có thể có của các chương trình, mà một số trạng thái bên ngoài không bị ràng buộc không phải là một phần của trạng thái đầu vào hoặc ban đầu, chẳng hạn như độ trễ không giới hạn. Và do đó, kết quả có thể thay đổi trên các lần thực hiện lặp lại cho cùng một điều kiện đầu vào hoặc điều kiện ban đầu; do đó không phải là mối quan hệ xác định giữa đầu vào và kết quả. [3]

Các thuật toán ngẫu nhiên và xác suất sử dụng một số điều kiện không xác định, tức là lựa chọn ngẫu nhiên các cấu hình có thể có thể bị ràng buộc về số lượng cấu hình, nhưng chúng không thực hiện tất cả các cấu hình có thể như NTM. Do đó, chúng không mang tính xác định trừ khi tính ngẫu nhiên là xác định (ví dụ PRNG) và trạng thái ban đầu của entropy cho tính ngẫu nhiên được coi là một phần của đầu vào.

[1] https://en.wikipedia.org/w/index.php?title=Unbounded_nondeterminism&oldid=710628370#Nondeterministic_automata

[2] https://en.wikipedia.org/w/index.php?title=Non-deterministic_Turing_machine&oldid=754212081#Equivalence_with_DTMs

[3] Hewitt, Meijer và Szyperski: Người mẫu diễn viên (mọi thứ bạn muốn biết ...) . Nhảy đến mốc 17:44 phút.


1
Tôi không thấy cách này trả lời câu hỏi.
adrianN

1
@adrianN câu trả lời đưa ra lời giải thích về chủ nghĩa không thực sự là gì. Và sau đó giải thích các thuật toán ngẫu nhiên liên quan như thế nào. Câu hỏi yêu cầu liên quan đến hai. Chơi lô tô. Câu hỏi đã được trả lời.
Shelby Moore III

0

Ngoài tất cả các câu trả lời giải thích sự khác biệt, tôi có một ví dụ có thể giúp bạn có được điều họ muốn nói.
Hãy xem xét một đồng xu quăng, bạn có nhận được một H hoặc T . Nếu tung đồng xu là ngẫu nhiên, nó là rất có khả năng rằng trong số 1000 tung đồng xu, 500 sẽ là H và nó là khá chắc rằng 999 trong số họ sẽ là H . Nhưng nếu việc tung đồng xu là không xác định, chúng ta không thể nói rằng việc nhận 999 H sẽ rất khó xảy ra.


Tôi nghĩ rằng bài đăng của bạn đóng vai trò là một bình luận, bên cạnh đó nó không cố gắng giải quyết câu hỏi chính ngẫu nhiên so với các thuật toán không xác định và hơn nữa, nó kéo chúng ta trở lại loại không phổ biến khác.
Ác

-6

Các thuật toán ngẫu nhiên (thời gian đa thức, kết quả boolean) nằm trong lớp độ phức tạp tính toán RP, là một tập hợp con của NP trong đó các thuật toán không xác định (thời gian đa thức, kết quả boolean) nằm trong siêu dữ liệu của P trong đó thời gian xác định thuật toán cư trú.

Sự phức tạp của tập hợp là về việc giảm các vấn đề trong bộ này sang bộ khác. Do đó, RP NP không loại trừ khả năng các thuật toán ngẫu nhiên cũng không xác định vì theo định nghĩa, một siêu khối chứa tập hợp con. Tập hợp con có nghĩa là mọi thuật toán RP (hoặc bất kỳ thuật toán hoàn thành RP nào) có thể được giảm xuống thành một số thuật toán NP (hoặc bất kỳ thuật toán NP-hoàn chỉnh nào). P là tập con của RP vì mọi vấn đề trong P có thể được giảm xuống thành vấn đề trong RP trong đó lượng entropy không được kiểm soát là 0.

Về mặt tiếp theo, điều này tương tự như cách mọi vấn đề trong NC (tính toán song song) có thể được giảm xuống thành một vấn đề trong P bằng cách mô phỏng tính toán song song để giảm một vấn đề nối tiếp trong P nhưng chưa được chứng minh rằng điều ngược lại là đúng, nghĩa là rằng mọi vấn đề trong P đều có thể giảm được đối với một vấn đề ở NC, cũng không được chứng minh là không đúng sự thật, tức là bằng chứng rõ ràng cho thấy vấn đề hoàn chỉnh P không thể giải quyết được vấn đề ở NC. Có thể có những vấn đề vốn đã nối tiếp và không thể tính toán song song, nhưng để chứng minh rằng chứng minh P ≠ NC dường như không hợp lý (vì những lý do quá tiếp tuyến để thảo luận trong câu trả lời này).

Tổng quát hơn (nghĩa là không giới hạn ở các loại kết quả boolean), các thuật toán ngẫu nhiên được phân biệt với các thuật toán xác định trong đó một số entropy có nguồn gốc bên ngoài . Các thuật toán ngẫu nhiên được phân biệt với các thuật toán không xác định vì entropy bị giới hạn , và do đó các thuật toán ngẫu nhiên (và không xác định) có thể được chứng minh là luôn luôn chấm dứt.

Sự khó đoán của các thuật toán không xác định là do không thể liệt kê tất cả các hoán vị có thể có của entropy đầu vào (dẫn đến kết quả không thể đoán trước được). Sự khó đoán của một thuật toán ngẫu nhiên là do không thể kiểm soáttất cả các entropy đầu vào (dẫn đến kết quả không thể đoán trước của một kết quả không xác định, mặc dù tỷ lệ không thể đoán trước có thể dự đoán được). Cả hai điều này đều không phải là những tuyên bố về tính không thể đoán trước của câu trả lời chính xác cho vấn đề, mà là những biểu hiện không thể đoán trước được trong kênh bên chấm dứt và kết quả không xác định tương ứng. Có vẻ như nhiều độc giả đang nhầm lẫn không thể đoán trước trong một lĩnh vực với kết quả không thể đoán trước được, đó là một sự nhầm lẫn mà tôi chưa bao giờ viết (xem lại lịch sử chỉnh sửa).

Điều quan trọng là phải hiểu rằng chủ nghĩa không xác định luôn luôn (trong bất kỳ khoa học hoặc cách sử dụng thuật ngữ nào) không có khả năng liệt kê entropy phổ quát (tức là không giới hạn). Trong khi đó, ngẫu nhiên đề cập đến việc truy cập một nguồn entropy khác (trong các chương trình entropy khác và do đó không chịu sự kiểm soát của các biến đầu vào) có thể hoặc không bị ràng buộc.

Tôi đã thêm nhận xét sau bên dưới câu trả lời phổ biến nhất hiện nay cho chủ đề khác hỏi một câu hỏi tương tự.

Tất cả các khoa học sử dụng cùng một định nghĩa của thuyết không thuyết phục thống nhất về khái niệm entropy không giới hạn. Các kết quả không thể đoán trước trong tất cả các ngành khoa học là do không thể liệt kê một tiên nghiệm tất cả các kết quả đầu ra có thể có của một thuật toán (vì nó chấp nhận các trạng thái không giới hạn, tức là lớp phức tạp NP. Chỉ định một đầu vào cụ thể để quan sát xem nó có dừng lại hay không và lưu ý rằng kết quả là idempotent là tương đương trong các ngành khoa học khác để giữ phần còn lại của entropy của vũ trụ trong khi lặp lại cùng một thay đổi trạng thái. Điện toán cho phép cách ly entropy này, trong khi khoa học tự nhiên thì không.

Thêm một số ý kiến ​​tốt nhất để thêm làm rõ quan điểm của tôi về sự khác biệt nổi bật duy nhất giữa ngẫu nhiên và không điều kiện.

Nó thực sự khá thanh lịch và dễ dàng để thấy sự khác biệt, một khi tất cả các bạn dừng việc làm rối nó bằng cách cố gắng mô tả nó từ quan điểm hoạt động thay vì từ quan điểm entropy nổi bật.

@reinierpost tất cả mọi người đang kết hợp sự khác biệt giữa ngẫu nhiên và không điều kiện. Điều này khiến bình luận của bạn bị sai sót. Thuật toán đáp ứng sự tương tác của entropy đầu vào (biến) và entropy mã nguồn (bất biến) của nó. Nondeterminism là entropy không giới hạn. Entropy bất biến thậm chí có thể không bị ràng buộc trong nội bộ, chẳng hạn như mở rộng các chữ số của π . Ngẫu nhiên là một số entropy không được ghép với đầu vào như được xác định (nghĩa là nó có thể đến từ một cuộc gọi hệ thống đến /dev/random, hoặc ngẫu nhiên mô phỏng, ví dụ NFA hoặc PRNG).

.

@Raphael định nghĩa chính thức của automa hữu hạn không xác định (NFA) là entropy hữu hạn đầu vào (dữ liệu: 5-tuple). Do đó, mọi NFA đều có thể chạy trên máy Turing xác định, tức là không yêu cầu máy Turing-hoàn thành không xác định. Do đó, NFA không nằm trong nhóm các vấn đề không xác định. Khái niệm "chủ nghĩa không xác định" trong NFA là tính xác định của nó (trong khi trình bày rõ ràng vì mọi NFA có thể được chuyển đổi thành DFA) không được mở rộng rõ ràng - không giống như tính không thuyết phục của tính toán

.

@Raphael tuyên bố "không xác định" trong NFA là thực sự ngẫu nhiên là ý nghĩa của tôi về sự phân biệt giữa tính ngẫu nhiên và chủ nghĩa không xác định. Định nghĩa của tôi là tính ngẫu nhiên là nơi một số entropy không thuộc quyền kiểm soát, kiến ​​thức (hoặc mở rộng không rõ ràng mong muốn trong trường hợp NFA) của đầu vào cho chương trình hoặc chức năng. Trong khi đó, chủ nghĩa không xác định thực sự là không có khả năng biết entropy trong mọi trường hợp, bởi vì nó không bị ràng buộc. Đây chính xác là những gì phân biệt ngẫu nhiên với chủ nghĩa không điều kiện. Vì vậy, NFA nên là một ví dụ về cái trước chứ không phải cái sau như bạn đã tuyên bố.

.

@Raphael như tôi đã giải thích, khái niệm về tính không xác định trong NFA kết hợp tính không xác định với entropy hữu hạn. Do đó, tính không xác định là một khái niệm cục bộ về việc không mở rộng tính xác định như một hình thức nén hoặc thuận tiện, do đó chúng tôi không nói rằng NFA là không xác định, thay vào đó chúng có sự xuất hiện ngẫu nhiên đối với một nhà tiên tri không muốn tính toán sự mở rộng xác định. Nhưng tất cả chỉ là ảo ảnh vì nó được mở rộng một cách xác định bcz, entropy không bị ràng buộc, tức là hữu hạn.

Từ điển là công cụ. Học cách sử dụng chúng.

tính từ ngẫu nhiên

Số liệu thống kê. hoặc đặc trưng cho một quá trình lựa chọn trong đó mỗi mục của một tập hợp có xác suất được chọn bằng nhau.

đang hoặc liên quan đến một tập hợp hoặc một phần tử của một tập hợp mà mỗi phần tử có xác suất xuất hiện như nhau

Do đó, ngẫu nhiên chỉ yêu cầu một số entropy đầu vào có thể được trang bị, do đó phù hợp với định nghĩa của tôi rằng một số entropy đầu vào không được điều khiển bởi hàm gọi của hàm. Lưu ý rằng ngẫu nhiên hóa không yêu cầu entropy đầu vào không thể xác định được khi kết thúc.

Trong khoa học máy tính, thuật toán xác định là một thuật toán, với một đầu vào cụ thể, sẽ luôn tạo ra cùng một đầu ra, với máy bên dưới luôn đi qua cùng một chuỗi trạng thái.

Chính thức, một thuật toán xác định tính toán một hàm toán học; một hàm có một giá trị duy nhất cho bất kỳ đầu vào nào trong miền của nó và thuật toán là một quá trình tạo ra giá trị cụ thể này làm đầu ra.

Các thuật toán xác định có thể được định nghĩa theo thuật ngữ của một máy trạng thái: trạng thái mô tả những gì một máy đang làm tại một thời điểm cụ thể. Máy trạng thái chuyển qua một cách riêng biệt từ trạng thái này sang trạng thái khác. Ngay sau khi chúng ta nhập dữ liệu vào, máy ở trạng thái ban đầu hoặc trạng thái bắt đầu. Nếu máy có tính xác định, điều này có nghĩa là từ thời điểm này trở đi, trạng thái hiện tại của nó sẽ xác định trạng thái tiếp theo của nó là gì; khóa học của nó thông qua tập hợp các trạng thái được xác định trước. Lưu ý rằng một máy có thể xác định và vẫn không bao giờ dừng hoặc kết thúc, và do đó không cung cấp kết quả.

Vì vậy, điều này cho chúng ta biết rằng các thuật toán xác định phải được xác định hoàn toàn bởi trạng thái đầu vào của hàm, tức là chúng ta phải có khả năng chứng minh rằng hàm sẽ chấm dứt (hoặc không chấm dứt) và không thể xác định được. Mặc dù Wikipedia cố gắng mô tả không đặc biệt, nhưng phản đề duy nhất đối với tính xác định như được định nghĩa ở trên của Wikipedia, là các thuật toán có trạng thái đầu vào (entropy) không xác định. Và cách duy nhất trạng thái đầu vào có thể không được xác định rõ ràng là khi nó không bị ràng buộc (do đó không thể được xác định trước một cách xác định). Đây chính xác là những gì phân biệt một máy Turing không đặc biệt (và nhiều chương trình trong thế giới thực được viết bằng các ngôn ngữ hoàn chỉnh Turing phổ biến như C, Java, Javascript, ML, v.v.) từ các TM xác định và ngôn ngữ lập trình như HTML, công thức bảng tính, Coq, Epigram,

Trong lý thuyết phức tạp tính toán, các thuật toán không xác định là những thuật toán, ở mọi bước có thể, có thể cho phép nhiều lần tiếp tục (hãy tưởng tượng một người đàn ông đi xuống một con đường trong rừng và mỗi khi anh ta bước xa hơn, anh ta phải chọn ngã ba đường nào mình muốn để lấy). Các thuật toán này không đi đến một giải pháp cho mọi con đường tính toán có thể; tuy nhiên, họ được đảm bảo đi đến một giải pháp chính xác cho một số con đường (ví dụ, người đàn ông đi bộ trong rừng chỉ có thể tìm thấy cabin của mình nếu anh ta chọn một số kết hợp các con đường "chính xác"). Các lựa chọn có thể được hiểu là phỏng đoán trong một quá trình tìm kiếm.

Wikipedia và những người khác cố gắng kết hợp ngẫu nhiên với chủ nghĩa không điều kiện, nhưng điểm có hai khái niệm này là gì nếu bạn không phân biệt chúng một cách hùng hồn?

Rõ ràng quyết định là về khả năng xác định. Rõ ràng ngẫu nhiên là về việc làm cho một số entropy có thể trang bị.

Bao gồm entropy ngẫu nhiên trong trạng thái của một thuật toán không cần thiết làm cho nó không thể xác định được. Ví dụ, một PRNG có thể có phân phối thống kê có thể trang bị được yêu cầu, nhưng cũng hoàn toàn mang tính quyết định.

Kết hợp các khái niệm trực giao là những gì người IQ thấp. Tôi mong đợi tốt hơn thế từ cộng đồng này!


4
Đó không phải là điều không thuyết phục trong khoa học máy tính. Các thuật toán không xác định không phải là "không thể đoán trước."
David Richerby

4
Tôi trả lời không có gì liên quan đến cách xác định tính không xác định trong tự động. lý thuyết tính toán. Shelby, bạn nên ngừng rực lửa xung quanh và lấy một cuốn sách giáo khoa. Nếu bạn không hiểu các câu trả lời khác, tôi không nghĩ chúng tôi có thể giúp bạn bình luận.
Raphael

3
@ShelbyMooreIII Bạn đã hoàn toàn hiểu sai ý nghĩa không phổ biến trong khoa học máy tính. Nó không có gì để làm với entropy. Nó không có nghĩa là những gì bạn nghĩ nó có nghĩa: đó là lý do tại sao bạn nghĩ rằng tất cả các câu trả lời khác là sai. Có lẽ cái tên đã được chọn rất tệ nhưng đó là điểm chính. Nó có một ý nghĩa đặc biệt trong khoa học máy tính, khác với ý nghĩa của nó trong các ngành khoa học khác. Bạn đang cố gắng sử dụng định nghĩa sai, và đó là lý do tại sao mọi thứ dường như hoàn toàn sai với bạn.
David Richerby

4
"Việc sử dụng thuật ngữ không thuyết phục khi nói về lý thuyết phức tạp tính toán [...] rõ ràng là tất cả về entropy" - không, không phải vậy.
Raphael

3
Chúng tôi có thể đồng ý rằng: vui lòng ngừng cố gắng "dạy" chúng tôi, điều đó không giúp được ai.
Raphael
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.