مرتبسازی درختی
مرتبسازی درختی یک الگوریتم مرتبسازی میباشد که یک درخت جستجوی دودویی از کلیدهایی که باید مرتب شوند میسازد و آنگاه با پیمایش میان ترتیب درخت کلیدهای مرتب شده را بدست میآوریم.
رده | الگوریتم مرتبسازی |
---|---|
ساختمان داده | آرایه |
کارایی بدترین حالت | |
کارایی بهترین حالت | |
کارایی متوسط | |
پیچیدگی فضایی |
زمینه کاربرد
معمولاً هنگامی از مرتبسازی درختی استفاده میشود که هدف مرتبسازی یک رشته ورودی از یک فایل باشد. در اغلب الگوریتمهای مرتبسازی دادهها باید در یک ساختمان داده موقت ذخیره شوند و سپس عملیات مرتبسازی بر روی آن انجام شود. در حالیکه در مرتبسازی درختی بارگذاری یک عنصر در ساختمان داده بر مرتبسازی آن است.
تحلیل کارایی
درج یک عنصر در یک درخت جستجوی دودویی به طور میانگین از مرتبه((O(log(n است. بنابراین ساخت یک درخت جستجوی دودویی با n عضو از مرتبه((O(n log(n میباشد که یک درخت جستجو میسازدو همچنین یک مرتبسازی بهینه است.
بدترین حالت
اضافه کردن ک عنصر جدید به یک درخت جستجوی دودویی از(O(n زمان میبرد. یعنی هنگامی که درخت شبیه به یک لیست پیوندی ساده میشود باعث میشود که در بدترین حالت این الگوریتم از مرتبه (O(n زمان میبرد.
البته با استفاده از گسترشهایی از درخت دودویی جستجو میتوان رفتار بدترین حالت را بهبود داد و در بدترین حالت هم از((O(n log(n باشد. پس مرتبسازی درختی به لحاظ تئوری هم بهینه است.
غالب پردازش
غالب پردازش در یک مرتبسازی درختی درج در درخت دودویی است با فرض اینکه زمان بازیابی اطلاعات (O(n باشد.
برنامه نویسی
در زیر تکه برنامه سی پلاس پلاس را آوردهایم.
multiset کلاسی در سی پلاس پلاس میباشد که در حقیقت یک درخت جستجوی دودویی خاص میباشد که این امکان را فراهم میسازدکه در بدترین حالت هم درج بهینه در این داده ساختار از ((O(log(n داشته باشیم.
#include <set> // for multiset
#include <algorithm> // for copy
#include <iterator> // for iterator_traits
template <typename Iterator>
void binary_tree_sort(Iterator begin, Iterator end)
{
// C++'s multiset class is a self-balancing binary search tree that allows duplicates
// Add each element in input range to the tree
std::multiset<typename std::iterator_traits<Iterator>::value_type> tree(begin, end);
// Read elements in ascending order by simply traversing the tree.
std::copy(tree.begin(), tree.end(), begin);
}
پانویس
- ↑ داده ساختارها و مبانی الگوریتم ها-دکتر محمد قدسی-۱۳۸۸ ص۲۲۱
منابع
- قدسی، محمد. داده ساختارها و مبانی الگوریتم ها. موسسه فرهنگی فاطمی: نشر، ۱۳۸۸.
- کتاب CLRS