SlideShare a Scribd company logo
ORDEACIÓN BITÓNICA
Iván Gómez Costa
No presente escrito imos a tratar o tema da ordenación bitónica de secuencias de
números. Esta ordenación foi plantexada especialmente para a súa programación en paralelo,
como veremos máis adiante. Centrados nesta temática, faremos unha breve introdución aos
conceptos teóricos das secuencias bitónicas, para logo facer unha exposición de cómo ordear e
crear unha secuencia bitónicas. Rematando o documento facendo unha referencia a
implementación do algoritmo.

1.-Definición e propiedades:
En primeiro lugar como é lóxico introduciremos a definición dunha secuencia bitónica
Definición: Unha secuencia bitónica é unha secuencia de números x0 , x1,..., xn1 cas
seguintes propiedades:
1.-Existe un índice i , con 0  i  n  1 , tal que

a0  a1  ...  ai1 e ai  ai1  ...  an1
2.-Ou ben podemos rotar ciclicamente a secuencia, conseguindo que (1) se
cumpra
Agora imos supoñer que temos unha secuencia bitónica con n par de tal forma que

x0  x1  ...  xn
2

1

e xn  xn  ...  xn1
2

2

1

Poderemos representar esta secuencia de seguinte forma:

x0

xn
2

x1

xn
2

1

''
xi1

xn
2

H

xi

xn
2

i 1

i

''
xn
2

1

xn1

Ante esta representación temos a seguinte propiedade.
Propiedade: Existe unha única liña H que divide dita representación de x en dúas
rexións etiquetadas como '  ' e '  ' tales que:
1.-Cada par de elementos escollidos da mesma rexión, e un de cada columna
satisfan a condición correspondente a dita rexión.
2.-Ademais tamén se verifica que cada elemento da columna da dereita da
rexión '  ' é igual ou maior que todo elemento da rexión '  ' . Analogamente verificase para a
columna da dereita.
Definición: Aliña horizontal H que induce dúas rexións con estas propiedades dise que
verifica a “unique crossover property”
Exemplo: vexamos agora un exemplo destas primeiras definición e propiedades.
Tomemos a seguinte secuencia de números:

x  (3,2,1, 3, 6, 5, 4,0,1,2,6,7,10,9,6,4)

Vemos que esta secuencia tal é como esta non é bitónica. Pero se procedemos a rotala
ciclicamente obtemos a seguinte que si que o é:

x  (5, 4,0,1,2,6,7,10,9,6,4,3,2,1, 3, 6)

Representaremos esta secuencia ca representación que vimos antes

5
4
0 ''
1
2
6
7 ''
10

H

9
6
4
3
2
1
3
6

Onde podemos observar que se verifican as propiedades expostas anteriormente. Por
último para concluír este apartado de introdución as secuencias bitónicas, enunciaremos dos
teoremas dos cales omitimos a demostración neste documento.

Teorema 1: Toda secuencia bitónica verifica a “crossover property”

Teorema 2: Dada unha secuencia bitónica x definiremos as dúas secuencias seguintes:

L( x)  [min( x0 , x n ),..., min( xi , x n ),..., min( x n , xn1 )]
2

2

i

2

1

R( x)  [max( x0 , xn ),..., max( xi , xn ),..., max( xn , xn1 )]
2

2

i

2

1
Verifícase que tanto L( x) como R( x) son secuencias bitónicas e que todo elemento de

L( x) é menor ou igual que todo elemento de R( x)
Introducido o concepto de secuencia bitónica e algunhas das súas propiedades,
pasaremos agora a ver como a poderíamos ordear.

2.-Ordeación:
A ordenación dunha secuencia bitónica consistira basicamente en ir calculando
sucesivamente a lista L( x) . Este proceso que explicaremos a continuación con máis detalle, é
posible porque tanto L( x) como a R( x) seguiran sendo secuencias bitónicas a pesar de
aplicarlle o proceso.
Antes de comezar a explicar o método de ordeación, notemos que de aquí en adiante
denominaremos como “split” a operación que nos intercambiara dous elementos da secuencia.
Mediante esta operación iremos calculando as sucesivas L( x) e R( x) . Neste proceso de
ordeación o que faremos será comparar os elementos xi e x n , e intercambiaremos se se
2

i

verifica que xi  x n . Será deste xeito como iremos conseguindo as sucesivas L( x) e R( x) .
2

i

Exemplo: Vexamos todo isto cun exemplo que aclarara as ideas aquí expostas.
Consideraremos unha secuencia de oito elementos e aplicaremoslle o método.

posición

0

1

2

3

4

5

6

7

secuencia

2

6

7

10

9

6

4

3

split 1

2

6

4

3

9

6

7

10

split 2

2

3

4

6

7

6

9

10

split 3

2

3

4

6

6

7

9

10

ordeada

Describimos acontinuación o proceso seguido:

No split 1 facemos:
Comparamos as posicións 0  4, non intercambiamos porque 2  9
Comparamos as posicións 1  5, non intercambiamos porque 6=6
Comparamos as posicións 2  6, intercambiamos porque 7>4
Comparamos as posicións 3  7, ntercambiamos porque 10>3
Obtemos deste xeito as subsecuencias bitónicas L( x)  2,6,7,10 e R( x)  9,6,4,3 .
Agora a cada unha destas volvémoslle aplicar o método:
No split 2:
Para L( x) :
Comparamos as posicións 0  2, non intercambiamos porque 2<4
Comparamos as posicións 1  3, intercambiamos porque 6>3
Para R( x) :
Comparamos as posicións 4  6, intercambiamos porque 9>7
Comparamos as posicións 5  7, non intercambiamos porque 6<10

Temos agora que :

LL ( x)  2,3; LR ( x)  4,6; RL ( x)  7,6 e RR ( x)  9,10
No Split 3, reordeamos cada para de datos para obter a secuencia ordeada seguinte:

x  2,3,4,6,6,7,9,10

3.-Construcción:
Neste apartado abordaremos o tema da construción dunha secuencia bitónica. Ata
agora vimos como ordear unha secuencia bitónica, agora veremos como a partir dunha
secuencia arbitraria poder chegar a unha secuencia bitónica, para poderlle aplicar a ordeación
que vimos no apartado anterior.
A idea será construír secuencias bitónicas a partir de minisecuencias bitónicas de dous
elementos. Así se temos unha secuencia de catro elementos

 x0 , x1

de forma ascendente mentres que

x0 , x1, x2 , x3 ,

ordeamos

 x2 , x3 de forma descendente. Concatenando

estas duas secuencias obteremos unha secuencia bitónica. Este método pódese repetir agora
para mini-secuencias de catro elementos conseguindo secuencias bitónicas de 8,… Facendo
isto de forma recursiva obteremos unha secuencia bitónica formada polos mesmos números
da secuencia arbitraria de orixe.
Exemplo: Consideremos a secuencia 1,7,4,6,2,10, 4,0 , o proceso de construción
exponse na seguinte táboa e que se detalla paso a paso de seguido:
posición

0

1

2

3

4

5

6

secuencia

1

7

4

6

2

10

-4

0 Paso 1

1

7

6

4

2

10

0

-4 Paso 2

1

4

6

7

2

10

0

-4

1

4

6

7

10

2

0

-4

bitónica

7
Como notación utilizaremos (cre) para determinar que estamos ordeando de forma
crecente e (decre) para o contrario.

Paso1: ordeamos os pares consecutivos
(cre) Comparamos as posicións 0  1, non intercambiamos porque 1<7
(decre) Comparamos as posicións 2  3, intercambiamos porque 4<6
(cre) Comparamos as posicións 4  5, non intercambiamos porque 2<10
(decre) Comparamos as posicións 6  7, intercambiamos porque 0<-4
Paso 2: procedemos a facer o mesmo pero cas secuencias de 4 elementos

split 1:
(cre) Comparamos as posicións 0  2, non intercambiamos porque 1<6
(cre) Comparamos as posicións 1  3, intercambiamos porque 7>4
(decre) Comparamos as posicións 4  6, non intercambiamos porque 2>0
(decre) Comparamos as posicións 5  7, non intercambiamos porque 10>-4
split 2:
(cre) Comparamos as posicións 0  1, non intercambiamos porque 1<4
(cre) Comparamos as posicións 2  3, non intercambiamos porque 6<7
(decre) Comparamos as posicións 4  5, intercambiamos porque 2<10
(decre) Comparamos as posicións 6  7, non intercambiamos porque 0<-4
Chegamos desta forma a nosa secuencia bitónica 1,4,6,7,10,2,0, 4 , polo que
agora para ordeala só habería que aplicarlle o método visto no apartado anterior.

4.-Implementación:
A implementación da ordeación bitónica poderiámolo facer de forma secuencial,
utilizando a idea de recursividade. Así en cada proceso, chamariamos as funcións que nos
ordeasen de forma crecente ou decrecente tantas veces como precisemos para ordear o trozo
da secuencia na que nos atopemos.
Pero como xa comentamos no inicio deste documento, esta ordeación foi
especialmente deseñada para a súa programación en paralelo. A este aspecto ímoslle dedicar
unhas liñas neste apartado.
Dado como foi descrito o problema, tanto os Split como a comparación e intercambio
de elementos se pode facer de forma paralela. Pero para obter unha maior eficiencia,
deberemos abandonar a idea de chamar sucesivamente ao Split, e centrarnos nunha
formulación baseada en cada elemento da nosa sucesión. Para deixar claras as ideas,
utilizaremos un exemplo para explicar a implementación. Analizaremos o proceso mediante un
exemplo, onde a cada índice o denominaremos pola súa formulación binaria:
Natural 0
1
2
3
4
5
6
7
Binario 0000 0001 0010 0011 0100 0101 0110 0111
Numeraremos o bit máis a dereita como o bit 0 mentres que o mais a esquerda como
o bit 3. Na iteración i teremos que o bit i será o que nos indique se ordeamos de forma
crecente ou decrecente os pares de elementos tomados. Tendo en conta isto, vexamos como
sería o proceso
1.-Na primeira iteración ordearíamos cada par de elementos consecutivos, e segundo
o bit 1 sexa igual a 0 ou a 1 ordearemolo de forma crecente ou decrecente respectivamente.
Vémolo na seguinte táboa:

Posición Comparadas
0000  0001
0010  0011
0100  0101
0110  0111

Orden
ascendente
descendente
ascendente
descendente

2.-Na segunda iteración, ordearemos as subsecuencias de catro elementos, tendo en
conta que agora é o bit 2 o que nos indica se ordeamos de forma ascendente ou descendente.
Vemos na seguinte táboa a primeira chamada:

Posición Comparadas
0000  0010
0001  0011
0100  0110
0101  0111

Orden
ascendente
ascendente
descendente
descendente

Mentres que na segunda chamada sería:

Posición Comparadas
0000  0001
0010  0011
0100  0101
0110  0111

Orden
ascendente
ascendente
descendente
descendente

3.-Na última iteración, teremos tres chamadas que describiremos nas seguintes
táboas. Sendo neste caso o bit 3 o que nos indica a orden.
Primeira chamada

Posición Comparadas
0000  0100
0001  0101
0010  0110
0011  0111

Orden
ascendente
ascendente
ascendente
ascendente

Posición Comparadas
0000  0010
0001  0011
0100  0110
0101  0111

Orden
ascendente
ascendente
ascendente
ascendente

Posición Comparadas
0000  0001
0010  0011
0100  0101
0110  0111

Orden
ascendente
ascendente
ascendente
ascendente

Segunda chamada

Terceira chamada

Observamos que na primeira chamada comparamos os elementos nos cales o bit 2 da
posición é distinto. Na segunda chamada os que teñen distintos o bit 1, mentres que os da
última chamada os que teñen distinto o bit 0.
Desta forma indicamos como sería a comparación tendo en conta as posicións de cada
elemento dentro da secuencia. Notemos que non indicamos se facemos ou non o cambio, iso
dependerá dos elementos que ocupen esas posicións e en que orde as haxa que ordear. Na
descrición que fixemos so indicamos que posición se comparan e cal debería ser a orde de
ordeación.
A implementación nun ordenador deste proceso, tería un código similar ao que segue:
1
2
3
4
5

int i,j,k;
for(k=2;k<=N;k=2*k){
for(j=k>>1;j>0;j=j>>1){
for(i=0;i<N;i++){
int ixj=i^j;
6
7
8
9
10
11
12

if((ixj)>i){
if((i&k)==0 && get(i)>get(ixj)) exchange(i,ixj);
if((i&k)!=0 && get(i)<get(ixj)) exchange(i,ixj);
}
}
}
}

A variable k indica a posición do bit que determina a orde(ascendente ou descendente)
na que son ordeados os pares de elementos comparados. En canto a variable j, correspondese
coa distancia entre os elementos que se comparan mentres que a i permítenos facer o
recorrido por todos os elemento. O ixj é o elemento que comparamos co elemento i (son os
pares de elementos que se diferenzas no bit de posición (log 2 j ) ). Notemos que so
compararemos istos elementos se se da que i<ixj, para evitarnos comparalos 2 veces.
Ata agora estivemos falando de que esta forma de ordear estaba pensado para a súa
programación en paralelo, e o código que expoñemos é secuencial. Pero se nos fixamos, o
bucle da liña 4 e totalmente paralelizable. Isto é debido a que as comparacións dos elementos
se fai de forma independente unha da outra. Podemos comparar ao mesmo tempo os
elementos na posición 0 e 1 a vez que os elementos 2 e 3, por exemplo. Deste xeito
repartiriamos as comparacións dos pares de elementos entre os distintos procesadores dos
que dispoñamos.

More Related Content

Featured

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
Christy Abraham Joy
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
Vit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
MindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
GetSmarter
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
Project for Public Spaces & National Center for Biking and Walking
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
Erica Santiago
 

Featured (20)

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 

Ordeación Bitónica

  • 2. No presente escrito imos a tratar o tema da ordenación bitónica de secuencias de números. Esta ordenación foi plantexada especialmente para a súa programación en paralelo, como veremos máis adiante. Centrados nesta temática, faremos unha breve introdución aos conceptos teóricos das secuencias bitónicas, para logo facer unha exposición de cómo ordear e crear unha secuencia bitónicas. Rematando o documento facendo unha referencia a implementación do algoritmo. 1.-Definición e propiedades: En primeiro lugar como é lóxico introduciremos a definición dunha secuencia bitónica Definición: Unha secuencia bitónica é unha secuencia de números x0 , x1,..., xn1 cas seguintes propiedades: 1.-Existe un índice i , con 0  i  n  1 , tal que a0  a1  ...  ai1 e ai  ai1  ...  an1 2.-Ou ben podemos rotar ciclicamente a secuencia, conseguindo que (1) se cumpra Agora imos supoñer que temos unha secuencia bitónica con n par de tal forma que x0  x1  ...  xn 2 1 e xn  xn  ...  xn1 2 2 1 Poderemos representar esta secuencia de seguinte forma: x0 xn 2 x1 xn 2 1 '' xi1 xn 2 H xi xn 2 i 1 i '' xn 2 1 xn1 Ante esta representación temos a seguinte propiedade. Propiedade: Existe unha única liña H que divide dita representación de x en dúas rexións etiquetadas como '  ' e '  ' tales que: 1.-Cada par de elementos escollidos da mesma rexión, e un de cada columna satisfan a condición correspondente a dita rexión.
  • 3. 2.-Ademais tamén se verifica que cada elemento da columna da dereita da rexión '  ' é igual ou maior que todo elemento da rexión '  ' . Analogamente verificase para a columna da dereita. Definición: Aliña horizontal H que induce dúas rexións con estas propiedades dise que verifica a “unique crossover property” Exemplo: vexamos agora un exemplo destas primeiras definición e propiedades. Tomemos a seguinte secuencia de números: x  (3,2,1, 3, 6, 5, 4,0,1,2,6,7,10,9,6,4) Vemos que esta secuencia tal é como esta non é bitónica. Pero se procedemos a rotala ciclicamente obtemos a seguinte que si que o é: x  (5, 4,0,1,2,6,7,10,9,6,4,3,2,1, 3, 6) Representaremos esta secuencia ca representación que vimos antes 5 4 0 '' 1 2 6 7 '' 10 H 9 6 4 3 2 1 3 6 Onde podemos observar que se verifican as propiedades expostas anteriormente. Por último para concluír este apartado de introdución as secuencias bitónicas, enunciaremos dos teoremas dos cales omitimos a demostración neste documento. Teorema 1: Toda secuencia bitónica verifica a “crossover property” Teorema 2: Dada unha secuencia bitónica x definiremos as dúas secuencias seguintes: L( x)  [min( x0 , x n ),..., min( xi , x n ),..., min( x n , xn1 )] 2 2 i 2 1 R( x)  [max( x0 , xn ),..., max( xi , xn ),..., max( xn , xn1 )] 2 2 i 2 1
  • 4. Verifícase que tanto L( x) como R( x) son secuencias bitónicas e que todo elemento de L( x) é menor ou igual que todo elemento de R( x) Introducido o concepto de secuencia bitónica e algunhas das súas propiedades, pasaremos agora a ver como a poderíamos ordear. 2.-Ordeación: A ordenación dunha secuencia bitónica consistira basicamente en ir calculando sucesivamente a lista L( x) . Este proceso que explicaremos a continuación con máis detalle, é posible porque tanto L( x) como a R( x) seguiran sendo secuencias bitónicas a pesar de aplicarlle o proceso. Antes de comezar a explicar o método de ordeación, notemos que de aquí en adiante denominaremos como “split” a operación que nos intercambiara dous elementos da secuencia. Mediante esta operación iremos calculando as sucesivas L( x) e R( x) . Neste proceso de ordeación o que faremos será comparar os elementos xi e x n , e intercambiaremos se se 2 i verifica que xi  x n . Será deste xeito como iremos conseguindo as sucesivas L( x) e R( x) . 2 i Exemplo: Vexamos todo isto cun exemplo que aclarara as ideas aquí expostas. Consideraremos unha secuencia de oito elementos e aplicaremoslle o método. posición 0 1 2 3 4 5 6 7 secuencia 2 6 7 10 9 6 4 3 split 1 2 6 4 3 9 6 7 10 split 2 2 3 4 6 7 6 9 10 split 3 2 3 4 6 6 7 9 10 ordeada Describimos acontinuación o proceso seguido: No split 1 facemos: Comparamos as posicións 0  4, non intercambiamos porque 2  9 Comparamos as posicións 1  5, non intercambiamos porque 6=6 Comparamos as posicións 2  6, intercambiamos porque 7>4 Comparamos as posicións 3  7, ntercambiamos porque 10>3 Obtemos deste xeito as subsecuencias bitónicas L( x)  2,6,7,10 e R( x)  9,6,4,3 . Agora a cada unha destas volvémoslle aplicar o método:
  • 5. No split 2: Para L( x) : Comparamos as posicións 0  2, non intercambiamos porque 2<4 Comparamos as posicións 1  3, intercambiamos porque 6>3 Para R( x) : Comparamos as posicións 4  6, intercambiamos porque 9>7 Comparamos as posicións 5  7, non intercambiamos porque 6<10 Temos agora que : LL ( x)  2,3; LR ( x)  4,6; RL ( x)  7,6 e RR ( x)  9,10 No Split 3, reordeamos cada para de datos para obter a secuencia ordeada seguinte: x  2,3,4,6,6,7,9,10 3.-Construcción: Neste apartado abordaremos o tema da construción dunha secuencia bitónica. Ata agora vimos como ordear unha secuencia bitónica, agora veremos como a partir dunha secuencia arbitraria poder chegar a unha secuencia bitónica, para poderlle aplicar a ordeación que vimos no apartado anterior. A idea será construír secuencias bitónicas a partir de minisecuencias bitónicas de dous elementos. Así se temos unha secuencia de catro elementos  x0 , x1 de forma ascendente mentres que x0 , x1, x2 , x3 , ordeamos  x2 , x3 de forma descendente. Concatenando estas duas secuencias obteremos unha secuencia bitónica. Este método pódese repetir agora para mini-secuencias de catro elementos conseguindo secuencias bitónicas de 8,… Facendo isto de forma recursiva obteremos unha secuencia bitónica formada polos mesmos números da secuencia arbitraria de orixe. Exemplo: Consideremos a secuencia 1,7,4,6,2,10, 4,0 , o proceso de construción exponse na seguinte táboa e que se detalla paso a paso de seguido: posición 0 1 2 3 4 5 6 secuencia 1 7 4 6 2 10 -4 0 Paso 1 1 7 6 4 2 10 0 -4 Paso 2 1 4 6 7 2 10 0 -4 1 4 6 7 10 2 0 -4 bitónica 7
  • 6. Como notación utilizaremos (cre) para determinar que estamos ordeando de forma crecente e (decre) para o contrario. Paso1: ordeamos os pares consecutivos (cre) Comparamos as posicións 0  1, non intercambiamos porque 1<7 (decre) Comparamos as posicións 2  3, intercambiamos porque 4<6 (cre) Comparamos as posicións 4  5, non intercambiamos porque 2<10 (decre) Comparamos as posicións 6  7, intercambiamos porque 0<-4 Paso 2: procedemos a facer o mesmo pero cas secuencias de 4 elementos split 1: (cre) Comparamos as posicións 0  2, non intercambiamos porque 1<6 (cre) Comparamos as posicións 1  3, intercambiamos porque 7>4 (decre) Comparamos as posicións 4  6, non intercambiamos porque 2>0 (decre) Comparamos as posicións 5  7, non intercambiamos porque 10>-4 split 2: (cre) Comparamos as posicións 0  1, non intercambiamos porque 1<4 (cre) Comparamos as posicións 2  3, non intercambiamos porque 6<7 (decre) Comparamos as posicións 4  5, intercambiamos porque 2<10 (decre) Comparamos as posicións 6  7, non intercambiamos porque 0<-4 Chegamos desta forma a nosa secuencia bitónica 1,4,6,7,10,2,0, 4 , polo que agora para ordeala só habería que aplicarlle o método visto no apartado anterior. 4.-Implementación: A implementación da ordeación bitónica poderiámolo facer de forma secuencial, utilizando a idea de recursividade. Así en cada proceso, chamariamos as funcións que nos ordeasen de forma crecente ou decrecente tantas veces como precisemos para ordear o trozo da secuencia na que nos atopemos. Pero como xa comentamos no inicio deste documento, esta ordeación foi especialmente deseñada para a súa programación en paralelo. A este aspecto ímoslle dedicar unhas liñas neste apartado. Dado como foi descrito o problema, tanto os Split como a comparación e intercambio de elementos se pode facer de forma paralela. Pero para obter unha maior eficiencia, deberemos abandonar a idea de chamar sucesivamente ao Split, e centrarnos nunha formulación baseada en cada elemento da nosa sucesión. Para deixar claras as ideas, utilizaremos un exemplo para explicar a implementación. Analizaremos o proceso mediante un exemplo, onde a cada índice o denominaremos pola súa formulación binaria:
  • 7. Natural 0 1 2 3 4 5 6 7 Binario 0000 0001 0010 0011 0100 0101 0110 0111 Numeraremos o bit máis a dereita como o bit 0 mentres que o mais a esquerda como o bit 3. Na iteración i teremos que o bit i será o que nos indique se ordeamos de forma crecente ou decrecente os pares de elementos tomados. Tendo en conta isto, vexamos como sería o proceso 1.-Na primeira iteración ordearíamos cada par de elementos consecutivos, e segundo o bit 1 sexa igual a 0 ou a 1 ordearemolo de forma crecente ou decrecente respectivamente. Vémolo na seguinte táboa: Posición Comparadas 0000  0001 0010  0011 0100  0101 0110  0111 Orden ascendente descendente ascendente descendente 2.-Na segunda iteración, ordearemos as subsecuencias de catro elementos, tendo en conta que agora é o bit 2 o que nos indica se ordeamos de forma ascendente ou descendente. Vemos na seguinte táboa a primeira chamada: Posición Comparadas 0000  0010 0001  0011 0100  0110 0101  0111 Orden ascendente ascendente descendente descendente Mentres que na segunda chamada sería: Posición Comparadas 0000  0001 0010  0011 0100  0101 0110  0111 Orden ascendente ascendente descendente descendente 3.-Na última iteración, teremos tres chamadas que describiremos nas seguintes táboas. Sendo neste caso o bit 3 o que nos indica a orden.
  • 8. Primeira chamada Posición Comparadas 0000  0100 0001  0101 0010  0110 0011  0111 Orden ascendente ascendente ascendente ascendente Posición Comparadas 0000  0010 0001  0011 0100  0110 0101  0111 Orden ascendente ascendente ascendente ascendente Posición Comparadas 0000  0001 0010  0011 0100  0101 0110  0111 Orden ascendente ascendente ascendente ascendente Segunda chamada Terceira chamada Observamos que na primeira chamada comparamos os elementos nos cales o bit 2 da posición é distinto. Na segunda chamada os que teñen distintos o bit 1, mentres que os da última chamada os que teñen distinto o bit 0. Desta forma indicamos como sería a comparación tendo en conta as posicións de cada elemento dentro da secuencia. Notemos que non indicamos se facemos ou non o cambio, iso dependerá dos elementos que ocupen esas posicións e en que orde as haxa que ordear. Na descrición que fixemos so indicamos que posición se comparan e cal debería ser a orde de ordeación. A implementación nun ordenador deste proceso, tería un código similar ao que segue: 1 2 3 4 5 int i,j,k; for(k=2;k<=N;k=2*k){ for(j=k>>1;j>0;j=j>>1){ for(i=0;i<N;i++){ int ixj=i^j;
  • 9. 6 7 8 9 10 11 12 if((ixj)>i){ if((i&k)==0 && get(i)>get(ixj)) exchange(i,ixj); if((i&k)!=0 && get(i)<get(ixj)) exchange(i,ixj); } } } } A variable k indica a posición do bit que determina a orde(ascendente ou descendente) na que son ordeados os pares de elementos comparados. En canto a variable j, correspondese coa distancia entre os elementos que se comparan mentres que a i permítenos facer o recorrido por todos os elemento. O ixj é o elemento que comparamos co elemento i (son os pares de elementos que se diferenzas no bit de posición (log 2 j ) ). Notemos que so compararemos istos elementos se se da que i<ixj, para evitarnos comparalos 2 veces. Ata agora estivemos falando de que esta forma de ordear estaba pensado para a súa programación en paralelo, e o código que expoñemos é secuencial. Pero se nos fixamos, o bucle da liña 4 e totalmente paralelizable. Isto é debido a que as comparacións dos elementos se fai de forma independente unha da outra. Podemos comparar ao mesmo tempo os elementos na posición 0 e 1 a vez que os elementos 2 e 3, por exemplo. Deste xeito repartiriamos as comparacións dos pares de elementos entre os distintos procesadores dos que dispoñamos.