Sắp xếp trong Khoa học máy tính so với sắp xếp trong thế giới 'thực'


87

Tôi đã suy nghĩ về việc sắp xếp các thuật toán trong phần mềm và những cách khả thi người ta có thể vượt qua O(nlogn)rào cản. Tôi không nghĩ rằng có thể sắp xếp nhanh hơn theo nghĩa thực tế, vì vậy xin đừng nghĩ rằng tôi làm vậy.

Như đã nói, có vẻ như với hầu hết các thuật toán sắp xếp, phần mềm phải biết vị trí của từng phần tử. Nếu không, điều này có ý nghĩa như thế nào, làm thế nào nó biết được vị trí đặt từng phần tử theo một số tiêu chí sắp xếp?

Nhưng khi tôi vượt qua suy nghĩ này với thế giới thực, máy ly tâm không biết mỗi phân tử ở vị trí nào khi nó 'sắp xếp' các phân tử theo mật độ. Trên thực tế, nó không quan tâm đến vị trí của từng phân tử. Tuy nhiên, nó có thể sắp xếp hàng nghìn tỷ trên hàng nghìn tỷ vật phẩm trong một khoảng thời gian tương đối ngắn, do thực tế là mỗi phân tử tuân theo luật mật độ và lực hấp dẫn - điều này khiến tôi phải suy nghĩ.

Liệu có thể với một số chi phí trên mỗi nút (một số giá trị hoặc phương pháp gắn vào mỗi nút) để 'buộc' thứ tự của danh sách không? Một cái gì đó giống như một máy ly tâm, nơi chỉ mỗi phần tử quan tâm đến vị trí tương đối của nó trong không gian (trong mối quan hệ với các nút khác). Hoặc, điều này có vi phạm một số quy tắc trong tính toán?

Tôi nghĩ một trong những điểm quan trọng được đưa ra ở đây là các hiệu ứng cơ lượng tử của tự nhiên và cách chúng áp dụng song song cho tất cả các hạt đồng thời.

Có lẽ các máy tính cổ điển vốn đã hạn chế việc sắp xếp trong phạm vi O(nlogn), nơi mà máy tính lượng tử có thể vượt qua ngưỡng đó thành các O(logn)thuật toán hoạt động song song.

Điểm mà một máy ly tâm về cơ bản là một loại bong bóng song song dường như là đúng, có độ phức tạp về thời gian O(n).

Tôi đoán suy nghĩ tiếp theo là nếu thiên nhiên có thể sắp xếp O(n)thì tại sao máy tính lại không thể?


44
Máy ly tâm chỉ là một công cụ sắp xếp bong bóng song song ồ ạt, không có gì lạ.
el.pescado

3
Khi có nbộ xử lý (lõi) để sắp xếp một mảng chỉ gồm ncác mục, bạn có thể dễ dàng đạt được O(n)độ phức tạp. Một sự thật cay đắng là chúng ta thường phải sắp xếp các mảng dài (hàng nghìn và hàng triệu mục) trên CPU chỉ có 2..10 lõi.
Dmitry Bychenko

24
Lưu ý rằng n log n là số phép so sánh phải được thực hiện theo kiểu so sánh các cặp mục . Không yêu cầu thuật toán sắp xếp so sánh các cặp mục ; nếu bạn có thể đưa ra một cách sắp xếp không so sánh theo cặp, bạn có thể làm cho nó nhanh hơn n log n.
Eric Lippert

7
Điều bạn còn thiếu là mỗi phân tử trong dung dịch là các đơn vị xử lý. Không có trình giả lập nào đếm các phân tử - các phân tử tự đếm. Một máy tính tương tự sẽ có càng nhiều lõi xử lý và bộ nhớ độc lập khi bạn có các mục để sắp xếp. O(n)riêng nó không cho bạn biết điều gì - nó chỉ hữu ích để so sánh các thuật toán có các ràng buộc tương tự và chạy trên các kiến ​​trúc tương tự; trong khóa học giới thiệu cho độ phức tạp thuật toán chúng tôi sử dụng một mô hình "máy tính" rất đơn giản rằng có ít để làm với máy ly tâm hoặc máy tính thật :)
Luaan

4
Tôi bỏ phiếu để đóng câu hỏi này như off-topic vì nó thuộc về cs.stackexchange.com
Robert Fraser

Câu trả lời:


71

CHỈNH SỬA: Tôi đã hiểu sai về cơ chế của một máy ly tâm và có vẻ như nó thực hiện một phép so sánh, một kiểu song song ồ ạt tại đó. Tuy nhiên, có những quy trình vật lý hoạt động trên một thuộc tính của thực thể đang được sắp xếp hơn là so sánh hai thuộc tính. Câu trả lời này bao gồm các thuật toán có tính chất đó.

Máy ly tâm áp dụng một cơ chế phân loại không thực sự hoạt động bằng cách so sánh giữa các phần tử, mà thực sự bằng một thuộc tính ('lực ly tâm') trên từng phần tử riêng lẻ một cách riêng biệt. Một số thuật toán sắp xếp rơi vào chủ đề này, đặc biệt là Radix Sort . Khi thuật toán sắp xếp này được song song hóa, nó sẽ tiếp cận với ví dụ về máy ly tâm.

Một số thuật toán sắp xếp không so sánh khác là Sắp xếp theo nhómSắp xếp đếm . Bạn có thể thấy rằng phân loại Thùng cũng phù hợp với ý tưởng chung của máy ly tâm (bán kính có thể tương ứng với thùng).

Một cái gọi là 'thuật toán sắp xếp' khác trong đó mỗi phần tử được xem xét một cách riêng biệt là Sleep Sort . Ở đây, thời gian chứ không phải là lực ly tâm đóng vai trò là cường độ được sử dụng để phân loại.


Đây thực sự là câu trả lời đúng - sắp xếp theo thùng / sắp xếp theo cơ số có độ phức tạp O (n) miễn là các thùng và đầu vào có thể được truy cập trong thời gian O (1).
pjc50

5
Tôi định hỏi "Có ai khác nghĩ đến Sleep Sort ngay lập tức không?".
Rõ ràng là

Máy ly tâm hoạt động bằng cách so sánh các phần tử; hàm băm là (chủ yếu) mật độ. Ví dụ, nếu bạn ly tâm hỗn hợp propan và không khí, bạn sẽ nhận được propan được sắp xếp theo các ranh giới; nhưng nếu bạn ly tâm propan-và-nước, bạn sẽ nhận được propan được sắp xếp vào trung tâm (nước đậm đặc hơn). Quá trình này gần giống như quá trình vật lý mà "loại bong bóng" được đặt tên theo.
Nat

Không phải sự phức tạp của SleepSort thực sự dựa vào bộ lập lịch sao?
Morwenn

@Morwenn bộ lập lịch linux cũ là O (1) trong khi cái mới là O (log n). Cả hai đều nặng hơn bởi các yếu tố liên tục trong giấc ngủ
user1952500

35

Độ phức tạp tính toán luôn được định nghĩa đối với một số mô hình tính toán. Ví dụ, một thuật toán O ( n ) trên một máy tính điển hình có thể là O (2 n ) nếu được triển khai trong Brainfuck .

Mô hình tính toán ly tâm có một số đặc tính thú vị; ví dụ:

  • nó hỗ trợ song song tùy ý; Cho dù có bao nhiêu hạt trong dung dịch, chúng đều có thể được sắp xếp đồng thời.
  • nó không cung cấp một loại hạt tuyến tính chặt chẽ theo khối lượng, mà là một xấp xỉ rất gần (năng lượng thấp).
  • không khả thi khi kiểm tra các hạt riêng lẻ trong kết quả.
  • không thể phân loại các hạt theo các đặc tính khác nhau; chỉ có khối lượng được hỗ trợ.

Cho rằng chúng tôi không có khả năng triển khai một cái gì đó như thế này trong phần cứng máy tính có mục đích chung, mô hình có thể không phù hợp thực tế; nhưng nó vẫn có thể đáng để kiểm tra, để xem có điều gì học được từ nó không. Ví dụ, các thuật toán không xác địnhthuật toán lượng tử đều là những lĩnh vực nghiên cứu tích cực, mặc dù cả hai đều không thực sự có thể thực hiện được ngày nay.


Tự nhiên / vật lý nói chung là song song (đó là lý do tại sao việc mô phỏng trên các máy tính nối tiếp của chúng ta rất tốn kém về mặt tính toán), vì vậy, sự tương tự của OP có một lỗ hổng lớn. Tuy nhiên, vẫn cần thời gian để các hạt / phân tử di chuyển dọc theo chiều dài của ống nghiệm hoặc bất cứ thứ gì, vì vậy ống nghiệm dài hơn giống như công việc trên mỗi sợi nhiều hơn, nhưng ống nghiệm rộng hơn thì song song hơn. (Và lưu ý rằng máy ly tâm không sắp xếp theo diện tích của một ống nghiệm, vì vậy nó có nhiều loại song song không hợp nhất nhưng có thể có một số tương tác trong quá trình thực hiện. Không giống như loại thực tế trên máy tính song song, với sự hợp nhất cuối cùng)
Peter Cordes

29

Bí quyết là bạn chỉ có xác suất sắp xếp danh sách của mình bằng máy ly tâm. Cũng như các cách sắp xếp trong thế giới thực khác [cần dẫn nguồn], bạn có thể thay đổi xác suất mà bạn đã sắp xếp danh sách của mình, nhưng đừng bao giờ chắc chắn nếu không kiểm tra tất cả các giá trị (nguyên tử).

Cân nhắc câu hỏi: "Bạn nên chạy máy ly tâm trong bao lâu?"
Nếu bạn chỉ chạy nó trong một pico giây, mẫu của bạn có thể được sắp xếp ít hơn so với trạng thái ban đầu .. hoặc nếu bạn chạy nó trong một vài ngày, nó có thể được sắp xếp hoàn toàn. Tuy nhiên, bạn sẽ không biết nếu không thực sự kiểm tra nội dung.


Đó là một điểm khá tốt. Làm sao bạn biết? Sau đó, một lần nữa, nếu các quy tắc được áp dụng là đủ tốt, bạn có muốn biết không? (tức là nếu bạn làm cho xác suất thấp đến mức không đáng kể).
Kris

Bạn luôn có thể tính toán mất bao lâu để một hạt đến cuối máy ly tâm. Bạn biết gia tốc (w ^ 2 * r trong đó w là vận tốc góc) và bạn có thể tính thời gian.
dùng1952500

1
Đúng, nhưng vì điều đó bị nhầm lẫn bởi chuyển động nâu , các lực nguyên tử khác và vật lý lượng tử (cảm ơn, những thứ nhỏ bé!), Bạn vẫn không thể hoàn toàn chắc chắn rằng bạn đã sắp xếp danh sách của mình cho đến khi bạn kiểm tra trạng thái.
ti7

1
Nếu bạn không có các hạt cực nhỏ, bạn có thể bỏ qua hiệu ứng lượng tử. Nếu bạn có các hạt cực nhỏ, thuật toán sắp xếp không cần phải hoạt động và trên thực tế, bạn không thể phụ thuộc vào nó để hoạt động do các hiệu ứng lượng tử. Và bạn không thể kiểm tra trạng thái một cách đáng tin cậy do nguyên tắc bất định (kiểm tra một hạt sẽ dẫn đến các hạt khác chuyển động).
user1952500

1
@Kris Chà, chúng tôi biết rằng máy ly tâm không phân loại hoàn hảo. Chúng tôi chỉ tiếp tục làm điều đó cho đến khi sự khác biệt không còn quan trọng cho mục đích thực tế - như ngăn ngừa đông máu trong máy ly tâm máu của bạn. Nhưng hãy nhìn vào các máy ly tâm uranium - những máy cần phân loại các vật phẩm "gần gũi" hơn nhiều (khó tách hơn), và đòi hỏi một cơ sở vật chất khổng lồ liên tục phân loại lặp đi lặp lại với chi phí khổng lồ để tạo ra một lượng nhỏ vật liệu mong muốn. Và máy ly tâm có kích thước nhất định, và thời gian tách tỷ lệ thuận với chiều rộng của các ống, và ... Bạn không thể chỉ nói O (n), yay!
Luaan

5

Một ví dụ trong thế giới thực về "đặt hàng" dựa trên máy tính sẽ là các máy bay không người lái tự hành hợp tác làm việc với nhau, được gọi là "bầy máy bay không người lái". Máy bay không người lái hoạt động và giao tiếp với cả tư cách cá nhân và một nhóm, và có thể theo dõi nhiều mục tiêu. Các máy bay không người lái quyết định chung máy bay không người lái nào sẽ theo dõi mục tiêu nào và nhu cầu rõ ràng là phải tránh va chạm giữa các máy bay không người lái. Các phiên bản đầu tiên của loại máy bay này là máy bay không người lái di chuyển qua các điểm trong khi ở trong đội hình, nhưng đội hình có thể thay đổi.

Đối với một "sắp xếp", các máy bay không người lái có thể được lập trình để tạo thành một đường hoặc mẫu theo một thứ tự cụ thể, ban đầu được phóng ra theo bất kỳ hoán vị hoặc hình dạng nào, sau đó gọi chung và song song chúng sẽ nhanh chóng tạo thành đường hoặc mẫu có thứ tự.

Quay lại cách sắp xếp dựa trên máy tính, một vấn đề là có một bus bộ nhớ chính và không có cách nào để một số lượng lớn các đối tượng di chuyển song song trong bộ nhớ.

biết vị trí của từng phần tử

Trong trường hợp sắp xếp theo băng, vị trí của mỗi phần tử (bản ghi) chỉ được "biết" đối với "băng", không phải đối với máy tính. Sắp xếp dựa trên băng chỉ cần làm việc với hai phần tử cùng một lúc và một cách để biểu thị ranh giới chạy trên băng (dấu tệp hoặc bản ghi có kích thước khác nhau).


4

IMHO, mọi người nghĩ quá nhiều về log (n). O (nlog (n)) Thực tế là O (n). Và bạn cần O (n) chỉ để đọc dữ liệu.

Nhiều thuật toán như quicksort cung cấp một cách rất nhanh để sắp xếp các phần tử. Bạn có thể thực hiện các biến thể của quicksort sẽ rất nhanh trong thực tế.

Vốn dĩ tất cả các hệ thống vật chất đều song song vô hạn. Bạn có thể có một khối lượng nguyên tử trong một hạt cát, tự nhiên có đủ sức mạnh tính toán để tìm ra vị trí của mỗi electron trong mỗi nguyên tử. Vì vậy, nếu bạn có đủ tài nguyên tính toán (O (n) bộ xử lý), bạn có thể sắp xếp n số theo thời gian log (n).

Từ nhận xét:

  1. Cho một bộ xử lý vật lý có k số phần tử, nó có thể đạt được độ song song nhiều nhất là O (k). Nếu bạn xử lý n số một cách tùy ý, nó sẽ vẫn xử lý nó với tốc độ liên quan đến k. Ngoài ra, bạn có thể hình thành vấn đề này về mặt vật lý. Bạn có thể tạo ra n quả bóng thép với trọng lượng tỷ lệ với số bạn muốn mã hóa, điều này có thể được giải quyết bằng máy ly tâm trong lý thuyết. Nhưng ở đây số lượng nguyên tử bạn đang sử dụng tỷ lệ với n. Trong khi trong trường hợp tiêu chuẩn, bạn có một số nguyên tử hạn chế trong một bộ xử lý.

  2. Một cách khác để suy nghĩ về điều này là, giả sử bạn có một bộ xử lý nhỏ gắn với mỗi số và mỗi bộ xử lý có thể giao tiếp với các hàng xóm của nó, bạn có thể sắp xếp tất cả các số đó theo thời gian O (log (n)).


Nhưng không phải tính toán chỉ có vậy - sử dụng các đặc tính vật lý của tự nhiên để thực hiện một số công việc? Tôi có thể sẽ chuyển sang tính toán lượng tử ở đây, nhưng nếu nó có thể được thực hiện về mặt vật lý, nó sẽ có thể được thực hiện về mặt tính toán? Có lẽ phép tính cổ điển là đường chặn giữa O (nlogn) và O (logn).
Kris

2
@Kris Không chính xác. Cho một bộ xử lý vật lý có k số phần tử, nó có thể đạt được độ song song nhiều nhất là O (k). Nếu bạn xử lý n số một cách tùy ý, nó sẽ vẫn xử lý nó với tốc độ liên quan đến k. Ngoài ra, bạn có thể hình thành vấn đề này về mặt vật lý. Bạn có thể tạo ra n quả bóng thép với trọng lượng tỷ lệ với số bạn muốn mã hóa, điều này có thể được giải quyết bằng máy ly tâm trong lý thuyết. Nhưng ở đây số lượng nguyên tử bạn đang sử dụng tỷ lệ với n. Trong khi trong trường hợp tiêu chuẩn, bạn có một số nguyên tử hạn chế trong một bộ xử lý.
ElKamina

Giới hạn đó có áp dụng cho các đối tượng QM không? Chỉ vì tò mò
Kris

1
@Kris Tôi không hiểu QM đủ sâu để trả lời nó.
ElKamina

Đừng lo lắng! Tôi chỉ rất tò mò và dường như không thể ngủ được haha. Cảm ơn bạn vì những câu trả lời thú vị.
Kris

4

Tôi đã làm việc trong một văn phòng vào mùa hè sau khi tốt nghiệp trung học khi tôi bắt đầu học đại học. Tôi đã học về Khoa học Máy tính AP, trong số những thứ khác, sắp xếp và tìm kiếm .

Tôi đã áp dụng kiến ​​thức này trong một số hệ thống vật lý mà tôi có thể nhớ lại:

Sắp xếp hợp nhất tự nhiên để bắt đầu…

Một hệ thống đã in các biểu mẫu nhiều phần bao gồm một tờ giấy xé có kích thước bằng thẻ tập tin, cần được nộp vào một ngăn kéo.

Tôi bắt đầu với một đống trong số chúng và sắp xếp đống để bắt đầu. Bước đầu tiên là chọn ra 5 hoặc hơn, đủ ít để có thể dễ dàng đặt trong tay bạn. Đặt gói đã phân loại xuống, đan chéo từng chồng để giữ chúng riêng biệt.

Sau đó, hợp nhất từng cặp ngăn xếp, tạo ra một ngăn xếp lớn hơn. Lặp lại cho đến khi chỉ có một ngăn xếp.

… Sắp xếp chèn để hoàn thành

Việc xếp các thẻ đã sắp xếp sẽ dễ dàng hơn, vì mỗi thẻ tiếp theo nằm xa hơn một chút xuống cùng một ngăn kéo đang mở.

Sắp xếp Radix

Điều này không ai khác hiểu làm thế nào tôi đã làm nó quá nhanh, mặc dù nhiều lần cố gắng dạy nó.

Cần phân loại một hộp lớn các cuống séc (kích thước bằng thẻ đục lỗ). Nó trông giống như chơi solitaire trên một bàn lớn — giải quyết, xếp chồng lên nhau, lặp lại.

Nói chung

30 năm trước, tôi đã nhận thấy điều bạn đang hỏi: các ý tưởng chuyển sang các hệ thống vật lý khá trực tiếp vì có chi phí tương đối so sánhxử lý các bản ghi cũng như mức độ bộ nhớ đệm.

Vượt xa những điều tương đương được hiểu rõ

Tôi nhớ lại một bài luận về chủ đề của bạn, và nó đưa ra loại mì Ý . Bạn cắt một đoạn mì khô để chỉ ra giá trị khóa và dán nhãn bằng ID bản ghi. Đây là O (n), chỉ cần xử lý từng mục một lần.

Sau đó, bạn lấy gói và chạm vào một đầu trên bàn. Chúng sắp xếp ở các cạnh dưới cùng và hiện chúng đã được sắp xếp. Bạn có thể cất cánh dài nhất một cách nhẹ nhàng và lặp lại. Đọc ra cũng là O (n).

Có hai điều đang diễn ra ở đây trong “thế giới thực” không tương ứng với các thuật toán. Đầu tiên, căn chỉnh các cạnh là một thao tác song song. Mỗi mục dữ liệu cũng là một bộ xử lý (các định luật vật lý áp dụng cho nó). Vì vậy, nói chung, bạn chia tỷ lệ xử lý có sẵn với n, về cơ bản chia độ phức tạp cổ điển của bạn cho một hệ số trên n.

Thứ hai, làm thế nào để việc sắp xếp các cạnh hoàn thành một cách sắp xếp? Việc sắp xếp thực sự nằm trong phần đọc ra cho phép bạn tìm bước dài nhất trong một bước, mặc dù bạn đã so sánh tất cả chúng để tìm bước dài nhất. Một lần nữa, chia cho một thừa số của n, vì vậy tìm thấy lớn nhất bây giờ là O (1).

Một ví dụ khác là sử dụng tính toán tương tự: một mô hình vật lý giải quyết vấn đề “ngay lập tức” và công việc chuẩn bị là O (n). Về nguyên tắc, tính toán được chia tỷ lệ với số lượng các thành phần tương tác, không phải số lượng các mục được chuẩn bị trước. Vì vậy, quy mô tính toán với n². Ví dụ mà tôi đang nghĩ đến là một phép tính đa yếu tố có trọng số, được thực hiện bằng cách khoan lỗ trên bản đồ, treo quả nặng từ các dây đi qua các lỗ và gom tất cả các dây lại trên một vòng.


Phân loại mì chính là một cuốn sách vui nhộn. Tôi thích thú khi nghĩ về nó, nhưng tôi chỉ trích hành động quét sợi mì lâu nhất. Đây thực sự không phải là thao tác O (1) vì bạn quét mì. Hãy tưởng tượng mười ngàn sợi mì và một vài sợi mì có độ dài tương tự ... đó không phải là hoạt động "nhãn cầu hóa" O (1). Trong thực tế, người ta phải quét tất cả các sợi mì chưa được phân loại để tìm ra sợi mì dài nhất.
ThisClark

Bạn có thể "quét" tất cả các sợi mì bằng cách đặt lòng bàn tay của bạn trên toàn bộ sợi mì và kéo một sợi mì cao nhất tiếp xúc với tay của bạn. Nếu sợi mì có chiều dài rất gần nhau, hãy sử dụng bề mặt "bàn tay" chính xác hơn để lấy sợi mì cao nhất. Mì không được chọn theo thứ tự như với phân loại lựa chọn, chúng được chọn tất cả cùng một lúc nên có khả năng “tính toán” O (n).
Bradd Szonye

1
@ThisClark bạn cần một đồ gá chính xác hơn: một mặt phẳng song song với điểm dừng ở phía dưới để căn thẳng sợi mì. Cẩn thận hạ xuống cho đến khi chạm vào một sợi mì (sợi cao nhất) và được đặt dưới sức nén. Việc so sánh độ cao của máy bay so với mỗi sợi mì được thực hiện song song bởi sợi mì đó. Bạn đang đề xuất rằng cần một hệ số cao hơn, nhưng đối số đó không thay đổi Big-O.
JDługosz

3

Sắp xếp vẫn là O (n) tổng thời gian. Đó là nó nhanh hơn đó là vì Song song hóa .

Bạn có thể xem máy ly tâm như một tổ hợp gồm n nguyên tử, đặt song song trên n lõi (mỗi nguyên tử hoạt động như một bộ xử lý).

Bạn có thể sắp xếp nhanh hơn bằng cách song song hóa nhưng chỉ bằng hệ số không đổi vì số lượng bộ xử lý bị hạn chế, O (n / C) vẫn là O (n) (CPU thường có <10 lõi và GPU <6000)


2

Máy ly tâm không phân loại các nút, nó tác dụng một lực lên chúng sau đó chúng phản ứng song song với nó. Vì vậy, nếu bạn thực hiện sắp xếp bong bóng trong đó mỗi nút tự di chuyển song song lên hoặc xuống dựa trên "mật độ" của nó, bạn sẽ có một triển khai ly tâm.

Hãy nhớ rằng trong thế giới thực, bạn có thể chạy một lượng rất lớn các tác vụ song song trong đó trong máy tính, bạn có thể có tối đa các tác vụ song song thực tương đương với số đơn vị xử lý vật lý.

Cuối cùng, bạn cũng sẽ bị hạn chế quyền truy cập vào danh sách các phần tử vì nó không thể được sửa đổi đồng thời bởi hai nút ...


1

Liệu có thể với một số chi phí trên mỗi nút (một số giá trị hoặc phương pháp gắn vào mỗi nút) để 'buộc' thứ tự của danh sách không?

Khi chúng tôi sắp xếp bằng các chương trình máy tính, chúng tôi chọn một thuộc tính của các giá trị được sắp xếp. Đó thường là độ lớn của số hoặc thứ tự bảng chữ cái.

Một cái gì đó giống như một máy ly tâm, nơi chỉ mỗi phần tử quan tâm đến vị trí tương đối của nó trong không gian (liên quan đến các nút khác)

Sự tương tự này gợi cho tôi nhớ đến sự sắp xếp bong bóng đơn giản. Làm thế nào các số nhỏ hơn bong bóng trong mỗi lần lặp lại. Giống như logic máy ly tâm của bạn.

Vì vậy, để trả lời điều này, chúng ta không thực sự làm điều gì đó tương tự trong phân loại dựa trên phần mềm?


1
Tôi nghĩ bạn đúng. Tôi nghĩ rằng tôi đã đánh mất sự tương tự ở đây là tôi đã quên rằng mỗi phân tử hoạt động song song. Vì vậy, nó sẽ giống như một loại bong bóng song song ...
Kris

1

Trước hết, bạn đang so sánh hai bối cảnh khác nhau, một là logic (máy tính) và một là vật lý (cho đến nay) đã được chứng minh rằng chúng ta có thể lập mô hình một số phần của nó bằng cách sử dụng các công thức toán học và chúng ta là lập trình viên có thể sử dụng công thức này để mô phỏng (một số phần của) vật lý trong logic hoạt động (ví dụ: công cụ vật lý trong công cụ trò chơi).

Thứ hai Chúng ta có một số khả năng trong thế giới máy tính (logic) gần như không thể xảy ra trong vật lý, chẳng hạn như chúng ta có thể truy cập bộ nhớ và tìm vị trí chính xác của từng thực thể tại mỗi thời điểm nhưng trong vật lý đó là một vấn đề lớn về nguyên lý bất định của Heisenberg .

Thứ ba Nếu bạn muốn lập bản đồ các máy ly tâm và hoạt động của nó trong thế giới thực, sang thế giới máy tính, nó giống như ai đó (Chúa) đã ban cho bạn một siêu máy tính với tất cả các quy tắc vật lý được áp dụng và bạn đang thực hiện công việc sắp xếp nhỏ của mình trong đó ( sử dụng máy ly tâm) và bằng cách nói rằng vấn đề sắp xếp của bạn đã được giải quyết ở o (n), bạn đang bỏ qua mô phỏng vật lý khổng lồ đang diễn ra trong nền ...


0

Một góc nhìn khác là những gì bạn đang mô tả với máy ly tâm tương tự với thứ được gọi là "loại mì spaghetti" ( https://en.wikipedia.org/wiki/Spaghetti_sort ). Giả sử bạn có một hộp que mì Ý chưa nấu chín với độ dài khác nhau. Giữ chúng trong nắm tay và thả lỏng tay để hạ chúng theo chiều dọc để các đầu đều nằm trên bàn nằm ngang. Bùm! Chúng được sắp xếp theo chiều cao. O (hằng số) thời gian. (Hoặc O (n) nếu bạn bao gồm cả việc chọn các thanh ra theo chiều cao và đặt chúng vào một giá đỡ mì Ý ..., tôi đoán vậy?)

Bạn có thể lưu ý rằng nó là O (không đổi) trong số lượng miếng mì Ý, nhưng do tốc độ âm thanh hữu hạn trong mì Ý, nó là O (n) trong chiều dài của sợi dài nhất. Vì vậy, không có gì đến miễn phí.


Đó cũng là điều tôi đã nói 11 giờ trước đó. Và tôi đã tiếp tục giải thích cách các hệ thống vật lý cho phép bạn chia cho n hoặc cho n² và giữ nguyên mô hình của phép toán và phép toán.
JDługosz

0

Hãy xem xét: "phân loại ly tâm" có thực sự mở rộng quy mô tốt hơn không? Hãy nghĩ về những gì sẽ xảy ra khi bạn mở rộng quy mô.

  • Các ống nghiệm càng ngày càng phải dài ra.
  • Những thứ nặng phải di chuyển xa hơn và xa hơn để xuống đáy.
  • Mômen quán tính tăng lên, đòi hỏi nhiều năng lượng hơn và thời gian tăng tốc đến tốc độ phân loại lâu hơn.

Nó cũng đáng xem xét các vấn đề khác với phân loại máy ly tâm. Ví dụ, bạn chỉ có thể hoạt động ở quy mô kích thước hẹp. Thuật toán sắp xếp máy tính có thể xử lý các số nguyên từ 1 đến 2 ^ 1024 và hơn thế nữa, không tốn kém. Đặt một thứ nặng gấp 2 ^ 1024 lần một nguyên tử hydro vào một máy ly tâm và, đó là một lỗ đen và thiên hà đã bị phá hủy. Thuật toán không thành công.

Tất nhiên câu trả lời thực sự ở đây là độ phức tạp của tính toán là tương đối với một số mô hình tính toán, như đã đề cập trong câu trả lời khác. Và "phân loại ly tâm" không có ý nghĩa trong bối cảnh của các mô hình tính toán thông thường, chẳng hạn như mô hình RAM hoặc mô hình IO hoặc máy Turing đa loạ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.