Câu trả lời:
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 và 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. 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 trong 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 cho 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 vì 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
Có 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ủa số nguyên và vì thứ tự của chúng không liên quan, nên có khoảng số tiền. Đó là nhiều hơnsố 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 trong 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.
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 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ụ,) 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.