Cardinality của bộ thuật toán


15

Một người nào đó trong một cuộc thảo luận đã đưa ra rằng (ông cho rằng) có thể có ít nhất một số chiến lược liên tục để tiếp cận một vấn đề cụ thể. Vấn đề cụ thể là chiến lược giao dịch (không phải thuật toán mà là chiến lược) nhưng tôi nghĩ đó là vấn đề bên cạnh câu hỏi của tôi.

Điều này khiến tôi suy nghĩ về tính chính xác của bộ thuật toán. Tôi đã tìm kiếm xung quanh một chút nhưng không tìm thấy gì. Tôi đã nghĩ rằng, vì các máy turing hoạt động với một bộ bảng chữ cái hữu hạn và băng phải được lập chỉ mục nên có thể đếm được, nên không thể có số lượng thuật toán không thể đếm được. Lý thuyết tập hợp của tôi được thừa nhận là rỉ sét vì vậy tôi không chắc chắn lý do của mình là hợp lệ và có lẽ tôi sẽ không thể chứng minh điều đó, nhưng đó là một suy nghĩ thú vị.

Cardinality của bộ thuật toán là gì?


1
Như Yuval Filmus đã đề cập, có vô số máy Turing. Nhưng có liên tục nhiều họ không đồng nhất của các mạch boolean, vì chúng có thể tính toán bất kỳ hàm có giá trị boolean nào. Nhưng đó có lẽ không phải là những gì bạn có nghĩa là "thuật toán".
Phục hồi Monica

Câu trả lời:


28

Một thuật toán được mô tả không chính thức như một chuỗi hữu hạn các hướng dẫn bằng văn bản để hoàn thành một số nhiệm vụ. Chính thức hơn, chúng được xác định là máy Turing, mặc dù bạn cũng có thể mô tả chúng như các chương trình máy tính.

Hình thức chính xác mà bạn sử dụng không quan trọng lắm nhưng điểm cơ bản là mỗi thuật toán có thể được viết thành một chuỗi ký tự hữu hạn, trong đó các ký tự được chọn từ một số tập hữu hạn, ví dụ: chữ cái La Mã, ASCII hoặc số 0 và số. Để đơn giản, hãy giả sử số không và số không. Bất kỳ chuỗi số 0 và số nào chỉ là một số tự nhiên được viết bằng nhị phân. Điều đó có nghĩa là có nhiều nhất là vô số các thuật toán, vì mọi thuật toán có thể được biểu diễn dưới dạng số tự nhiên.

Đối với tín dụng đầy đủ, bạn nên lo lắng rằng một số số tự nhiên có thể không mã hóa các chương trình hợp lệ, do đó có thể có ít thuật toán hơn số tự nhiên. (Đối với tín dụng tiền thưởng, bạn có thể cũng sẽ tự hỏi nếu nó có thể là hai số tự nhiên khác nhau đại diện cho các thuật toán tương tự.) Tuy nhiên, print 1, print 2, print 3và như vậy là tất cả các thuật toán và tất cả khác nhau, do có ít nhất đếm được vô cùng nhiều các thuật toán.

Vì vậy, chúng tôi kết luận rằng tập hợp các thuật toán là vô hạn.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Gilles 'SO- ngừng trở nên xấu xa'

10

Tập hợp các thuật toán là vô hạn. Điều này là do mỗi thuật toán có một mô tả hữu hạn, nói như một máy Turing.

Thực tế là một thuật toán có mô tả hữu hạn cho phép chúng ta nhập một thuật toán này sang thuật toán khác và đây là cơ sở của lý thuyết tính toán. Nó cho phép chúng ta xây dựng vấn đề tạm dừng, ví dụ.


7

ít nhất là liên tục các chiến lược để tiếp cận một vấn đề cụ thể

"Continuum" có lẽ được cho là có nghĩa là những con số thực ... sử dụng "ít nhất" cùng với từ đó là vô lý trên đầu trang. Nói một cách khó hiểu: vô hạn là khá lớn, nhưng vô hạn vô hạn là ... lớn hơn lớn. Cực kỳ nhiều như vậy. Vô duyên.

Vì vậy, hãy ném nó ra khỏi cửa sổ. Để xem loại vô cực mà chúng ta đang xử lý là đơn giản (và trực quan, ngay cả khi bạn của bạn chưa bao giờ nghe về bất kỳ khoa học máy tính lý thuyết nào):

  • Bất kỳ thuật toán nào cũng có thể được thực hiện với bất kỳ ngôn ngữ hoàn chỉnh nào; chọn chất độc yêu thích của bạn trong các ngôn ngữ trong thế giới thực (Java, C, ...) để giải thích điều này một chút. Tất cả những thứ này tương đương với bộ thuật toán lý thuyết mà bất cứ ai cũng có thể nghĩ ra. Lưu ý rằng mọi thuật toán tự nó là hữu hạn, nghĩa là, không có thuật toán nào sẽ mất vô số ký hiệu để viết ra.
  • Đừng nghĩ về những máy Turing phức tạp. Ngôn ngữ bạn chọn sử dụng các tệp đơn giản để lưu trữ mã nguồn của nó. Mỗi tệp là một tập hợp các số nhỏ (hay còn gọi là byte). Điều quan trọng là những con số này chắc chắn là số nguyên, không liên tục. (Nếu bạn là người theo chủ nghĩa thuần túy và muốn ở trong chế độ lý thuyết, hãy thay thế từ "byte" bằng "biểu tượng", nó không thay đổi bất cứ điều gì.) Nếu bạn sợ về các chương trình lớn được phân phối trên nhiều tệp (và thư viện và các nội dung khác), sau đó chỉ cần nén chúng vào một tệp lưu trữ nén (nghĩa là một tệp duy nhất).
  • Bây giờ, bạn có thể chỉ định một số nguyên duy nhất cho mỗi tệp ngoài đó, theo tính toán. Chúng ta chỉ đơn giản viết toàn bộ các bit / byte của tệp lần lượt và kết thúc với một số rất lớn được biểu thị dưới dạng nhị phân. Trong quá khứ xa xôi, mọi người thực sự đã làm điều đó: họ đã in các chương trình nhị phân được biên dịch thành danh sách dài các số hex trên tạp chí; bạn sẽ nhập chúng vào, nhưng không bao giờ xem chúng là bất cứ thứ gì ngoài số (thường được nhóm một cách thuận tiện trong các bộ 8- hoặc 16 chữ số để giúp việc nhập dễ dàng hơn).
  • Vì vậy: mọi chương trình có thể được biểu diễn bằng một số nguyên, mặc dù số lớn tùy ý. Một cách khác cũng làm việc theo vòng - mọi số nguyên có thể được chuyển ngay lập tức và tầm thường vào một tệp và ném vào trình biên dịch (rõ ràng, chỉ một phần nhỏ trong số đó sẽ là các chương trình hợp lệ, nhưng điều đó không quan trọng với chúng tôi bây giờ).
  • Cuối cùng, các chương trình, và do đó là các thuật toán, là một tập hợp con của các số nguyên; do đó, chỉ có rất nhiều có thể tồn tại.
  • NB, thực tế là có nhiều triển khai khác nhau của một thuật toán có lợi cho chúng tôi, nghĩa là, nhiều số nguyên đó ngưng tụ thành (các cách biểu diễn khác nhau) của cùng một thuật toán. Vì vậy, nếu vô cùng có thể đếm được chưa phải là loại vô cực nhỏ nhất, chúng ta sẽ phải lo lắng về số lượng thuật toán thậm chí còn nhỏ hơn, nhưng chắc chắn không lớn hơn (tức là không thể đếm được).

Vấn đề cụ thể là chiến lược giao dịch (không phải thuật toán mà là chiến lược)

Tôi không biết bạn của bạn có ý nghĩa gì với "chiến lược"; Tôi giả sử anh ta có nghĩa là một cái gì đó giống như một thuật toán, nhưng không hoàn toàn được xây dựng đủ chi tiết để hack nó vào máy tính? Hoặc bằng cách nào đó phụ thuộc vào "trực giác" của con người trong khi thực hiện? Nếu vậy, đây chỉ là những chi tiết không liên quan. Nhân loại chưa tìm thấy bất kỳ loại mô tả nào về các quá trình mạnh hơn hoặc lớn hơn "thuật toán" theo nghĩa mà chúng ta sử dụng trong CS.


3
Re: "'Continuum" có lẽ được cho là có nghĩa là những con số thực ... sử dụng "ít nhất" cùng với từ đó là vô lý trên đầu trang ": Không có gì" trên đầu "về nó, chứ đừng nói là" vô lý " . Có nhiều bộ số thực hơn số thực, do đó, việc nói về các bộ lớn hơn liên tục là điều khá bình thường.
ruakh

6

Xem phần đánh số của Godel , một thực tế cơ bản trong khoa học máy tính là các thuật toán có thể đếm được, cũng như các phần mở rộng được liệt kê đệ quy.

Các thuật toán có thể đếm được, thật dễ dàng để chỉ ra rằng không tồn tại một thuật toán để xác minh mọi bộ trong một hệ thống chính thức (gán giá trị thật cho một vấn đề). Điều này sẽ tương đương với việc gán một thuật toán cho mọi hàm ánh xạ tập hợp các vấn đề thành các giá trị boolean. Tuy nhiên, tập hợp các hàm này là không thể đếm được (tầm thường của cùng một số lượng với tập hợp sức mạnh của tập hợp các vấn đề, do đó không thể đếm được).

Tôi hy vọng điều này mang lại một số trực giác về lý do tại sao các thuật toán phải "kém mạnh mẽ" hơn bất kỳ chức năng nào, do đó có thể đếm được (hãy bỏ qua giả thuyết liên tục ở đây).


2

Nếu một người không bắt đầu với yêu cầu rằng một chiến lược cần phải được thực hiện bằng thuật toán và bỏ qua các hiệu ứng phân biệt trong cuộc sống thực, ví dụ, người ta có thể chấp nhận như sau là một chiến lược giao dịch được tham số hóa:

mộtbmộtb

mộtb


0

Nếu chúng ta quan niệm các thuật toán là các chương trình máy tính được viết bằng nhị phân *, thì số lượng thuật toán là số lượng số nhị phân (số nguyên). Do đó, cardinality của các thuật toán là cardinality của các số nguyên.

* Một bằng chứng cho thấy máy turing có thể chạy tất cả các thuật toán và máy tính có thể chạy bất kỳ máy turing chương trình nào, sẽ khiến câu trả lời này dài một cách không cần thiết. Cái trước có thể phụ thuộc vào định nghĩa của thuật toán, nhưng tôi không nghĩ bạn đang sử dụng các chiến lược giao dịch không thể tính toán được.


1
Điều này thêm gì vào câu trả lời hiện có?
David Richerby

"Một bằng chứng cho thấy máy turing có thể chạy tất cả các thuật toán ... sẽ khiến câu trả lời này dài một cách không cần thiết". Nó sẽ làm cho câu trả lời là không thể, vì bạn không thể thực sự chứng minh Luận án Giáo hội
John Coleman

@DavidR Richby Nó thêm ngắn gọn.
dùng558317

1
@JohnColeman Khẳng định sự bất khả thi của một bằng chứng, mà không có bằng chứng? Ý tôi là a) OP có lẽ sẽ không quan tâm, vì b) đó là vấn đề định nghĩa. Câu hỏi dường như chứa đựng giả định: "vì các máy turing hoạt động với một bộ bảng chữ cái hữu hạn và băng phải được lập chỉ mục nên có thể đếm được, nên không thể có số lượng thuật toán không thể đếm được."
dùng558317

0

Các câu trả lời khác đã giải thích rằng trong mô hình tính toán tiêu chuẩn (máy Turing, phép tính lambda, v.v.), bộ thuật toán là vô hạn.

Tuy nhiên, có những mô hình lý thuyết khác về tính toán trong đó tập hợp các thuật toán là vô hạn. Ví dụ, các máy Smum BlubTHER Shubout Smale có một tập lệnh vô hạn vô hạn tập 1 , do đó, bộ thuật toán của chúng cũng vô hạn vô hạn.


1 Nói chính xác, bản thân tập lệnh là hữu hạn, nhưng nó được tham số hóa bằng cách sử dụng một tập hợp vô hạn vô hạn (các hàm hữu tỷ).


Các chức năng hợp lý không thể đếm được?
Ben Millwood

@BenMillwood Bạn có thể phác thảo ngắn gọn một bằng chứng về lý do tại sao điều này có thể là trường hợp?
Đánh dấu C

x0Rf:xx0

Ồ, tôi đã cho rằng các hằng số cũng phải hợp lý. Đừng bận tâm.
Ben Millwood

-1

kể từ khi máy turing hoạt động với một bộ chữ cái hữu hạn và băng phải được lập chỉ mục, do đó có thể đếm được

Với một kích thước cụ thể, có rất nhiều máy Turing và có rất nhiều kích cỡ. Một bộ số đếm được, miễn là hữu hạn, có thể đếm được. Kích thước của bảng chữ cái là một yếu tố trong số lượng máy Turing, nhưng kích thước của băng không. Nếu bảng chữ cái được phép có nhiều ký tự, thì sẽ có vô số máy (mỗi số thực có thể được mã hóa thành một chuỗi các ký hiệu).

.5.5


n

Và điều gì có nghĩa là có vô số thuật toán, dù sao? Bạn chỉ có thể viết ra vô số. Theo nghĩa nào đó là một cái gì đó mà bạn không thể viết ra một thuật toán?
David Richerby

@DavidR Richby Vâng, tôi có một vài thứ lẫn lộn. Nhưng người ta có thể sử dụng "thuật toán" theo nghĩa chung để chỉ một chuỗi các lựa chọn. Và theo nghĩa đó, việc chọn một chữ số dựa trên đầu vào là một "thuật toán", mặc dù không phải là một tính toán.
Tích lũy

Trong khoa học máy tính, "thuật toán" và "tính toán" là cùng một thứ. Một thuật toán là một máy Turing.
David Richerby
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.