انواع متغییر هایی که در زبان برنامه نویسی استفاده میشه شامل سایز و بازه ایی هستند که ما باید در برنامه ها به آن ها توجه کنیم که از چه نوع متغیری استفاده کنیم که هزینه کمتری داشته باشد(حافظه کمتر).
📣👨💻 @AlgorithmDesign_DataStructuer
📣👨💻 @AlgorithmDesign_DataStructuer
👍3🔥2👨💻1
هرم-بیشترین(max-heap):
یک درخت باینری کامل است که در آن مقدار هر گره داخلی بزرگتر یا مساوی با مقادیر فرزندان آن گره است. نگاشت عناصر یک پشته در یک آرایه بی اهمیت است: اگر یک گره با اندیس k ذخیره شود، فرزند سمت چپ آن در شاخص 2k + 1 و فرزند سمت راست آن در شاخص 2k + 2 ذخیره می شود.
📣👨💻 @AlgorithmDesign_DataStructuer
یک درخت باینری کامل است که در آن مقدار هر گره داخلی بزرگتر یا مساوی با مقادیر فرزندان آن گره است. نگاشت عناصر یک پشته در یک آرایه بی اهمیت است: اگر یک گره با اندیس k ذخیره شود، فرزند سمت چپ آن در شاخص 2k + 1 و فرزند سمت راست آن در شاخص 2k + 2 ذخیره می شود.
📣👨💻 @AlgorithmDesign_DataStructuer
👌4🤩2💯1👨💻1
تعداد برگ های تولید شده در یک درخت heap که n عنصر دارد چه قدر است؟
Anonymous Quiz
20%
کران پایینn/2
34%
کران بالایn/2
34%
کران پایین log n
12%
کران بالای log n
👍5👨💻3
چند تعریف و نکته در مورد گراف
در یک گراف , یک مجوعه از راس ها و یک مجوعه از یال ها داریم که میتوان گفت هر یال 2 راس را به هم متصل می کند.
گراف ساده:
گراف بدون جهت می باشد.
کوتاه ترین مسیر بین دو راس:
این به این معنی می باشد که مجوعه وزن های مورد استفاده بایستی به حداقل مسیر برسانیم.
گراف وزن دار:
هر یال داری وزنی می باشد.
گراف جهت دار:
هر یال علاوه بر وزن جهت نیز دارد که این به معنی می باشد که مشخص می کند که از چه راسی به چه راسی میتوان حرکت کرد.
توجه:
به این نکته دقت کنید که گراف یک درخت نمی باشد زیرا در آن دور(حلقه) وجود ندارد ولی اگر دقت کرده باشید در گراف ها نیز دور وجود دارید.
📣👨💻 @AlgorithmDesign_DataStructuer
در یک گراف , یک مجوعه از راس ها و یک مجوعه از یال ها داریم که میتوان گفت هر یال 2 راس را به هم متصل می کند.
گراف ساده:
گراف بدون جهت می باشد.
کوتاه ترین مسیر بین دو راس:
این به این معنی می باشد که مجوعه وزن های مورد استفاده بایستی به حداقل مسیر برسانیم.
گراف وزن دار:
هر یال داری وزنی می باشد.
گراف جهت دار:
هر یال علاوه بر وزن جهت نیز دارد که این به معنی می باشد که مشخص می کند که از چه راسی به چه راسی میتوان حرکت کرد.
توجه:
به این نکته دقت کنید که گراف یک درخت نمی باشد زیرا در آن دور(حلقه) وجود ندارد ولی اگر دقت کرده باشید در گراف ها نیز دور وجود دارید.
📣👨💻 @AlgorithmDesign_DataStructuer
👍2👏2👨💻1
الگوریتم Greedy (حریصانه)
الگوریتم Greedy، یک الگوریتم ساده و شهودی است که در مسائل بهینه سازی استفاده می شود. این الگوریتم در هر مرحله، انتخاب بهینه را انجام می دهد تا بتواند راه بهینه برای حل کل مسئله را بیابد. در سایت های فارسی، نام این الگوریتم را حریصانه ترجمه کرده اند ولی من ترجیح می دهم با همان Greedy ادامه بدهم. الگوریتمهای Greedy در برخی مشکلات کاملاً موفق هستند، مانند کدگذاری هافمن (Huffman encoding) که برای فشردهسازی دادهها استفاده میشود، یا الگوریتم Dijkstra که برای یافتن کوتاهترین مسیر از طریق یک گراف استفاده میشود. با این حال، در بسیاری از مشکلات، یک استراتژی Greedy راه حل بهینه را پیدا نمی کند.
الگوریتم Greedy دارای 5 جز است:
یک مجموعه از کاندیداهایی که ما سعی می کنیم از بین آنها راه حلی را پیدا کنیم.
یک تابع انتخاب که به انتخاب بهترین کاندیدای ممکن کمک می کند.
یک تابع امکان سنجی که به تصمیم گیری در مورد استفاده از کاندیدای مورد نظر برای یافتن راه حل کمک می کند.
یک تابع هدف که به یک راه حل ممکن یا به یک راه حل جزئی مقدار می دهد.
تابع راه حل که می گوید چه زمانی راه حلی برای مشکل پیدا کرده ایم.
📣👨💻 @AlgorithmDesign_DataStructuer
الگوریتم Greedy، یک الگوریتم ساده و شهودی است که در مسائل بهینه سازی استفاده می شود. این الگوریتم در هر مرحله، انتخاب بهینه را انجام می دهد تا بتواند راه بهینه برای حل کل مسئله را بیابد. در سایت های فارسی، نام این الگوریتم را حریصانه ترجمه کرده اند ولی من ترجیح می دهم با همان Greedy ادامه بدهم. الگوریتمهای Greedy در برخی مشکلات کاملاً موفق هستند، مانند کدگذاری هافمن (Huffman encoding) که برای فشردهسازی دادهها استفاده میشود، یا الگوریتم Dijkstra که برای یافتن کوتاهترین مسیر از طریق یک گراف استفاده میشود. با این حال، در بسیاری از مشکلات، یک استراتژی Greedy راه حل بهینه را پیدا نمی کند.
الگوریتم Greedy دارای 5 جز است:
یک مجموعه از کاندیداهایی که ما سعی می کنیم از بین آنها راه حلی را پیدا کنیم.
یک تابع انتخاب که به انتخاب بهترین کاندیدای ممکن کمک می کند.
یک تابع امکان سنجی که به تصمیم گیری در مورد استفاده از کاندیدای مورد نظر برای یافتن راه حل کمک می کند.
یک تابع هدف که به یک راه حل ممکن یا به یک راه حل جزئی مقدار می دهد.
تابع راه حل که می گوید چه زمانی راه حلی برای مشکل پیدا کرده ایم.
📣👨💻 @AlgorithmDesign_DataStructuer
👍5👨💻2💯1
حداکثر تعداد گره در یک درخت دودویی با ارتفاع h برابر است با :
Anonymous Quiz
39%
(2^h+1)+1
36%
2^h
6%
2h
19%
هیچ کدام
👍4👨💻2🔥1
پیدا کردن آدرس در آرایه دو بعدی و هم چنین در آرایه سه بعدی که این فرمول را می توان به آرایه چند بعدی هم تعمیم داد.
📣👨💻 @AlgorithmDesign_DataStructuer
📣👨💻 @AlgorithmDesign_DataStructuer
👍5🤩2👨💻2
یکی از روش های پیمایش درخت پیماش اول عمث یا DFSمی باشد.
اين روش مبتني بر stack است. پيمايش در اين روش همواره از ريشه شروع مي شود و سپس با توجه به معيار اولويتي تعريف شده يك عنصر مشاهده نشده متصل به گره جاري را انتخاب ميكنيم. اگر اين عنصر وجود نداشـت بـه آخـرين عنصـر مشـاهده شـده بازگشـت مـي كنـيم و الگوريتم را از اين گره دنبال مي كنيم.
📣👨💻 @AlgorithmDesign_DataStructuer
اين روش مبتني بر stack است. پيمايش در اين روش همواره از ريشه شروع مي شود و سپس با توجه به معيار اولويتي تعريف شده يك عنصر مشاهده نشده متصل به گره جاري را انتخاب ميكنيم. اگر اين عنصر وجود نداشـت بـه آخـرين عنصـر مشـاهده شـده بازگشـت مـي كنـيم و الگوريتم را از اين گره دنبال مي كنيم.
📣👨💻 @AlgorithmDesign_DataStructuer
👍3👨💻1
👍7🤔6👨💻1
در يك درخت جستجوي دودويي با n گره، تعداد مقايسه براي جستجوي يك، عنصر حداكثر برابر است بـا :
Anonymous Quiz
14%
O(n/2)
36%
O(n)
14%
O(n^2)
37%
O(nlogn)
👍6👨💻1
سلام دوستان عزیز 😃 امیدوارم این مطلب رو بخونی یکم بهت انگیزه بهت و بدونی که همه زندگی توی درس خلاصه نمیشه.
زندگی تو توی نمره هایی که میگیری خلاصه نمیشه ، توی درسای محدودی که جلوی روت هست ، آزمونا و امتحانا خلاصه نمیشه ؛ پس اگه خراب کردی چون حوصلهی درس خوندن نداشتی یا نفهمیدی یا وقت برات کم اومد یا علاقه نداشتی یا بدشانسی آوردی خم به ابروت نیار و غصه نخور . چند سال دیگه این عددا حتی یادت نمیاد .
توام مثل همهی آدمای توی این دنیا یه استعداد پنهان داری که دیر یا زود کشفش میکنی و سبز میشی . خودتو با معیارایی که بقیه تعیین کردن یا جلوی روت گذاشتن ، با کتابای محدودی که حتی یه هزارم دنیا ام تشکیل نمیدن نسنج . موفقیتو توی این چیزا خلاصه نکن و حرفای کلیشهای بقیه رو گوش نده .
دیر یا زود رشد میکنی و توی زمینهی خودت بر اساس معیارای خودت و با علاقه و استعداد و تلاش خودت موفق میشی . شک نداشته باش پس قوی باش و استعدادتو کشف کن و برو به سمتش امیدوارم براتون این مطلب مفید بوده باشه😉
#انگیزشی
📣👨💻 @AlgorithmDesign_DataStructuer
زندگی تو توی نمره هایی که میگیری خلاصه نمیشه ، توی درسای محدودی که جلوی روت هست ، آزمونا و امتحانا خلاصه نمیشه ؛ پس اگه خراب کردی چون حوصلهی درس خوندن نداشتی یا نفهمیدی یا وقت برات کم اومد یا علاقه نداشتی یا بدشانسی آوردی خم به ابروت نیار و غصه نخور . چند سال دیگه این عددا حتی یادت نمیاد .
توام مثل همهی آدمای توی این دنیا یه استعداد پنهان داری که دیر یا زود کشفش میکنی و سبز میشی . خودتو با معیارایی که بقیه تعیین کردن یا جلوی روت گذاشتن ، با کتابای محدودی که حتی یه هزارم دنیا ام تشکیل نمیدن نسنج . موفقیتو توی این چیزا خلاصه نکن و حرفای کلیشهای بقیه رو گوش نده .
دیر یا زود رشد میکنی و توی زمینهی خودت بر اساس معیارای خودت و با علاقه و استعداد و تلاش خودت موفق میشی . شک نداشته باش پس قوی باش و استعدادتو کشف کن و برو به سمتش امیدوارم براتون این مطلب مفید بوده باشه😉
#انگیزشی
📣👨💻 @AlgorithmDesign_DataStructuer
👍19🎉3🤩3👏2🙏2
در مرتب سازی QuickSort پیچیدگی زمانی در بدترین پیچیدگی آن چه قدر است ؟
Anonymous Quiz
12%
O(n)
50%
O(n^2)
28%
O(nlogn)
10%
O(logn)
👍7👨💻4
یک الگوریتم مرتب سازی مقایسه ای است که با استفاده از تقسیم و حل، آرایه را به صورت صعودی (Ascending) یا نزولی (Descending) مرتب می کند.
ابتدا، تابع partition برای پیدا کردن جایگاه تقسیم آرایه به دو قسمت، چپ و راست، با استفاده از pivot (عنصر اصلی) پایین و بالاتر از pivot تعریف شده است. در این تابع، i به عنوان نشانگر عنصر بزرگتر و j به عنوان نشانگر عنصر کوچکتر در آرایه تعریف شده است. در هنگام حلقه for، همه عناصر با pivot مقایسه شده و در صورت بودن عضو کوچکتر از pivot، جابجایی با i صورت میگیرد. در نهایت، pivot با عنصر بزرگتری که توسط i نشان داده شده است، جابجا می شود و جایگاه تقسیم برگشت داده می شود.
در تابع quickSort، ابتدا pivot پیدا می شود و سپس آرایه به دو قسمت تقسیم می شود. سپس، هر قسمت به صورت بازگشتی با استفاده از quickSort مرتب می شود. در نهایت، آرایه به صورت صعودی مرتب شده و چاپ میشود.
پیچیدگی زمانی این الگوریتم در بدترین , متوسط و بهترین حالت به صورت زیر می باشد:
Worst: O(n2)
Average: O(n*log n)
Best: O(n*log n)
📣👨💻 @AlgorithmDesign_DataStructuer
ابتدا، تابع partition برای پیدا کردن جایگاه تقسیم آرایه به دو قسمت، چپ و راست، با استفاده از pivot (عنصر اصلی) پایین و بالاتر از pivot تعریف شده است. در این تابع، i به عنوان نشانگر عنصر بزرگتر و j به عنوان نشانگر عنصر کوچکتر در آرایه تعریف شده است. در هنگام حلقه for، همه عناصر با pivot مقایسه شده و در صورت بودن عضو کوچکتر از pivot، جابجایی با i صورت میگیرد. در نهایت، pivot با عنصر بزرگتری که توسط i نشان داده شده است، جابجا می شود و جایگاه تقسیم برگشت داده می شود.
در تابع quickSort، ابتدا pivot پیدا می شود و سپس آرایه به دو قسمت تقسیم می شود. سپس، هر قسمت به صورت بازگشتی با استفاده از quickSort مرتب می شود. در نهایت، آرایه به صورت صعودی مرتب شده و چاپ میشود.
پیچیدگی زمانی این الگوریتم در بدترین , متوسط و بهترین حالت به صورت زیر می باشد:
Worst: O(n2)
Average: O(n*log n)
Best: O(n*log n)
📣👨💻 @AlgorithmDesign_DataStructuer
👍2👌2👨💻2
👍6🎉2👨💻1
کدام یک از گزینه های زیر تقریبا برابر است با عبارت زیر:
log n!
log n!
Anonymous Quiz
49%
O(nlogn)
24%
O(n^2)
9%
O(n)
18%
O(logn)
👍5👨💻3🤔2🔥1