HIRIN AMIRA یکی از الگوریتم های مرتب سازی موازی است . مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های موازی است . الگوریتم بایتونیک از.

Download Report

Transcript HIRIN AMIRA یکی از الگوریتم های مرتب سازی موازی است . مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های موازی است . الگوریتم بایتونیک از.

Slide 1

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 2

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 3

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 4

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 5

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 6

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 7

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 8

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 9

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 10

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 11

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC


Slide 12

HIRIN

AMIRA

‫یکی از الگوریتم های مرتب سازی موازی است‪.‬‬

‫مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های‬
‫موازی است‪.‬‬
‫الگوریتم بایتونیک از بهترین الگوریتم های مرتب سازی از نظر‬
‫پیچیدگی و هزینه است‪.‬‬
‫یک سری مرتب شده یا سری صعودی است یا سری نزولی اما سری‬
‫بایتو نیک ترکیبی از دو زیر سری صعودی و نزولی است‪.‬‬

‫یک سری مرتب شده خودش یک سری بایتونیک است‪.‬‬
‫فرض کنید شما یک سری بایتو نیک به طول ‪ 2n‬دارید عناصر در‬
‫موقعیت های ]‪ [0,2n‬قرار دارند شما به سادگی این سری را می‬
‫توانید به دو نیم تقسیم کنید )‪. [n,2n),[0,n‬‬

‫در این روش ما فقط سری هایی با طول توانی از دو را مرتب می‬
‫کنیم‪.‬بنابراین ما همیشه یک سری را می توانیم به دو قسمت تقسیم‬
‫می کنیم که در هر قسمت بیشتر از یک عنصر موجود با شد‪.‬‬

public class BitonicSorter implements Sorter
{
private int[a]; // sorting direction
private final static boolean ASCENDING=true, DESCENDING=false;
public void sort(int[a])
{
this.a=a;
bitonicSort(0, a.length, ASCENDING);
}
private void bitonicSort(int lo, int n, boolean dir)
{
if (n>1)
{
int m=n/2;
bitonicSort(lo, m, ASCENDING);
bitonicSort(lo+m, m, DESCENDING);
bitonicMerge(lo, n, dir);
}
}

private void bitonicMerge(int lo, int n, boolean dir)
{
if (n>1)

{
int m=n/2;
for (int i=lo; icompare(i, i+m, dir);

bitonicMerge(lo, m, dir);
bitonicMerge(lo+m, m, dir);
}

}

private void compare(int i, int j, boolean dir)
{

if (dir==(a[i]>a[j]))
exchange(i, j);

}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t; }
} // end class BitonicSorter

‫‪bitonic‬‬
‫‪bitonic‬‬

‫‪bitonic‬‬
‫‪bitonic‬‬

‫برای استفاده از ‪sort‬‬
‫‪ bitonic‬تعداد اعداد‬
‫باید توانی از ‪ 2‬باشد‪.‬‬

‫درابتدا اعداد را باید به سری‬
‫‪ bitonic‬تبدیل کنیم‪.‬‬

‫‪For Example:‬‬

‫منظوراز سری ‪:bitonic‬‬

‫‪2^2=4‬‬

‫یعنی مثال اگر ‪ 8‬عدد داشته‬
‫باشیم باید ‪4‬عدد سمت چپ‬
‫به صعودی و ‪4‬عدد سمت‬
‫راست به صورت نزولی‬
‫مرتب شود‪.‬‬

‫‪2^3=8‬‬
‫‪2^4=16‬‬

‫قاعده ‪1‬‬

‫قاعده ‪1‬‬

‫روش ساخت سری ‪BITONIC‬‬

‫‪2‬‬

‫‪3‬‬

‫‪6‬‬

‫‪9‬‬

‫‪0‬‬

‫‪1‬‬

‫نزولی‬

‫صعودی‬

‫‪6 0 2 3‬‬

‫‪4 8 9 1‬‬

‫‪6 3 2 0‬‬

‫‪4 1 9 8‬‬

‫‪6 3 2 0‬‬

‫‪1 4 8 9‬‬

‫‪-----------------‬‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط نزولی‬

‫دوتا‪ ,‬دوتا‬

‫‪6 4 8 9‬‬
‫‪8 9 6 4‬‬

‫‪1 3 2 0‬‬

‫فقط نزولی‬

‫یکی ‪ ,‬یکی‬

‫‪9 8 6 4‬‬

‫صعودی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬
‫دوتا‪ ,‬دوتا‬

‫نزولی‬

‫نزولی‬
‫یکی ‪ ,‬یکی‬

‫‪1 0 2 3‬‬
‫‪0 1 2 3‬‬

‫فرمول‬

‫‪8‬‬

‫نزولی‬

‫‪4‬‬

‫یکی ‪ ,‬یکی‬

‫صعودی‬

‫دوتا‪ ,‬دوتا‬

‫صعودی‬

‫صعودی‬
‫یکی ‪ ,‬یکی‬

‫فقط صعودی‬

‫چهار تا‪ ,‬چهارتا‬

‫فقط صعودی‬

‫دوتا‪ ,‬دوتا‬

‫فقط صعودی‬

‫یکی ‪ ,‬یکی‬

‫مجموعه ی اعدادی که به سری ‪ bitonic‬تبدیل شده است وبه مرحله ی مرتب شدن رسیده‬

‫‪6‬‬

‫‪4‬‬

‫‪9‬‬

‫‪8‬‬

‫‪2‬‬

‫‪3‬‬

‫‪0‬‬

‫‪1‬‬

‫‪4‬‬

‫‪6‬‬

‫‪8‬‬

‫‪9‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫چهار تایی‬

‫‪8‬‬

‫‪9‬‬

‫‪4‬‬

‫‪6‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫دو تایی‬

‫‪9‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫یک تایی‬

‫بهترین حالت‬

‫بد ترین حالت‬

‫(‪))n(log·n‬‬

‫)‪((logn^2)/2‬‬

‫مقایسه ها‬

‫‪n/2‬‬

BITONIUC.HTML

BITONIC