بستن پنجره
فرادرس - مجموعه آموزش‌های ویدئویی  مهندسی کامپیوتر - طراحی الگوریتم - ساختمان داده
بستن پنجره     از آخرین نوشته‌ها

»    مسابقه‌ی برنامه‌نویسی آنلاین Educational Codeforces Round 20

»    مسأله‌ی Encrypted SMS

»    ویدئوهای آموزشی کلاس Programming Challenges  

بستن پنجره
وبگاه
این صفحه
اشتراک‌گذاری در LinkedIn     Cloob     اشتراک‌گذاری در Twitter
اشتراک‌گذاری در Facebook     ارسال با Telegram     Google Plus
بستن پنجره
وبگاه     این صفحه
اشتراک‌گذاری در LinkedIn     Cloob     اشتراک‌گذاری در Twitter     اشتراک‌گذاری در Facebook     ارسال با Telegram     Google Plus

کتاب الکترونیکی ساختمان داده‌ها

[برو به فهرست نوشته‌ها]
        معرفی کتاب آموزش الکترونیکی رایگان «ساختمان داده‌ها» به زبان فارسی با قابلیت دانلود

ساختمان داده‌ها یکی از پایه‌ای‌ترین بحث‌های کامپیوتری است که آشنایی با مفاهیم آن پیش‌نیاز ورود به دنیای برنامه‌نویسی و بحث‌های مهمی همچون طراحی الگوریتم‌ها و هوش مصنوعی است. به همین ترتیب، آشنایی با انواع ساختمان‌های داده‌ها برای علاقه‌مندان به شرکت در مسابقات برنامه‌نویسی نیز ضروری است.

    کتاب الکترونیکی رایگان «ساختمان داده‌ها» به زبان فارسی و تألیف مهندس فرشید شیرافکن، توسط سازمان علمی آموزشی فرادرس با هدف آموزش و آماده‌سازی جهت شرکت در آزمون‌های تحصیلی و همینطور مطالعه‌ی عموم علاقه‌مندان، در یازده فصل به شرح زیر منتشر شده است:

      

    » فصل ۱: مرتبه‌ی اجرایی

       نشان‌گذاری

       مرتبه‌ی اجرایی حلقه‌ها

ادامه ...

ظرف‌ها در ++C

[برو به فهرست نوشته‌ها]
        معرفی انواع ظرف‌ها (نگهدارنده‌ها - containers)  در زبان برنامه‌نویسی ++C

منظور از ظرف یا نگهدارنده (Container)  ساختمان داده‌ای‌ست که دسته‌ای از اطلاعات را در خود نگه می‌دارد. آنچه که این ساختمان‌ها را از هم متمایز می‌کند، نوع تخصیص حافظه، نوع دسترسی و کارایی درج و حذف عنصر در آنها است که به برخی از آنها کاربری‌های ویژه می‌دهد.

    در ادامه با انواع این نوع ساختمان داده‌ها در زبان برنامه‌نویسی ++C  نسخه‌ی C++11  آشنا می‌شویم. با توجه به گسترده بودن این بحث، جزئیات بیشتر هر کلاس را در «پیوندها برای مطالعه‌ی بیشتر» بخوانید.

    توجه: تمامی کلاس‌های بحث شده در کتابخانه‌ی قالب استاندارد (STL)  تعریف شده و در فضای نام std  قرار دارند.

  

ادامه ...

کتاب مقدمه‌ای بر الگوریتم‌ها

[برو به فهرست نوشته‌ها]
        معرفی کتاب Introduction to Algorithms ( ویراست سوم) به عنوان مرجع مباحث طراحی الگوریتم‌ها و ساختمان داده‌ها

کتاب Introduction to Algorithms (مشهور به کتاب CLRS)  از انتشارات MIT  اثر Thomas H. Cormen ، Charles E. Leiserson ، Ronald L. Rivest و Clifford Stein کتاب جامع مباحث الگوریتم‌ها و ساختمان داده‌ها است که منبع درسی بسیاری از دانشگاه‌های معتبر بوده و تا کنون بیش از سی هزار مقاله و کتاب با ارجاع به آن نگارش یافته است. مطالب این کتاب از مباحث اولیه مانند مفهوم تحلیل و طراحی الگوریتم آغاز شده و مباحث پیشرفته‌ی طراحی الگوریتم‌ها و ساختمان داده‌ها را نیز پوشش می‌دهد. به همین دلیل مطالعه و استفاده از آن به عنوان مرجع برای کلیه‌ی علاقمندان مباحث طراحی الگوریتم‌ها، ساختمان داده‌ها و همینطور شرکت‌کنندگان المپیادهای کامپیوتری و مسابقات برنامه‌نویسی توصیه می‌شود.

ادامه ...

کتاب چالش‌های برنامه‌نویسی

[برو به فهرست نوشته‌ها]
        معرفی کتاب Programming Challenges  برای علاقه‌مندان حل سوالات الگوریتمی و شرکت‌کنندگان مسابقات برنامه‌نویسی یا معرفی پیوند دانلود فایل‌های صوتی، تصویری و اسلایدهای کلاس درس نویسنده

کتاب Programming Challenges: The Programming Contest Training Manual از انتشارات معتبر Springer  کتاب مفیدی برای آمادگی شرکت در مسابقات برنامه‌نویسی است که نویسندگان آن به صورت گام به گام، خلاصه و مفید، به مفاهیم و نکات مهم برنامه‌نویسی، ساختمان داده‌ها، محاسبات ریاضی و طراحی الگوریتم‌ها اشاره داشته و با طرح مسائل متفاوت از هر موضوع، خواننده را به چالش حل مسأله کشیده‌اند.

    در این کتاب برای هر موضوع مورد بحث تعدادی سوال از وب‌سایت UVA انتخاب و مطرح شده است. به این ترتیب خواننده علاوه بر آشنایی با مفاهیم مختلف، با نحوه‌ی طراحی سوال از آن موضوع نیز مواجه می‌شود. نویسندگان کتاب در مقدمه به این نکته اشاره داشته‌اند که در انتخاب سوال‌ها علاوه بر مرتبط بودن موضوع، جنبه‌ی سرگرمی و جذابیت نیز تا حد ممکن رعایت شده است: «گاهی موضوعات جذاب علم کامپیوتر و ریاضیات در قالب داستان‌های سرگرم کننده بیان شده است. این مسأله مطالعه‌ی موارد جذاب دیگری را پیش می‌آورد.»

ادامه ...

کتاب هنر مسابقات برنامه‌نویسی

[برو به فهرست نوشته‌ها]
        معرفی کتاب Art of Programming Contest  برای علاقه‌مندان حل سوالات الگوریتمی و شرکت‌کنندگان مسابقات برنامه‌نویسی با قابلیت دانلود نسخه‌ی الکترونیکی

وب‌سایت UVa یکی از وب‌سایت‌هایی است که امکانات مفیدی را برای علاقه‌مندان حل سوالات الگوریتمی و شرکت‌کنندگان مسابقات برنامه‌نویسی (بالاخص ACM)  مهیا کرده است. در این وب‌سایت مجموعه سوالاتی در سطوح مختلف و مشابه سوالات مسابقات برنامه‌نویسی بین‌المللی در دسترس عموم قرار گرفته است که علاقه‌مندان می‌توانند پس از عضویت در سایت، پاسخ هر سوالی را که حل کرده‌اند، ارسال کنند. این جواب‌ها بررسی شده و درست یا نادرست بودن آن به کاربر ابلاغ می‌شود. می‌توان گفت نوعی شبیه‌سازی مسابقات برنامه‌نویسی رسمی انجام می‌گیرد.

    یکی از شرکت‌کنندگان مسابقات ACM  به نام احمد شمس العارفین (Ahmed Shamsul Arefin) از کشور بنگلادش - که فعالیت‌های گسترده‌ی دیگری مانند وب‌سایت www.acmsolver.org نیز دارد - اقدام به انتشار کتاب رایگانی در مورد آمادگی مسابقات برنامه‌نویسی از طریق همین وب‌سایت نموده است.

ادامه ...

درخت جستجوی دودویی

[برو به فهرست نوشته‌ها]
        آشنایی با درخت جستجوی دودویی (Binary Search Tree)  و عملیات جستجو و درج و حذف گره

درخت دودویی (Binary Tree)

    درختی است که هر گره آن دارای حداکثر دو گره فرزند است که به آنها فرزند راست و چپ گره گفته می‌شود. به همین ترتیب زیردرختی که فرزند راست در رأس آن قرار دارد زیردرخت راست و زیردرختی که فرزند چپ در رأس آن قرار دارد زیردرخت چپ گره نامیده می‌شوند.

      

    

درخت دودویی

      

درخت جستجوی دودویی (Binary Search Tree - BST)

ادامه ...

صف اولویت‌دار

[برو به فهرست نوشته‌ها]
        آشنایی با صف اولویتی (Priority Queue) ، کاربردها و نحوه‌ی پیاده‌سازی آن

صف اولویت‌دار (یا صف اولویتی - Priority Queue)  از جمله ساختمان داده‌های بسیار پرکاربرد است. در صف عادی از تکنیک FIFO -  مخفف First In First Out -  استفاده می‌شود. در این تکنیک، مثل یک صف نانوایی، داده‌ها به ترتیب ورود پشت سر هم در صف قرار می‌گیرند. بنابراین اولین داده‌ی ورودی، اولین داده‌ی خروجی نیز خواهد بود. اما در صف اولویت‌دار برای هر داده، اولویتی - نه لزوما منحصربفرد - مشخص می‌شود. صف اولویت را می‌توان به اورژانس یک بیمارستان تشبیه کرد که هر بیمار با شدت بیماری بیشتر اولویت بیشتری برای رسیدگی دارد. سیستم عامل کامپیوتر هم برای مدیریت پردازش‌ها از صف‌های اولویت‌دار استفاده می‌کند.

    به عنوان مثال، فرض کنید پردازش‌های زیر در انتظار اختصاص CPU  به خود هستند:

      

جدول درخواست پردازنده

ادامه ...

درخت Heap

[برو به فهرست نوشته‌ها]
        آشنایی با درخت Heap ( هیپ، هرم یا کپه) به عنوان یکی از ساختمان های داده پرکاربرد و بررسی روش ساخت، درج گره و حذف گره و ارائه‌ی کد نمونه به زبان برنامه‌نویسی ++C

درخت دودویی کامل

    یک درخت دودویی کامل است، هرگاه تمامی سطوح درخت به غیر از احتمالا آخرین سطح پر بوده و برگ‌های سطح آخر از سمت چپ قرار گرفته باشند.

      

    به یک مثال دقت کنید:

      

درخت هیپ یا هرم یا کپه

      

    همانطور که مشاهده می‌کنید، تمامی سطوح درخت به غیر از آخرین سطح به طور کامل پر و همه‌ی برگ‌های سطح آخر نیز در سمت چپ درخت هستند. در واقع تمامی برگ‌های درخت دودویی کامل در دو سطح آخر آن قرار دارند.

ادامه ...

لیست پیوندی

[برو به فهرست نوشته‌ها]
        بررسی مفهوم و روش پیاده‌سازی لیست پیوندی و توابع مرتبط آن به زبان برنامه‌نویسی ++C

مبحث لیست‌های پیوندی یکی از شاخه‌های ساختمان داده‌ها است که حرف اول را در آن آشنایی با اشاره‌گرها و مفهوم آن می‌زند. برای این که بتوانید در مباحث مختلف ساختمان داده‌ها از قبیل لیست‌های پیوندی، صف، پشته و به ویژه درخت موفق باشید، باید مفهوم اشاره‌گرها را خوب متوجه شده باشید.

ادامه ...

آرایه پویای دو بعدی در ++C

[برو به فهرست نوشته‌ها]
        آموزش استفاده از آرایه‌ی پویای دو بعدی در زبان ++C

آرایه‌های دو بعدی کاربردهای بسیاری از جمله جداول و ماتریس‌ها دارند. اهمیت تعریف آرایه‌های پویای دو بعدی کمتر از آرایه‌های یک بعدی نیست. آرایه‌های پویای دو بعدی یک ویژگی جالب در مقایسه با آرایه‌ی ایستا دارند. شما با تعریف پویای آرایه‌های دو بعدی می‌توانید جداول غیرمستطیلی تشکیل دهید. در واقع وقتی آرایه‌های دو بعدی را به صورت پویا ایجاد می‌کنید، این اختیار را دارید که تعداد ستون‌های هر ردیف را متفاوت انتخاب کنید.

    به قطعه کد زیر توجه کنید:

  

int **table;
cin >> n;
table = new int*[n];
int i, j;
for (i = 1 ; i <= n ; i++){
  table[i - 1] = new int[i];
  for (j = 1 ; j <= i ; j++)
    table[i - 1][j - 1] = i * j;
}
10 .
11 .
12 .
13 for (i = 0 ; i < n ; i ++)
14   delete[] table[i];
15 delete[] table;
16   

    این کد عدد n  را از کاربر گرفته و نیمه‌ی پایینی جدول ضرب n  در n  را در یک آرایه‌ی پویا ذخیره می‌کند. جدول ضرب اعداد متقارن است و نیازی به ذحیره کردن اعداد همه‌ی خانه‌های جدول نیست. در نتیجه با آرایه‌ی پویای دو بعدی حافظه‌ی مصرفی تقریبا نصف می‌شود.

    متغیر table  که به صورت table**  تعریف شده است، یک اشاره‌گر به اشاره‌گر است. کامپایلر وقتی با دستور

      

table = new int*[n];
ادامه ...