(۲۳ بهمن ۱۳۹۱ ۱۲:۰۷ ب.ظ)arta.66 نوشته شده توسط: (23 بهمن ۱۳۹۱ ۰۱:۱۱ ق.ظ)fatima1537 نوشته شده توسط: تست ۴۹ - ۲ - بخش "الف" که شبیه عملیات روی AVL هست. بخش "ب" غلطه.البته مرتبه ساخت و درج شبیه مین هیپ هست ولی حذف کوچکترین عنصر نیست.به نظر من میشه گزینه۲
سوال ۴۹ الف مطمئنا غلطه!! حالا چرا یه مثال ساده میارم که نقض شه شما یه درخت متوازن با اعداد ۱ تا ۸ بساز!! ۵ میاد توو ریشه ۳و ۷ هم میشن فرزندان چپ و راستش!! وبه همین ترتیب!! حالا سوال من میگم تعداد اعداد ۲ تا ۸ رو واسه من پیدا کن؟؟؟چطوری با لگاریتم میشه؟؟؟ چون اعداد توو ۲تا زیردرختم هستن!! جواب گزینه ۴ هستش جفتش را نمی توان!!
با ساخت درخت AVL با یه تغییراتی فکر کنم بشه. در زمان ساخت برای هر گره تعداد فرزندان چپ و راستش را نگه می داریم. همچنین برای هر گره بازه ای را که اعداد بعدی می توانند بیایند (در زیردرخت چپ و راست آن گره) نگه می داریم. برای ریشه این بازه از منهای بینهایت تا بینهایت است. حال برای پیداکردن تعداد اعداد میان a تا b ابتدا با logn را a می یابیم. همچنین با log b را.
حال برای هر گره a و b تنها کافیست بر روی مسیری پیمایش کنیم تا ما را به جد مشترک آنها برساند. اگر a و b در دو زیردرخت راست و چپ ریشه باشند باید مسیری که ما را به ریشه می رساند که از مرتبه log است را برای دو گره پیمایش کنیم. با داشتن اطلاعات بازه و تعداد فرزندان چپ و راست برای هر گره بدون نیاز به گشتن زیردرختها می توان با مرتبه log تعداد اعداد بین a,b را محاسبه کرد.