HIRIN AMIRA یکی از الگوریتم های مرتب سازی موازی است . مرتب سازی بایتونیک یک الگوریتم مرتب سازی برای ماشین های موازی است . الگوریتم بایتونیک از.
Download ReportTranscript 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; i compare(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; i compare(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; i compare(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; i compare(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; i compare(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; i compare(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; i compare(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; i compare(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; i compare(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; i compare(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; i compare(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; i compare(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
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; i
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; i
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; i
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; i
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; i
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; i
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; i
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; i
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; i
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; i
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; i
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; i
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