Có một thuật toán thời gian đa thức để tìm ra rằng tổng căn bậc hai nhỏ hơn một số nguyên không?


7

Đưa ra: Một danh sáchn số nguyên x1,x2,Giáo dục,xn và một số nguyên k.

Xác định:x1+x2xnk?

Câu hỏi: Có bất kỳ thuật toán thời gian đa thức cho vấn đề trên không? Nếu có, đưa ra một thuật toán; mặt khác chứng minh điều đó

Câu trả lời:


11

Trong trường hợp câu trả lời của David không rõ ràng: giả sử bạn có 10.000 số nguyên xTôivà k = 1.000.000. Bạn có thể dễ dàng thêm căn bậc hai của n số nguyên bằng các phép toán dấu phẩy động trongÔi(n). Và nếu kết quả là 999.999.537 hoặc 1.000.000.214 thì bạn đã có câu trả lời. Nếu kết quả gần 1.000.000 thì bạn có thể phân tích rất cẩn thận về các lỗi làm tròn dấu phẩy động và nếu tổng là 999.999.999999999 thì bạn có thể nhận được câu trả lời của mình. Nếu tổng quá gần với k, thì bạn có thể thực hiện số học với độ chính xác cao hơn. Vì vậy, sẽ có một hằng số c, tùy thuộc vào việc thực hiện chính xác, vì vậy bạn có thể tìm thấy câu trả lời đúng trongcn thời gian cho phần lớn các trường hợp (nếu n thực sự lớn thì sẽ mất nhiều thời gian hơn vì các con số liên quan chỉ trở nên rất lớn, nhưng sau đó thời gian sẽ dài hơn cả cuộc đời của bạn).

Vấn đề là có một số căn bậc hai có thể rất gần với k. Ví dụ: bạn có thể xác định f (x) = số lượng lựa chọn choxTôi sao cho tổng các căn bậc hai là ≤ x, thì bạn mong đợi các lựa chọn 2f '(k) * eps của xTôivì vậy tổng căn bậc hai nằm trong khoảng cách eps từ k. Bạn mong đợi một kết hợp trong đó tổng căn bậc hai nằm trong eps cách k nếu eps 1 / 2f '(k). Bạn có thể tính toán ước tính của eps này, tìm ra độ chính xác mà các tính toán của bạn sẽ cần để có câu trả lời đúng và bạn sẽ mất bao lâu để có kết quả với độ chính xác này. Điều này có thể hoặc không thể là đa thức, tùy thuộc vào mức độ nhỏ của eps.

Nhưng điều tồi tệ hơn: Điều tôi đã nói ở trên là mức độ bạn mong đợi một khoản tiền sẽ đến với k. Nhưng nó có thể gần hơn rất nhiều bởi sự trùng hợp. Sẽ rất, rất khó để chứng minh rằng nó không thể đến gần hơn nhiều. Vì vậy, đó có thể là trường hợp bạn tìm thấy câu trả lời trong thời gian tuyến tính trong hầu hết các trường hợp (> 99.9999999999%), mà bạn mong đợi tìm thấy câu trả lời trong thời gian đa thức trong mọi trường hợp (hoặc không), nhưng trong mọi trường hợp bạn không thể (dễ dàng) chứng minh điều này, và chưa ai làm như vậy

thể là bạn có thể trả lời câu hỏi mà không cần tính tổng, nhưng theo những gì David nói, không ai đã chỉ ra cách để làm điều đó trong thời gian đa thức.

Nếu bất cứ ai đã thực hiện một phép tính gần như thế nào, chúng tôi hy vọng tổng số căn bậc hai sẽ đến gần với bất kỳ số nguyên nào, tôi rất vui được biết. BTW. Tôi nghĩ rằng tổng căn bậc hai của số nguyên chỉ bằng một số nguyên nếu tất cả các căn bậc hai là số nguyên, do đó dễ dàng bị loại trừ.

Tái bút Ước tính sơ bộ: Giả sử chúng ta thêm 10.000 căn số nguyên, mỗi số nhỏ hơn 1.000.000. Đó là căn bậc hai của1012 số nguyên và vì thứ tự của chúng không liên quan, nên có khoảng (1012)10,000/10,000!số tiền. Đó là nhiều hơn1080,000số tiền. Vì vậy, chúng tôi hy vọng một trong những khoản tiền này sẽ nằm trong10-80,000 khoảng cách đến một số nguyên, yêu cầu tính toán với độ chính xác hơn 80.000 chữ số.

Tái bút Cho các số nguyên a, b, c, d, k và sử dụng số học chính xác kép của IEEE 754, trường hợp đầu tiên trong đó sqrt (a) + sqrt (b) + sqrt (c) + sqrt (d) <k cho kết quả khác với toán học đúng là a, b, c, d = 4640, 5394, 3001, 3322 và k = 254. Trong trường hợp này, tổng được tính chính xác là 254, khi kết quả toán học nhỏ hơn 254. Rõ ràng là khi kết quả dấu phẩy động bằng số nguyên, chúng ta không thể biết nó được làm tròn lên hay xuống, vì vậy trong trường hợp này kết quả không bao giờ được tin cậy.

Với a, b, c, d = 6222, 8801, 14431, 8132 và k = 383, tổng tính toán lớn hơn k, trong khi kết quả toán học ít hơn. Thứ tự của các số không quan trọng ngoại trừ 14431 phải là số thứ ba.

Nếu chúng ta thay đổi thứ tự các thao tác bằng cách thêm (sqrt (a) + sqrt (b)) + (sqrt (c) + sqrt (d)) (lưu ý các dấu ngoặc đơn được thêm vào), điều này sẽ thay đổi các lỗi làm tròn và có xu hướng giảm chúng , sau đó a, b, c, d = 12558, 407, 16501, 18308 và k = 396 là trường hợp đầu tiên trong đó tổng tính toán lớn hơn k, trong khi kết quả toán học ít hơn.


19

Sự phức tạp của bài toán tổng căn bậc hai là một câu hỏi mở từ lâu . Điều vấp ngã là, mặc dù chúng ta biết cách tính căn bậc hai một cách hiệu quả, chúng ta không biết liệu có thể xác định được hay khôngΣTôixTôik bằng cách đánh giá chỉ một số bit đa thức của mỗi căn bậc hai.

Vấn đề cụ thể với thuật toán bạn đề xuất trong câu hỏi là cụm từ "tính căn bậc hai của mỗi giá trị" không được xác định rõ. Bất kỳ căn bậc hai không hợp lý (ví dụ,2) yêu cầu tính toán số lượng bit vô hạn, vì vậy bạn cần nêu chính xác bạn đang sử dụng.


Có một nhà lý thuyết số thích hợp đã xem xét nghiêm túc vấn đề này? (Tôi đoán là người ta có.) Có một dòng nghiên cứu lâu đời trong cái được gọi là xấp xỉ Diophantine, chứng minh kết quả nói rằng | x - (p / q) | > f (q) cho một hàm cụ thể f và bất kỳ số không hợp lý, số đại số x và bất kỳ số hữu tỷ p / q nào, với kết quả mạnh hơn nếu bạn biết mức độ của đa thức mà x là gốc của. Việc mở rộng phần tiếp tục của số (dễ dàng cho căn bậc hai) thường rất quan trọng. (NB: Tôi không phải là nhà lý thuyết số.)
Alexander Woo

@AlexanderWoo Đó là một vấn đề mở đáng kể trong cái mà người ta có thể gọi là lý thuyết số tính toán. Sẽ là đáng kinh ngạc nếu những người gần đúng Diophantine đã không nhìn vào điều này.
David Richerby

Trang web này cs.smith.edu/~jorourke/TOPP/P33.html có nhiều thông tin về một vấn đề liên quan: Liệu một tổng của căn bậc hai lớn hơn hay lớn hơn một số khác. Nó có kết quả cho giới hạn trên và dưới về sự khác biệt nhỏ nhất giữa các tổng của căn bậc hai.
gnasher729
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.