تالار گفتمان مانشت
روش تبدیل یک لیست صعودی از اعداد به max heap - نسخه‌ی قابل چاپ

روش تبدیل یک لیست صعودی از اعداد به max heap - peace2013 - 17 فروردین ۱۳۹۶ ۰۸:۳۷ ب.ظ

روش تبدیل یک لیست صعودی از اعداد به max heap

RE: روش تبدیل یک لیست صعودی از اعداد به max heap - msour44 - 18 فروردین ۱۳۹۶ ۰۲:۱۹ ق.ظ

سلام
از اخرین نود داخلی یعنی ۷ تابع heapfiy را فراخوانی می کنیم تا ریشه(شروع ارایه از ۱)
با فراخوانی heapify رو ۷ باعث تعویض ۷ با تنها فرزندش یعنی ۱۴ می شود (تا اینجا در مکان هفتم عدد ۱۴ قرار دارد)
با فراخوانی رو ۶ عدد ۱۳ با ۶ جابجا می شود
به همین ترتیب روی ۵ و ۴ فراخوانی می کنیم که ۵ با ۱۱ و ۴ با ۹ تعویض می شود
با فراخوانی روی ۳ که الان دو فرزند ۱۴(در مکان هفتم) و ۱۳ دارد ۳ با ۱۴ تعویض می شود(تا اینجا در مکان ۷ عدد ۳ قرار دارد) دوباره با فراخوانی روی ۳ باعث تعویض با ۷ می شود(دوباره ۷ در مکان ۷ قرار می گیرد)
با فراخوانی روی ۲ هم ۱۱ به مکان دوم می رود و...
با فراخوانی روی یک(ریشه) که الان دو فرزند ۱۴ و ۱۱ دارد یک با ۱۴ تعویض می شود به صورت بازگشتی تابع روی عدد۱(در مکان ۳) فراخوانی میشود که دو فرزند ۱۳ و ۷ دارد پس یک با ۱۳ تعویض می شودو بعد از ان با ۱۲
پس در مکان هفتم همان ۷ در نهایت باقی می ماند.گزینه ۳

RE: روش تبدیل یک لیست صعودی از اعداد به max heap - peace2013 - 18 فروردین ۱۳۹۶ ۰۹:۳۵ ق.ظ

ممنونم از جوابتون
(۱۸ فروردین ۱۳۹۶ ۰۲:۱۹ ق.ظ)msour44 نوشته شده توسط:  از اخرین نود داخلی یعنی ۷ تابع heapfiy را فراخوانی می کنیم تا ریشه(شروع ارایه از ۱)
همیشه باید از آخرین نود داخلی شروع کنیم؟؟

RE: روش تبدیل یک لیست صعودی از اعداد به max heap - msour44 - 18 فروردین ۱۳۹۶ ۰۲:۴۰ ب.ظ

(۱۸ فروردین ۱۳۹۶ ۰۹:۳۵ ق.ظ)peace2013 نوشته شده توسط:  ممنونم از جوابتون
(۱۸ فروردین ۱۳۹۶ ۰۲:۱۹ ق.ظ)msour44 نوشته شده توسط:  از اخرین نود داخلی یعنی ۷ تابع heapfiy را فراخوانی می کنیم تا ریشه(شروع ارایه از ۱)
همیشه باید از آخرین نود داخلی شروع کنیم؟؟
سلام
استفاده از واژه همیشه کمی خطرناک است ولی رویه معمول که در کتاب های کورمن و قدسی هم به ان اشاره شده شروع از اخرین نود داخلی است درواقع برگ ها خود خاصیت هیپ دارند.