Paralel Algoritma - Sıralama

Sıralama, bir gruptaki öğeleri belirli bir sırayla düzenleme işlemidir, yani artan sıra, azalan sıra, alfabetik sıra vb. Burada aşağıdakileri tartışacağız -

  • Numaralandırma Sıralaması
  • Tek-Çift Aktarım Sıralaması
  • Paralel Birleştirme Sıralaması
  • Hiper Hızlı Sıralama

Bir öğe listesinin sıralanması çok yaygın bir işlemdir. Sıralı bir sıralama algoritması, büyük hacimli verileri sıralamak zorunda olduğumuzda yeterince verimli olmayabilir. Bu nedenle, sıralamada paralel algoritmalar kullanılır.

Numaralandırma Sıralaması

Numaralandırma sıralaması, sıralı bir listedeki her bir öğenin son konumunu bularak bir listedeki tüm öğeleri düzenleme yöntemidir. Her bir öğeyi diğer tüm öğelerle karşılaştırarak ve daha küçük değere sahip öğe sayısını bularak yapılır.

Bu nedenle, herhangi iki öğe için a i ve a j aşağıdaki durumlardan herhangi biri doğru olmalıdır -

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

Algoritma

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

Tek-Çift Aktarım Sıralaması

Tek-Çift Transpozisyon Sıralama, Kabarcık Sıralama tekniğine dayanır. İlk sayı ikinci sayıdan büyükse, artan sıra listesi almak için iki bitişik sayıyı karşılaştırır ve değiştirir. Tersi durum bir azalan sıra dizisi için geçerlidir. Tek-Çift aktarım sıralaması iki aşamada çalışır -odd phase ve even phase. Her iki aşamada da işlemler, sağdaki bitişik sayıları ile sayı alışverişinde bulunur.

Algoritma

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

Paralel Birleştirme Sıralaması

Birleştirme sıralaması ilk olarak sıralanmamış listeyi mümkün olan en küçük alt listelere böler, onu bitişik listeyle karşılaştırır ve sıralı bir sırada birleştirir. Böl ve fethet algoritmasını takip ederek paralelliği çok güzel bir şekilde uygular.

Algoritma

procedureparallelmergesort(id, n, data, newdata)

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

Hiper Hızlı Sıralama

Hiper hızlı sıralama, hiperküp üzerinde hızlı sıralamanın bir uygulamasıdır. Adımları aşağıdaki gibidir -

  • Sıralanmamış listeyi her düğüm arasında bölün.
  • Her düğümü yerel olarak sıralayın.
  • 0 düğümünden medyan değeri yayınlayın.
  • Her listeyi yerel olarak bölün, ardından yarıları en yüksek boyutta değiştirin.
  • Boyut 0'a ulaşana kadar 3. ve 4. adımları paralel olarak tekrarlayın.

Algoritma

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