Việc sử dụng Khoa học Máy tính phổ biến là 'bỏ qua các hằng số' có hữu ích khi so sánh điện toán cổ điển với điện toán lượng tử không?


13

Daniel Sank đã đề cập trong một bình luận , phản hồi ý kiến ​​của tôi (rằng) rằng việc tăng tốc liên tục về một vấn đề thừa nhận thuật toán thời gian đa thức là ít ỏi, rằng10số 8

Lý thuyết phức tạp là cách quá ám ảnh với giới hạn tỷ lệ kích thước vô hạn. Điều quan trọng trong cuộc sống thực là bạn nhận được câu trả lời cho vấn đề của mình nhanh như thế nào.

Trong Khoa học máy tính, người ta thường bỏ qua các hằng số trong các thuật toán, và tất cả, điều này hóa ra lại hoạt động khá tốt. (Ý tôi là, có rất tốt và thực tế thuật toán. Tôi hy vọng bạn sẽ cấp cho tôi (lý thuyết) thuật toán nhà nghiên cứu đã có một bàn tay khá lớn trong việc này!)

Nhưng, tôi hiểu rằng đây là một tình huống hơi khác so với bây giờ:

  1. Không so sánh hai thuật toán chạy trên cùng một máy tính, nhưng hai thuật toán (hơi) khác nhau trên hai máy tính rất khác nhau .
  2. Bây giờ chúng tôi đang làm việc với các máy tính lượng tử , mà có lẽ các phép đo độ hoàn hảo truyền thống có thể không đủ.

Trong đó, các phương pháp phân tích thuật toán chỉ là phương pháp . Tôi nghĩ rằng các phương pháp tính toán hoàn toàn mới đòi hỏi phải xem xét lại các phương pháp đánh giá hiệu suất hiện tại của chúng tôi!

Vì vậy, câu hỏi của tôi là:

Khi so sánh hiệu suất của các thuật toán trên máy tính lượng tử so với thuật toán trên máy tính cổ điển, liệu thực hành 'bỏ qua' có phải là một thực tiễn tốt?


Bỏ qua các hằng số thậm chí không phải luôn luôn là một ý tưởng tốt trong điện toán cổ điển. Làm thế nào đây là một câu hỏi điện toán lượng tử và không phải là một câu hỏi về cách suy nghĩ về quy mô tài nguyên thuật toán? Nói cách khác, khi nói về thời gian hoặc các tài nguyên khác cần thiết để chạy một tính toán, việc tính toán là lượng tử hay cổ điển dường như không liên quan đến câu hỏi liệu bạn có quan tâm đến yếu tố tăng tốc hàng trăm triệu hay không.
DanielSank 18/03/18

1
@DanielSank Như tôi đã đề cập, bỏ qua các hằng số trong phân tích thuật toán đã hoạt động khá tốt cho điện toán cổ điển. Nó cũng là tiêu chuẩn thực tế cho các nhà nghiên cứu thuật toán . Tôi khá thích thú khi nghe về tất cả những nhà nghiên cứu thuật toán dường như không đồng ý. Lý do chính tôi đặt câu hỏi này là 'bỏ qua các hằng số' là một quy tắc nhiều hơn là không dành cho hầu hết các nhà nghiên cứu thuật toán. Vì tôi chắc rằng trang web này sẽ có những người như những người đóng góp hữu ích, thật thú vị khi biết liệu có nên điều chỉnh suy nghĩ đó khi so sánh lượng tử với cổ điển hay không.
Thằn lằn rời rạc

3
Một cuộc trò chuyện thú vị về câu hỏi này là ở đây .
DanielSank

Câu trả lời:


9

Cách sử dụng phổ biến của Khoa học máy tính về 'bỏ qua các hằng số' chỉ hữu ích khi có thể bỏ qua sự khác biệt về hiệu suất của các loại kiến ​​trúc phần cứng hoặc phần mềm khác nhau với một chút xoa bóp. Nhưng ngay cả trong tính toán cổ điển, điều quan trọng là phải nhận thức được tác động của kiến ​​trúc (hành vi lưu trữ, sử dụng đĩa cứng) nếu bạn muốn giải quyết các vấn đề khó khăn hoặc các vấn đề lớn.

Việc thực hành bỏ qua các hằng số không phải là một thực tiễn được thúc đẩy (theo nghĩa là liên tục được khẳng định) từ quan điểm thực hiện. Nó được thúc đẩy chủ yếu bởi sự quan tâm đến cách tiếp cận nghiên cứu các thuật toán được xử lý tốt theo bố cục và thừa nhận các đặc tính đơn giản, theo cách gần với toán học thuần túy. Các định lý tăng tốc cho Turing Machines có nghĩa là bất kỳ định nghĩa hợp lý nào cũng không thể cố gắng xác định mức độ phức tạp của các vấn đề quá chính xác để đi đến một lý thuyết hợp lý; và bên cạnh đó, trong cuộc đấu tranh để tìm ra các thuật toán tốt cho các bài toán khó, các yếu tố không đổi không phải là phần thú vị về mặt toán học ...

Cách tiếp cận trừu tượng hơn này để nghiên cứu các thuật toán đã và phần lớn có kết quả. Nhưng bây giờ chúng ta phải đối mặt với một tình huống mà chúng ta có hai mô hình tính toán, trong đó

  • Một là trong một trạng thái tiên tiến của sự trưởng thành công nghệ (tính toán cổ điển); và
  • Một người ở trong trạng thái rất non nớt, nhưng đang cố gắng hiện thực hóa một mô hình lý thuyết có thể dẫn đến những cải tiến tiệm cận đáng kể (tính toán lượng tử).

Trong trường hợp này, chúng tôi có thể hỏi liệu thậm chí có ý nghĩa khi xem xét lợi ích tiệm cận, có hoặc không có kế toán cẩn thận của các yếu tố không đổi. Do nỗ lực thêm có thể được yêu cầu để thực hiện tính toán lượng tử có thể mở rộng, không chỉ các yếu tố vô hướng mà cả "tốc độ" đa thức trong hiệu suất lý thuyết có thể bị loại bỏ một khi tất cả chi phí trong việc thực hiện thuật toán lượng tử được tính đến.

Trong những ngày đầu này, cũng có thể có sự khác biệt đáng kể về hiệu suất đối với các cách tiếp cận khác nhau đối với kiến ​​trúc lượng tử. Điều này có thể khiến việc lựa chọn kiến ​​trúc trở nên quan trọng (nếu không quan trọng hơn) đối với việc thuật toán hoạt động tốt như thế nào so với phân tích tiệm cận - giống như việc bạn thực hiện tính toán thông thường trên máy von Neumann hay mạng phân tán cao với độ trễ đáng kể.

Điều thực sự quan trọng đối với tính toán thực tế là - và luôn luôn là - không chỉ các thuật toán, mà còn là các triển khai thuật toán : một thuật toán được hiện thực hóa theo một cách nhất định, trên một kiến ​​trúc nhất định. Thực tiễn phổ biến của phân tích tiệm cận mà bỏ qua các yếu tố không đổi cho phép chúng ta chú ý đến các lý do toán học có hệ thống về sự khác biệt trong hiệu suất của thuật toán và thực tế được thúc đẩy trong những trường hợp khi sự khác biệt về kiến ​​trúc không quá lớn để chi phối hiệu suất thực tế .

Đối với các công nghệ lượng tử, chúng tôi không ở trong tình huống hạnh phúc đó, nơi chúng tôi có thể che đậy một cách an toàn các yếu tố không đổi trong bất kỳ bối cảnh thực tế nào. Nhưng có lẽ một ngày nào đó chúng ta sẽ có thể làm như vậy. Đây là trò chơi dài của công nghệ thông tin lượng tử - cho đến nay, gần như là trò chơi duy nhất mà các nhà khoa học máy tính hàn lâm từng chơi, khi có liên quan đến công nghệ thông tin lượng tử. Dự đoán ngày hôm đó khi công nghệ lượng tử tìm được chỗ đứng, sẽ tốt cho chúng tôi tiếp tục theo đuổi phân tích tiệm cận, như một dòng điều tra về việc thực hiện các thuật toán lượng tử.


Vì vậy, trong kết luận, bạn dường như ủng hộ 'không ném đi những hằng số', cho bây giờ , trong khi chúng tôi vẫn đang trong giai đoạn mà thực hiện là rất quan trọng. Hấp dẫn. Tôi thích dòng lý luận của bạn, nhưng tôi không đồng ý một chút. Tôi sẽ sớm mở rộng về điều này trong một câu trả lời của riêng tôi.
Thằn lằn rời rạc

1
@Discretelizard: Tôi ủng hộ việc không vứt bỏ các hằng số, trong các tình huống mà các hằng số tạo ra sự khác biệt thực tế. Rõ ràng các hằng số như 1e8 cũng quan trọng thực tế trong tính toán cổ điển; nhưng chúng ta có thể bỏ qua các hằng số như vậy để cố gắng tìm các chi tiết khác cũng có thể rất thú vị. Nhưng cũng đúng là 1e8 quan trọng hơn khi so sánh giữa các công nghệ lượng tử và cổ điển như ngày nay, hơn là vấn đề trong tính toán cổ điển.
Niel de Beaudrap

5

Ôi(f[N])N

1010 , tôi sẽ gọi nó là hữu ích cho các ứng dụng.

300


2

Bạn không thể bỏ qua các yếu tố không đổi khi so sánh tính toán lượng tử với tính toán cổ điển. Chúng quá lớn.

Ví dụ, đây là một hình ảnh từ một số slide tôi đã trình bày năm ngoái:

lượng tử và cổng

Những thứ dọc theo đáy là các nhà máy ma thuật. Chúng có dấu chân của 150 qubit vật lý. Vì cổng AND sử dụng 150 nghìn qubit trong 0,6 mili giây, chúng tôi phỏng đoán rằng khối lượng không thời gian của một cổng lượng tử AND theo thứ tự 90 qubit giây.

Một trong những mục tiêu của đồng nghiệp của tôi là sử dụng 1 cpu trên 100 qubit khi thực hiện sửa lỗi. Vì vậy, chúng tôi có thể nói rằng 90 qubit giây cần 0,9 cpu giây làm việc. Chúng tôi đã thực hiện các công trình lượng tử hiệu quả hơn nhiều lần kể từ khi hình ảnh trên được thực hiện, vì vậy hãy gọi nó là 0,1 cpu giây.

(Có nhiều giả định đi vào các ước tính này. Loại kiến ​​trúc nào, tỷ lệ lỗi, v.v. Tôi chỉ đang cố gắng truyền đạt một thứ tự ý tưởng lớn.)

Phải mất 63 cổng VÀ để thực hiện bổ sung 64 bit. 63 * 0,1 cpu giây ~ = 6 cpu giây. Lượng tử, một bổ sung 64 bit có giá cao hơn một giây CPU. Về mặt kinh điển, việc bổ sung 64 bit có chi phí ít hơn một nano giây. Có một sự khác biệt yếu tố không đổi 10 tỷ ở đây. Nếu bạn so sánh với một máy cổ điển song song, chẳng hạn như GPU, con số thậm chí còn tồi tệ hơn. Bạn không thể bỏ qua các yếu tố không đổi với nhiều chữ số.

Ví dụ, hãy xem xét thuật toán của Grover, cho phép chúng tôi tìm kiếm đầu vào thỏa mãn cho một hàm trong các đánh giá sqrt (N) của hàm thay vì N đánh giá. Thêm vào hệ số không đổi 10 tỷ và giải quyết nơi máy tính lượng tử bắt đầu yêu cầu ít đánh giá hơn:

N>1010NN>1020

Thuật toán của Grover không thể song song hóa các đánh giá và các đánh giá cần ít nhất một cổng AND, vì vậy về cơ bản, bạn chỉ bắt đầu thấy lợi ích về thời gian của CPU khi quá trình tìm kiếm mất hàng chục triệu năm.

Trừ khi chúng tôi làm cho các yếu tố liên tục tốt hơn rất nhiều, không ai sẽ sử dụng tìm kiếm Grover cho bất cứ điều gì hữu ích. Ngay bây giờ tình hình lượng tử so với cổ điển là lợi thế theo cấp số nhân hoặc phá sản.


1

Trong khi các câu trả lời khác cung cấp điểm tốt, tôi cảm thấy rằng tôi vẫn không đồng ý một chút. Vì vậy, tôi sẽ chia sẻ suy nghĩ của riêng tôi về điểm này.

Nói tóm lại, tôi nghĩ rằng đặc trưng của hằng số 'như là' là một cơ hội lãng phí tốt nhất. Có lẽ đó là điều tốt nhất chúng ta có thể có được bây giờ, nhưng nó không phải là lý tưởng.

Nhưng trước tiên, tôi nghĩ rằng một chuyến du ngoạn ngắn ngủi là không cần thiết.

Khi nào chúng ta có một thuật toán hiệu quả?

106

  1. P
  2. P2P
  3. P2

P2PPP2

Vì vậy, không có lý do gì khi thuật toán rác của chúng ta có thể ngẫu nhiên dường như có sự tăng tốc 'kỳ diệu'. Bây giờ, tất nhiên có nhiều kỹ thuật thiết kế thử nghiệm có thể giảm thiểu rủi ro, nhưng có lẽ các thuật toán 'nhanh' thông minh hơn vẫn thất bại ở nhiều người, nhưng không đủ ví dụ có thể lừa chúng ta! (cũng lưu ý rằng tôi cho rằng không có nhà nghiên cứu nào là độc hại , điều này khiến vấn đề trở nên tồi tệ hơn!)

Vì vậy, bây giờ tôi sẽ trả lời: "Đánh thức tôi dậy khi có chỉ số hiệu suất tốt hơn".

Làm thế nào chúng ta có thể làm tốt hơn, sau đó?

Nếu chúng ta có thể đủ khả năng kiểm tra thuật toán 'hộp đen' của mình trong mọi trường hợp, chúng ta không thể bị lừa bởi những điều trên. Tuy nhiên, điều này là không thể đối với các tình huống thực tế. (Điều này có thể được thực hiện trong các mô hình lý thuyết!)

Thay vào đó, những gì chúng ta có thể làm là tạo ra một giả thuyết thống kê cho một số thời gian chạy được tham số hóa (thường là cho kích thước đầu vào) để kiểm tra điều này, có thể điều chỉnh giả thuyết của chúng ta và kiểm tra lại, cho đến khi chúng ta có một giả thuyết mà chúng ta thích và từ chối null có vẻ hợp lý. (Lưu ý rằng có thể có các yếu tố khác liên quan đến việc tôi bỏ qua. Thực tế tôi là một nhà toán học. Thiết kế thử nghiệm không phải là thứ nằm trong chuyên môn của tôi)

Ôi(n3)

Vậy, phải làm gì với các hằng số?

109

Tôi nghĩ rằng sẽ hữu ích nhất khi coi hằng số tò mò là một sự bất thường , tức là nó là một tuyên bố rằng chính nó đảm bảo điều tra thêm. Tôi nghĩ rằng việc tạo ra các giả thuyết dựa trên các mô hình tổng quát hơn là "thuật toán của chúng tôi mất thời gian X" là một công cụ tốt để thực hiện điều này. Vì vậy, trong khi tôi không nghĩ rằng chúng ta đơn giản có thể tiếp quản các công ước CS ở đây, thì hoàn toàn coi thường 'sự coi thường' đối với các hằng số cũng là một ý tưởng tồi.

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.