Thuật toán song song - Sắp xếp

Sắp xếp là một quá trình sắp xếp các phần tử trong một nhóm theo một thứ tự cụ thể, tức là thứ tự tăng dần, thứ tự giảm dần, thứ tự bảng chữ cái, v.v. Ở đây chúng ta sẽ thảo luận về những điều sau:

  • Sắp xếp liệt kê
  • Sắp xếp chuyển vị chẵn lẻ
  • Sắp xếp hợp nhất song song
  • Sắp xếp siêu nhanh

Sắp xếp danh sách các phần tử là một hoạt động rất phổ biến. Thuật toán sắp xếp tuần tự có thể không đủ hiệu quả khi chúng ta phải sắp xếp một khối lượng lớn dữ liệu. Do đó, các thuật toán song song được sử dụng trong việc sắp xếp.

Sắp xếp liệt kê

Sắp xếp kiểu liệt kê là một phương pháp sắp xếp tất cả các phần tử trong một danh sách bằng cách tìm vị trí cuối cùng của mỗi phần tử trong một danh sách đã sắp xếp. Nó được thực hiện bằng cách so sánh mỗi phần tử với tất cả các phần tử khác và tìm số phần tử có giá trị nhỏ hơn.

Do đó, với bất kỳ hai phần tử nào, a i và a j bất kỳ một trong các trường hợp sau phải đúng:

  • a i <a j
  • a i > a j
  • a i = a j

Thuật toán

procedure ENUM_SORTING (n)

begin
   for each process P1,j do
      C[j] := 0;
		
   for each process Pi, j do
	
      if (A[i] < A[j]) or A[i] = A[j] and i < j) then
         C[j] := 1;
      else
         C[j] := 0;
			
   for each process P1, j do
      A[C[j]] := A[j];
		
end ENUM_SORTING

Sắp xếp chuyển vị chẵn lẻ

Sắp xếp chuyển vị chẵn lẻ dựa trên kỹ thuật Sắp xếp bong bóng. Nó so sánh hai số liền kề và chuyển đổi chúng, nếu số đầu tiên lớn hơn số thứ hai để có được danh sách thứ tự tăng dần. Trường hợp ngược lại áp dụng cho chuỗi thứ tự giảm dần. Sắp xếp chuyển vị Lẻ-Chẵn hoạt động theo hai giai đoạn:odd phaseeven phase. Trong cả hai giai đoạn, các quá trình trao đổi số với số liền kề của chúng ở bên phải.

Thuật toán

procedure ODD-EVEN_PAR (n) 

begin 
   id := process's label 
	
   for i := 1 to n do 
   begin 
	
      if i is odd and id is odd then 
         compare-exchange_min(id + 1); 
      else 
         compare-exchange_max(id - 1);
			
      if i is even and id is even then 
         compare-exchange_min(id + 1); 
      else 
         compare-exchange_max(id - 1);
			
   end for
	
end ODD-EVEN_PAR

Sắp xếp hợp nhất song song

Sắp xếp hợp nhất trước tiên chia danh sách chưa được sắp xếp thành các danh sách con nhỏ nhất có thể, so sánh nó với danh sách liền kề và hợp nhất nó theo thứ tự đã sắp xếp. Nó thực hiện song song rất độc đáo bằng cách tuân theo thuật toán chia và chinh phục.

Thuật toán

procedureparallelmergesort(id, n, data, newdata)

begin
   data = sequentialmergesort(data)
	
      for dim = 1 to n
         data = parallelmerge(id, dim, data)
      endfor
		
   newdata = data
end

Sắp xếp siêu nhanh

Sắp xếp siêu nhanh là một triển khai sắp xếp nhanh trên siêu khối. Các bước của nó như sau:

  • Chia danh sách chưa được sắp xếp cho mỗi nút.
  • Sắp xếp cục bộ từng nút.
  • Từ nút 0, phát giá trị trung bình.
  • Tách cục bộ từng danh sách, sau đó trao đổi các nửa theo thứ nguyên cao nhất.
  • Lặp lại bước 3 và bước 4 song song cho đến khi thứ nguyên về 0.

Thuật toán

procedure HYPERQUICKSORT (B, n)
begin

   id := process’s label;
	
   for i := 1 to d do
      begin
      x := pivot;
      partition B into B1 and B2 such that B1 ≤ x < B2;
      if ith bit is 0 then
		
      begin
         send B2 to the process along the ith communication link;
         C := subsequence received along the ith communication link;
         B := B1 U C;
      endif
      
      else
         send B1 to the process along the ith communication link;
         C := subsequence received along the ith communication link;
         B := B2 U C;
         end else
      end for
		
   sort B using sequential quicksort;
	
end HYPERQUICKSORT