Làm thế nào là lập trình một thuật toán lượng tử khác nhau? Ngôn ngữ C giống như thế nào nếu nó được thiết kế cho các qubit? Các loại sẽ thay đổi?
Làm thế nào là lập trình một thuật toán lượng tử khác nhau? Ngôn ngữ C giống như thế nào nếu nó được thiết kế cho các qubit? Các loại sẽ thay đổi?
Câu trả lời:
Khi tôi xem xét điều này một thời gian trước đây, rõ ràng các thuật toán lượng tử, trong khi không đặc biệt nhanh, cho phép sự song song lớn theo cấp số nhân. Vì vậy, chúng sẽ tỏa sáng trong các trường hợp liên quan đến tìm kiếm trong các không gian không thực tế với phần cứng tuần tự, thậm chí phần cứng tuần tự song song ồ ạt.
Một tính chất của thuật toán lượng tử là chúng phải có thể đảo ngược . Bất kỳ thuật toán đã cho nào cũng có thể được dịch thành một thuật toán có thể đảo ngược, bằng cách thêm vào nó đủ khả năng lưu giữ hồ sơ để cho phép nó chạy ngược.
Một tính chất khác là việc nhận được câu trả lời từ thuật toán lượng tử là một vấn đề dễ xảy ra, bởi vì những gì bạn nhận được khi kết thúc tính toán là nhiều câu trả lời, mỗi câu có xác suất riêng. Nó cần phải được chạy theo cách mà câu trả lời bạn muốn có xác suất cao. Điều này có thể liên quan đến việc chạy thuật toán tiến và lùi nhiều lần.
Kiểm tra thuật toán tìm kiếm của Grover .
XÁC NHẬN để hiển thị hoạt động cơ bản của thuật toán Grover. Giả sử có một vấn đề tìm kiếm. Các câu trả lời có thể là 0, 1, 2 và 3, nhưng câu trả lời đúng là 2. Vì vậy, máy tính lượng tử được đặt trong trạng thái chồng chất của cả bốn trạng thái và nó trải qua một chuỗi các bước để xem cái nào đúng và đảo ngược biên độ của nó, như các chấm đen và mũi tên bên dưới:
Bạn có thể thấy rằng mũi tên 2 đã được đảo ngược bên trong máy, nhưng không có cách nào để nói rằng bên ngoài, bởi vì chỉ có xác suất được nhìn thấy bên ngoài, đó là biên độ bình phương , và khi bình phương chúng đều bằng nhau.
Tuy nhiên, biên độ có một giá trị trung bình, được biểu thị bằng đường màu đỏ và máy tính có thể được thực hiện để trải qua một chuỗi các bước đảo ngược từng biên độ về giá trị trung bình . Khi điều đó được thực hiện, biên độ và xác suất, chuyển sang trạng thái 2, câu trả lời đúng ! Vì vậy, nếu máy được quan sát, trạng thái 2 tỏa sáng.
Nó không hoàn toàn đơn giản. Nói chung, phải mất nhiều chu kỳ của máy, tiến và lùi, đảo ngược vào cuối mỗi chu kỳ, để tối đa hóa xác suất của câu trả lời đúng. Ngoài ra, người ta phải lưu ý không làm điều đó nhiều hơn số lần đó, bởi vì nó có thể dễ dàng đảo ngược chính nó.
Vậy tại sao họ nói máy tính lượng tử quá nhanh ? Bởi vì mỗi khi bạn nhân đôi số lượng qubit, bạn bình phương song song, nhưng bạn không bình phương thời gian, vì vậy cuối cùng nó sẽ thắng.
Điều đó có vui không?
Cá nhân tôi quan tâm đến việc làm thế nào điều này có thể được áp dụng để xác minh tính chính xác của phần mềm. Bây giờ chúng tôi kiểm tra phần mềm bằng cách ném một loạt các đầu vào kiểm tra vào nó và (đơn giản là quá đơn giản) xem liệu nó có trúng Assert không. Trong một máy tính lượng tử, có thể chạy song song với một bộ đầu vào dày đặc hơn nhiều và xem liệu có bất kỳ trường hợp nào trong số đó xảy ra với Assert không.
Giống như nếu đầu vào của thuật toán là 128 byte hoặc 1024 bit, có 2 ^ 1024 hoặc 10 ^ 308 đầu vào khác nhau có thể. Không có cách nào để kiểm tra nhiều đầu vào trên một máy tính thông thường, nhưng một máy tính lượng tử có thể thử song song tất cả chúng.
Ngôn ngữ C giống như thế nào nếu nó được thiết kế cho các qubit? Các loại sẽ thay đổi?
Nó sẽ khác biệt đến mức không thể hiểu được như C.
Vấn đề chính (theo tôi hiểu) là điện toán lượng tử không hoạt động theo cách bắt buộc tốt đẹp 'làm điều này, sau đó, sau đó là điều khác'. Cố gắng buộc khả năng của C thực hiện điều đó vào 'bộ xử lý' của máy tính lượng tử sẽ là không thể, không hiệu quả.
Các thuật toán lập trình cho máy tính lượng tử (một lần nữa, như tôi hiểu chúng) có xu hướng gần với bản đồ / giảm kiểu lập trình chức năng hơn, vì điện toán lượng tử cho phép tất cả các ứng cử viên trong phần 'giảm' tồn tại đồng thời và "rơi ra" khỏi máy tính khi quan sát.
Lưu ý rằng có một số thuật toán hiện có cho máy tính lượng tử, mặc dù các thiết bị không tồn tại để chạy chúng. Thuật toán của Simon chẳng hạn.
Để sử dụng máy tính lượng tử hiệu quả nhất có thể, người ta cần có khả năng xử lý các đầu vào và đầu ra là trạng thái của một thanh ghi lượng tử, mà thực sự không có tương tự cổ điển. Phát biểu từ một số năm kinh nghiệm trong lĩnh vực thông tin lượng tử, tôi phải cảnh báo bạn rằng không ai thực sự có trực giác tốt cho điều này ngoài toán học trừu tượng của đại số C *, và tôi đã nói rằng ngay cả trực giác này cũng không đủ nếu bạn bắt đầu tự hỏi về lý thuyết tương đối.
Lớp các vấn đề có thể giải quyết hiệu quả trên máy tính lượng tử được gọi là BQP, cho Byned Quantum Polynomial. Đây là phiên bản lượng tử của BPP và bạn có thể tìm thêm thông tin trong bài viết này: http://www.scottaaronson.com/ con / bqpph.pdf
Một nhà nghiên cứu thuật toán lượng tử đã nói với tôi đêm qua rằng có một vấn đề rất quan trọng đó là BQP-perfect: giải hệ phương trình tuyến tính gồm N phương trình. Về mặt kinh điển, điều này có thể giải quyết được trong các bước O (N) với việc loại bỏ Gaussian. Thuật toán Harrow-Hassidim-Lloyd ( http://arxiv.org/abs/0811.3171 ) giải quyết nó trong polylog (N), miễn là bạn sẵn sàng chấp nhận câu trả lời có giải pháp được mã hóa dưới dạng trạng thái lượng tử. Nếu bạn muốn sử dụng toàn bộ máy tính lượng tử, do đó có vẻ như bạn cần phải có một loại tương ứng với trạng thái của thanh ghi lượng tử.
Mặc dù bây giờ tôi không có chuyên môn đặc biệt, tôi sẽ đoán rằng bạn sẽ có thể lập trình một máy tính lượng tử miễn là bạn có quyền truy cập vào một loại tương ứng với trạng thái ma thuật. Tuy nhiên, đó là một khái niệm khó, đòi hỏi khá nhiều nghiên cứu về chủ đề này.
Được cảnh báo rằng chúng ta còn rất lâu mới có ngôn ngữ lập trình lượng tử, bởi vì chúng ta đang ở giai đoạn rất nguyên thủy của nghiên cứu điện toán lượng tử. Yêu cầu lượng tử C ngay bây giờ sẽ giống như đến Alan Turing và yêu cầu anh ta thiết kế Python. Chúng tôi thậm chí chưa có phiên bản lượng tử của ống chân không!