Tại sao sử dụng ngôn ngữ trong lý thuyết phức tạp


10

Tôi mới bắt đầu đi vào lý thuyết tính toán, nghiên cứu những gì có thể tính toán, nhanh như thế nào, sử dụng bao nhiêu bộ nhớ và với mô hình tính toán nào.

Tôi có một câu hỏi khá cơ bản, nhưng tôi thực sự hy vọng một số bạn có thể giúp tôi hiểu khái niệm đằng sau nó:

Tại sao mọi thứ tập trung xung quanh khái niệm và định nghĩa của NGÔN NGỮ (tức là ngôn ngữ thông thường và ngôn ngữ không ngữ cảnh)? Và làm thế nào để những điều này liên quan và mô tả sự phức tạp của một thuật toán và các mô hình tính toán có thể để giải quyết chúng?

Tôi đọc những loại câu hỏi liên quan:

nhưng vẫn không có câu trả lời cho những nghi ngờ của tôi, vì họ đưa ra một lời biện minh thực tế về lý do tại sao chúng quan trọng (mà tôi hiểu) nhưng không giúp tôi hiểu tại sao lý thuyết phức tạp dựa trên chúng.


1
Điều này không được bao phủ bởi các câu hỏi tham khảo của chúng tôi ?
Raphael

@Raphael - Cảm ơn bạn đã chỉ cho tôi câu hỏi đó, đây là một tài liệu tham khảo tuyệt vời! Tôi đang đọc qua nó ngay bây giờ, nhưng hiện tại tôi tin rằng đây có thể là phần phụ lục cho câu hỏi cs.stackexchange.com/questions/13669/ Lỗi . Dường như với tôi rằng nó đã được trả lời rồi, xin vui lòng cho tôi biết nếu bạn gầy đi
Matteo

3
Một ngôn ngữ chỉ là một tập hợp các chuỗi có độ dài hữu hạn, giống như một hàm ánh xạ các chuỗi hữu hạn thành 1 hoặc 0. Vì vậy, bạn thực sự đang hỏi "tại sao có quá nhiều lý thuyết phức tạp về các vấn đề quyết định" và câu trả lời là loại nhiệm vụ tính toán đơn giản nhất (không cần thiết) và thường là các nhiệm vụ tính toán phức tạp hơn có thể được giảm xuống thành các vấn đề quyết định.
Sasho Nikolov

Câu trả lời:


10

Đó là bởi vì ngôn ngữ là cách tốt nhất (duy nhất?) Mà chúng ta có để chính thức hóa khái niệm "vấn đề".

Một thuật toán (Turing Machine) có hiệu suất, mà chúng tôi thể hiện thông qua độ phức tạp big-O. Một vấn đề (ngôn ngữ) thuộc về một lớp phức tạp. Chúng thường được xác định bởi sự tồn tại: nếu tồn tại một máy chấp nhận ngôn ngữ chạy trong hiệu suất nhất định (không gian hoặc thời gian), thì ngôn ngữ thuộc về lớp phức tạp tương ứng.L

Có một vài lý do cho việc này. Đầu tiên là ngôn ngữ là nền tảng độc lập. Bạn không lo lắng về việc một số nguyên là 32 hay 64 bit hay liệu các hoạt động của dấu phẩy động có chạy song song với các hoạt động khác hay không. Những điều này giúp tăng tốc hiệu suất ở cấp độ vi mô, nhưng phân tích phức tạp quan tâm đến cấp độ vĩ mô. Khi bạn chia tỷ lệ từ 100 đến đến đến , hiệu suất thuật toán thay đổi như thế nào? Liệu nó đi từ việc sử dụng 1 triệu tế bào băng đến 1 tỷ, hay từ 1 triệu đến nhiều tế bào hơn so với các nguyên tử trong vũ trụ?1061091012

Thứ hai là các ngôn ngữ chỉ là một sự trừu tượng hóa tốt đẹp cho dữ liệu. Bạn cần một cái gì đó bạn có thể làm bằng chứng về, một cái gì đó bạn có thể mô hình chính thức. Mã hóa đầu vào và đầu ra của bạn dưới dạng một chuỗi có nghĩa là bây giờ bạn đang xử lý không phải các bit trong bộ nhớ, mà với các đối tượng toán học với các thuộc tính cụ thể. Bạn có thể suy luận về chúng và chứng minh bằng chứng về chúng theo nghĩa chính thức và rất đơn giản.

Lý thuyết phức tạp có xu hướng tập trung vào các vấn đề quyết định vì cuối cùng chúng trở nên khó khăn. Khi phiên bản quyết định của nhân viên bán hàng du lịch là NP-đầy đủ (nghĩa là có một chuyến tham quan ngắn hơn chiều dài ), thì rõ ràng việc tìm ra con đường ngắn nhất là khó khăn hơn. Không có nhiều sự tập trung vào các vấn đề chức năng / tối ưu hóa bởi vì vẫn còn rất nhiều câu hỏi mở và các vấn đề chưa được giải quyết về các vấn đề quyết định đơn giản hơn.k

Tôi đoán đây là thách thức của tôi với bạn: tìm cách mô tả toán học các vấn đề không phải là ngôn ngữ. Tôi không biết ngôn ngữ có đặc biệt không, nhưng tôi nghĩ chúng là công cụ đơn giản nhất chúng tôi có, là ngôn ngữ dễ xử lý nhất.


7
Ngôn ngữ chắc chắn không phải là cách duy nhất để hình thành vấn đề. Ví dụ: bạn có thể chính thức hóa một số thứ như số màu như một hàm từ biểu đồ đến số tự nhiên. Và trên thực tế, có khá nhiều công việc về các vấn đề về chức năng và tối ưu hóa.
David Richerby

2
Đúng, nhưng làm thế nào bạn sẽ đối phó với sự phức tạp của việc tính toán số màu mà không có khái niệm về ngôn ngữ hoặc máy móc?
jmite

1
Cảm ơn câu trả lời của bạn, tôi nhận được quan điểm của bạn. Tuy nhiên tôi vẫn có 2 câu hỏi: 1) sẽ không thực tế là chúng ta đang sử dụng ngôn ngữ có ảnh hưởng đến kết quả về mức độ phức tạp hoặc tính quyết định của một vấn đề không? tức là một vấn đề có thể giải quyết được trong số học dấu phẩy động nhưng không phải là số học số nguyên (tức là lập trình số nguyên)? 2) Làm thế nào để chúng tôi thực hiện ánh xạ này từ bất kỳ loại dữ liệu nào sang một ngôn ngữ duy nhất mô tả tất cả chúng (vì chúng tôi muốn đánh giá mức độ phức tạp của một vấn đề và trừu tượng từ đầu vào cụ thể)? Cảm ơn một lần nữa!
Matteo

3
@jmite Bạn cần một cái máy, vâng, nhưng không nhất thiết phải là ngôn ngữ.
Raphael

2
@Raphael nhiều lớp phức tạp thường được xác định theo thời gian chạy của máy có thể được đặc trưng theo độ phức tạp mô tả.
Sasho Nikolov

7

Có hai câu trả lời cơ bản cho câu hỏi của bạn:

  1. Có nhiều lý thuyết phức tạp hơn các ngôn ngữ, ví dụ như các lớp chức năng, độ phức tạp số học và các thuật toán con của các thuật toán gần đúng và tính không tương thích.

  2. Lý do lịch sử: một trong những bài viết cơ bản trong lý thuyết tính toán là thảo luận về Entscheidungspro Hiệu của Hilbert (một dạng của vấn đề tạm dừng).

Thật không may, tôi không biết nhiều về cái sau, nhưng hãy để tôi mở rộng cái trước.

Sự phức tạp ngoài ngôn ngữ

Mỗi lớp phức tạp tính toán đi kèm với một lớp chức năng liên quan . Ví dụ, lớp P của tất cả các vấn đề có thể quyết định trong thời gian đa thức được liên kết với FP, lớp của tất cả các hàm tính toán trong thời gian đa thức. FP là quan trọng vì nó được sử dụng để xác định NP-khó: một ngôn ngữ là NP-hard nếu cho mọi ngôn ngữ trong NP có một chức năng trong FP mà iff . Một lớp hàm phức tạp khác, #P , có liên quan đến cái gọi là hệ thống phân cấp đa thức thông qua định lý Toda .M f M x M f M ( x ) LLMfMxMfM(x)L

Độ phức tạp mạch số học (hay lý thuyết phức tạp đại số ) liên quan đến sự phức tạp của việc tính toán các đa thức khác nhau. Các lớp phức tạp quan trọng ở đây là VP và VNP, và lý thuyết phức tạp hình học là một dự án quan trọng cố gắng tách VP và VNP (và sau này là P và NP) bằng cách sử dụng lý thuyết đại diện và hình học đại số.

Một ví dụ quan trọng khác về độ phức tạp đại số là phép nhân ma trận nhanh. Ở đây câu hỏi cơ bản là làm thế nào nhanh chóng chúng ta có thể nhân hai ma trận ? Các câu hỏi tương tự hỏi chúng ta có thể nhân các số nguyên nhanh như thế nào, chúng ta có thể kiểm tra các số nguyên nhanh như thế nào (đây là một vấn đề quyết định!) Và chúng ta có thể tính các số nguyên nhanh như thế nào.

Tối ưu hóa lồi giải quyết các vấn đề tối ưu hóa có thể được giải quyết (hoặc gần như giải quyết) một cách hiệu quả. Ví dụ là lập trình tuyến tính và lập trình semidefinite, cả hai đều có thuật toán hiệu quả. Ở đây chúng tôi quan tâm cả về tối ưu và trong chính giải pháp tối ưu. Vì thường có nhiều hơn một giải pháp tối ưu, tính toán một giải pháp tối ưu không được thể hiện tốt như một vấn đề quyết định.

Tính gần đúng là lĩnh vực nghiên cứu mức độ gần đúng mà chúng ta có thể nhận được cho một vấn đề tối ưu hóa trong thời gian đa thức. Ví dụ, hãy xem xét vấn đề cổ điển của Set Cover: đưa ra một tập hợp các tập hợp, chúng ta cần bao nhiêu trong số chúng để bao quát toàn bộ vũ trụ? Tìm số tối ưu là NP-hard, nhưng có lẽ tính được xấp xỉ? Thuật toán xấp xỉ là tiểu vùng nghiên cứu các thuật toán để tính toán xấp xỉ, trong khi inapproximability nghiên cứu giới hạn của thuật toán xấp xỉ. Trong trường hợp cụ thể của Set Cover, chúng tôi có một thuật toán đưa ra xấp xỉ (thuật toán tham lam) và NP-khó có thể làm tốt hơn nữa.lnn


3

Hãy xem xét câu hỏi này từ góc độ của lý thuyết thể loại. Các vấn đề quyết định (hoặc ngôn ngữ) sau đó sẽ tương ứng với các đối tượng của một loại và mức giảm được phép giữa hai vấn đề sẽ tương ứng với các hình thái (mũi tên) của một loại.

Nói về các ngôn ngữ có lợi thế là sự tương đương của các ngôn ngữ được xác định rõ (cụ thể là bằng sự mở rộng). Hai vấn đề không liên quan có thể dẫn đến cùng một ngôn ngữ, và sau đó chúng tôi được phép coi chúng là tương đương. Thay vào đó, nếu chúng ta muốn nói về các vấn đề đẳng cấu, chúng ta sẽ phải xác định các hình thái được phép giữa hai vấn đề. Nhưng các hình thái được phép phụ thuộc vào lớp phức tạp thực tế đang được xem xét, điều này làm cho cách tiếp cận này không phù hợp để so sánh các lớp phức tạp khác nhau.

Khái niệm các vấn đề đẳng cấu thường sẽ thô hơn khái niệm các ngôn ngữ tương đương, tức là hai vấn đề có thể là đẳng cấu, ngay cả khi các ngôn ngữ liên quan của chúng không tương đương. Điều tồi tệ hơn là thường có các khái niệm hợp lý khác nhau cho các hình thái được phép, chỉ đồng ý với các đẳng cấu được phép. Tập trung vào các ngôn ngữ cho phép trì hoãn các vấn đề như vậy cho đến khi chúng tôi cảm thấy muốn nói về một số khái niệm hợp lý khác nhau về giảm (như giảm Karp so với giảm Cook).


Điều này dường như không trả lời câu hỏi. Người ta vẫn có thể nói về hình thái giữa các vấn đề cho dù người ta sử dụng làm đối tượng trong danh mục tương ứng.
David Richerby

@DavidR Richby Điểm tôi muốn đưa ra là việc đóng đinh các hình thái phù hợp sẽ khó khăn hơn so với việc đóng đinh các đối tượng thích hợp (= ngôn ngữ). (Đặc biệt vì thông thường có nhiều hơn một khái niệm thích hợp về hình thái.) Không có hình thái, bạn không thể nói về các vấn đề đẳng cấu (hoặc thuật toán). Tuy nhiên, ngôn ngữ cung cấp cho bạn một cách để vẫn nói về sự tương đương của các vấn đề. Có lẽ tôi đã không giải thích điều này một cách đúng đắn, nhưng (đối với tôi) đây là một lý do chính đáng cho việc "sử dụng ngôn ngữ trong lý thuyết phức tạp".
Thomas Klimpel
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.