طراحی سایت و برنامه نویسی

آموزش طراحی سایت و برنامه نویسی

طراحی سایت و برنامه نویسی

آموزش طراحی سایت و برنامه نویسی

الکتریسیته ساکن — به زبان ساده

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

صاعقه

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

الکتریسیته ساکن و جاری

هنگامی که یک بادکنک را روی پیراهن خود مالش می‌‌دهیم، در واقع الکتریسیته ساکن ایجاد می‌‌کنیم و به همین دلیل است که بادکنک به پیراهن می‌‌چسبد. مالش، الکترون‌‌ها را از روی پیراهن – که به صورت مثبت باردار می‌‌شود – به روی لاستیک بادکنک – که به صورت منفی باردار می‌‌شود – انتقال می‌‌دهد. بارهای مخالف باعث می‌‌شود که این دو شیء به هم بچسبند.

الکتریسیته ساکن

در قرن نوزدهم میلادی، پیشگامانی همچون «آلساندرو ولتا» (Alessandro Volta)، «مایکل فارادی» (Michael Faraday)، «جوزف هنری» (Joseph Henry) و «توماس ادیسون» (Thomas Alva Edison)، به اسرار الکتریسیته، چگونگی تولید و کاربردهای آن پی بردند. پیش از آن، الکتریسیته بیشتر یک موضوع عجیب بود. در آن روزها، مردم با استفاده از هیزم یا اجاق‌‌های زغال سنگ غذا می‌‌پختند و خانه‌‌های خود را گرم می‌‌کردند و اتاق‌‌هایشان را با شمع یا چراغ‌‌های نفتی روشن می‌‌کردند و وسایلی مثل رادیو یا تلویزیون، تلفن همراه یا کامپیوتر وجود نداشت.

«الکتریسیته مدرن» که ما آن را الکتریسیته جاری (یا جریان الکتریکی) می‌‌نامیم، نیروی هر چیزی از تلفن همراه جیبی شما گرفته تا مترویی که برای رفتن به مدرسه یا سر کار سوار آن می‌‌شوید را تأمین می‌‌کند. الکتریسیته جاری، یک انرژی‌‌‌ است که در طول یک سیم فلزی از جایی که تولید می‌‌شود (مثل یک نیروگاه برق بسیار بزرگ یا یک باتری بسیار کوچک) به جایی که مصرف می‌‌شود (اغلب یک موتور الکتریکی، المنت حرارتی یا لامپ) حرکت می‌‌کند. در حقیقت، الکتریسیته جاری با حمل انرژی از جایی به جای دیگر همیشه در حال حرکت است.

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

الکتریسیته ساکن

پیش از قرن نوزدهم، مردم فقط الکتریسیته ساکن را می‌‌شناختند. یونانیان باستان دریافتند که مالش اشیاء به همدیگر می‌‌تواند به راحتی بار الکتریکی ساکن (انبوهی از الکتریسیته ساکن) ایجاد کند، اما تصور نمی‌‌کردند که همین انرژی می‌‌تواند برای تولید نور یا دستگاه‌‌های برقی مورد استفاده قرار گیرد. یکی از افرادی که به ایجاد ارتباط بین الکتریسیته ساکن و الکتریسیته جاری کمک کرد، سیاستمدار، ناشر و دانشمند آمریکایی، «بنجامین فرانکلین» (Benjamin Franklin) بود.

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

انرژی پتانسیل و جنبشی

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

الکتریسیته ساکن

 الکتریسیته ساکن چگونه ایجاد می‌شود؟

ما نیز مانند یونانیان باستان، تصور می‌‌کنیم که الکتریسیته ساکن از مالش اشیاء به یکدیگر به وجود می‌‌آید. برای مثال، حتماً تا به حال تجربه کرده‌‌اید که وقتی روی یک فرش نایلونی راه می‌‌روید و پس از آن، یک دستگیره فلزی را لمس می‌‌کنید، با یک شوک الکتریکی کوچک مواجه می‌‌شوید. این اتفاق به این دلیل روی می‌‌دهد که هنگام راه رفتن روی فرش، بدن شما بار ساکن جمع می‌‌کند و با لمس دستگیره این بار تخلیه می‌‌شود. سؤالی که در اینجا به وجود می‌‌آید این است که یک شیء مثلاً یک بادکنک را روی کدام قسمت لباس مالش دهیم تا به آن بچسبد؟ ممکن است پاسخ شما این باشد که الکتریسیته ساکن به نوعی مرتبط با اصطکاک است که همان عمل مالش دادن شدید چیزی است که انبوهی از انرژی الکتریکی تولید می‌‌کند (درست به همان روشی که اصطکاک می‌‌تواند گرما و حتی آتش تولید کند). اما پاسخ صحیح چیز دیگری است.

اثر الکتریکی مالشی

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

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

الکتریسیته ساکن

ٰتصویر بالا اثر الکتریکی مالشی را نشان می‌دهد. در (1)، ابونیت (لاستیک سیاه و سخت که در اینجا به صورت یک میله سیاه نشان داده شده است) و پشم (که به رنگ خاکستری نشان داده شده است) در حالت عادی هیچ گونه بار الکتریکی ندارند. در (2) آن‌ها را در تماس با یکدیگر قرار می‌‌دهیم. ابونیت، الکترون‌‌های پشم را جذب می‌‌کند. و در نهایت، در (3) آن‌ها را از یکدیگر جدا می‌‌کنیم. الکترون‌ها پشم را رها کرده و روی ابونیت باقی می‌‌مانند که باعث می‌‌شود ابونیت به صورت منفی و پشم به صورت مثبت باردار شود. مالش این دو جسم به یکدیگر، تماس بین آن‌ها افزایش داده و احتمال انتقال الکترون‌ها از پشم به ابونیت را بیشتر می‌‌کند. بار منفی روی ابونیت دقیقاً هم‌‌اندازه بار مثبت روی پشم است؛ به عبارت دیگر، هیچ بار خالصی ایجاد نمی‌‌شود.

مجموعه الکتریکی مالشی

اگر تولید الکتریسیته ساکن را با مواد گوناگون آزمایش کنیم، خواهیم دید که هنگام مالش دادن، بعضی از آن‌ها بار مثبت و بعضی دیگر بار منفی به دست می‌‌آورند. برخی مواد نیز بار بیشتری نسبت به سایر مواد جذب خواهند کرد. بنابراین، می‌‌توان مواد را بر اساس بار به دست آمده، به ترتیب از مثبت تا منفی دسته‌‌بندی کرد. لازم به ذکر است که ترتیب این فهرست به هر دلیلی ممکن است تغییر کند. برای مثال، نوع تغییر مواد تشکیل‌‌دهنده در لاستیک می‌‌تواند ماهیت آن را تغییر دهد.

مادهبار الکتریکی
هوا+
پوست+
چرم+
پنبه نسوز+
شیشه+
میکا+
کوارتز+
نایلون+
پشم+
مو+
سرب+
ابریشم+
آلومینیوم+
کاغذ0
پنبه0
فولاد0
چوب0
کهربا
لاستیک
لاستیک سخت
نیکل
مس
برنج
نقره
طلا
پلاتینیوم
پلی استر
پلی استیرن
نئوپرین
ساران (فیلم چسبان)
پلی اتیلن
پلی پروپیلن
پلی وینیل کلراید (PVC)
سلنیم
تفلون
لاستیک سیلیکون
ابونیت (لاستیک خیلی سخت)

این فهرست، مجموعه الکتریکی مالشی نامیده می‌‌شود. اگر در این مجموعه دو ماده‌‌ای را به هم مالش دهیم که در جدول فاصله زیادی از هم دارند، الکتریسیته ساکن بیشتری را انباشته خواهند کرد، اما در صورتی که این دو ماده خیلی به هم نزدیک باشند، به سختی می‌‌توان آن‌ها را وادار به تجمع هر باری کرد؛ حتی اگر به شدت به یکدیگر مالش داده شوند. این مسئله تأیید می‌‌کند که الکتریسیته ساکن صرفاً ناشی از مالش دادن اشیاء نیست، بلکه به ماهیت موادی بر می‌گردد که ما آن‌ها را در تماس با یکدیگر قرار می‌‌دهیم.

کاربرد الکتریسیته ساکن

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

نیروگاه

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

منبع: فرادرس

الگوریتم دایجسترا (Dijkstra) — از صفر تا صد

«الگوریتم دایجسترا» (Dijkstra’s Algorithm) یا «اولین الگوریتم کوتاه‌ترین مسیر دایجسترا» (Dijkstra’s Shortest Path First Algorithm | SPF) (البته تلفظ صحیح این نام، الگوریتم دایجسترا است که ب صورت متداول به آن دایجسترا گفته می‌شود)، الگوریتمی است که برای پیدا کردن کوتاه‌ترین مسیر بین دو «گره» (Node | راس) در گراف به کار می‌رود. این گراف، ممکن است نشان‌گر شبکه جاده‌ها یا موارد دیگری باشد. الگوریتم دایجسترا در سال 1۹۵۶، توسط دانشمند کامپیوتری با نام «ادسخر ویبه دیکسترا» (Edsger Wybe Dijkstra) مطرح و سه سال بعد، منتشر شد. الگوریتم دایجسترا دارای انواع گوناگونی است. الگوریتم اصلی، کوتاه‌ترین مسیر بین دو گره را پیدا می‌کند؛ اما نوع متداول‌تر این الگوریتم، یک گره یکتا را به عنوان گره مبدا (آغازین) در نظر می‌گیرد و کوتاه‌ترین مسیر از مبدا به دیگر گره‌ها در گراف را با ساختن درخت کوتاه‌ترین مسیر پیدا می‌کند.

برای یک گره مبدا داده شده، الگوریتم، کوتاه‌ترین مسیر بین آن گره و دیگر گره‌ها را پیدا می‌کند. همچنین، الگوریتم دایجسترا برای پیدا کردن کوتاه‌ترین مسیر از یک گره یکتا به گره مقصد یکتای دیگری به کار می‌رود؛ برای انجام این کار، الگوریتم هنگامی که کوتاه‌ترین مسیر از مبدا به مقصد را پیدا کند، متوقف می‌شود. برای مثال، اگر گره‌های گراف نشان‌گر شهرها و یال‌ها هزینه سفر بین شهرهایی باشند که با جاده‌های مستقیم به هم متصل شده‌اند، از الگوریتم دایجسترا می‌توان برای پیدا کردن کوتاه‌ترین راه بین یک شهر و همه شهرهای دیگر استفاده کرد. یکی از کاربردهای اصلی الگوریتم دایجسترا، پروتکل‌های مسیریابی شبکه است که از جمله آن‌ها می‌توان به IS-IS (سیستم میانی به سیستم میانی | Intermediate System to Intermediate System) و «ابتدا کوتاه‌ترین مسیر باز» (Open Shortest Path First | OSPF) اشاره کرد.

از الگوریتم دایجسترا، به عنوان یک زیر روال نیز در برخی از دیگر الگوریتم‌ها مانند «الگوریتم جانسون» (Johnson’s Algorithm) استفاده می‌شود. الگوریتم دایجسترا از برچسب‌هایی استفاده می‌کند که اعداد صحیح یا حقیقی مثبت هستند. جالب توجه است که الگوریتم دایجسترا می‌تواند برای استفاده از برچسب‌های تعریف شده به هر شکلی، تعمیم پیدا کند. چنین تعمیمی، «تعمیم الگوریتم کوتاه‌ترین مسیر دایجسترا» نامیده می‌شود.

الگوریتم دایجسترا (Dijkstra) برای یافتن کوتاه‌ترین مسیر

فرض می‌شود که یک گراف به همراه یک راس مبدا داده شده و هدف پیدا کردن کوتاه‌ترین مسیر به همه راس‌های موجود در گراف مذکور است. الگوریتم دایجسترا شباهت زیادی به «الگوریتم پریم» (Prim’s Algorithm) برای «درخت پوشای کمینه» (Minimum Spanning Tree) دارد. در الگوریتم دایجسترا نیز درخت کوتاه‌ترین مسیر با استفاده از مبدا داده شده به عنوان ریشه، ساخته می‌شود. در هر مرحله از الگوریتم، راسی پیدا می‌شود که در مجموعه دیگر (مجموعه راس‌های در نظر گرفته نشده) قرار دارد و دارای کمترین فاصله از ریشه است. در ادامه، گام‌های مورد استفاده در الگوریتم دایجسترا به منظور یافتن کوتاه‌ترین مسیر از یک راس مبدا مجرد به دیگر راس‌ها در گراف داده شده به صورت مشروح بیان شده‌اند.

  1. ساخت مجموعه sptSet (مجموعه درخت کوتاه‌ترین مسیر | Shortest Path Tree Set) که به دنبال راس‌های قرار گرفته در درخت کوتاه‌ترین مسیر می‌گردد؛ یعنی، راسی که حداقل فاصله آن از مبدا محاسبه و نهایی شده است. به طور مقدماتی، این مجموعه خالی است.
  2. تخصیص یک مقدار فاصله به همه راس‌ها در گراف ورودی. مقداردهی اولیه همه مقادیر فاصله‌ها به عنوان INFINITE. تخصیص مقدار فاصله صفر به راس مبدا که موجب می‌شود این راس در ابتدا انتخاب شود.
  3. تا هنگامی که sptSet شامل همه راس‌ها نشده است، اقدامات زیر انجام می‌شود:
    • راس u انتخاب می‌شود که در sptSet نیست و دارای حداقل مقدار فاصله است.
    • u در sptSet قرار می‌گیرد.
    • مقدار فاصله از همه راس‌های مجاور u به روز رسانی می‌شود. برای به روز رسانی مقادیر فاصله، در همه راس‌های مجاور تکرار انجام می‌شود. برای هر راس مجاور v، اگر مجموع فاصله u (از کد منبع) و وزن یال u-v کمتر از مقدار فاصله v باشد، مقدار فاصله از v به روز رسانی می‌شود.

برای درک بهتر موضوع، مثال زیر مورد بررسی قرار خواهد گرفت.

الگوریتم دایجسترا (Dijkstra)

مجموعه sptSet در ابتدا خالی است و فاصله تخصیص پیدا کرده به راس‌ها برابر با {0, INF, INF, INF, INF, INF, INF, INF} هستند که در آن INF نشان‌گر بی‌نهایت (Infinite) است. اکنون، باید راسی که دارای کم‌ترین مقدار فاصله است انتخاب شود. راس ۰ انتخاب می‌شود و در sptSet قرار می‌گیرد. بنابراین، sptSet به صورت {0} می‌شود. پس از قرار دادن ۰ در sptSet، مقدار فاصله‌ها از راس‌های مجاور آن به روز رسانی می‌شوند. راس‌های مجاور ۰، راس‌های 1 و ۷ هستند. مقدار فاصله برای 1 و ۷، برابر با 4 و ۸ است. زیرگراف زیر، راس‌ها و مقدار فاصله آن‌ها را نشان می‌دهد. در این گراف، تنها راس‌هایی با مقدار فاصله متناهی نشان داده شده‌اند. راس‌های موجود در SPT به رنگ سبز نمایش داده شده‌اند.

الگوریتم دایجسترا (Dijkstra)

راسی که حداقل فاصله را از مبدا دارد و تاکنون انتخاب نشده است، یعنی در sptSET قرار ندارد، انتخاب می‌شود. راس 1 انتخاب و به sptSet اضافه می‌شود. بنابراین، اکنون sptSet به صورت {1 ,۰} خواهد بود. مقدار فاصله راس‌های مجاور 1 به روز رسانی می‌شود. مقدار فاصله از راس 2 برابر با 12 خواهد بود.

الگوریتم دایجسترا (Dijkstra)

راسی با کمترین مقدار فاصله که در حال حاضر در SPT قرار ندارد باید انتخاب شود. راس ۷ انتخاب می‌شود. بنابراین، sptSet اکنون به صورت {۷ , 1 , ۰} خواهد بود. مقدار فاصله از راس‌های مجاور ۷ محاسبه می‌شود. مقدار فاصله از راس ۶ و ۸ متناهی است (به ترتیب، 1۵ و ۹).

الگوریتم دایجسترا (Dijkstra)

راسی با حداقل مقدار فاصله که در SPT نیز قرار ندارد باید انتخاب شود. راس ۶ انتخاب می‌شود. بنابراین، sptSet اکنون برابر با {۶ ,۷ ,1 ,۰} است. مقدار فاصله‌ها از راس‌های مجاور ۶ باید به روز رسانی شود. مقدار فاصله برای راس‌های ۵ و ۸ به روز رسانی می‌شود.

الگوریتم دایجسترا (Dijkstra)

مراحل بیان شده تا جایی تکرار می‌شوند که sptSet شامل همه راس‌های گراف داده شده نباشد. در نهایت، درخت کوتاه‌ترین مسیر (SPT) زیر حاصل می‌شود.

الگوریتم دایجسترا (Dijkstra)

برای پیاده‌سازی الگوریتم بالا، از آرایه بولین []sptSet برای ارائه مجموعه‌ای از راس‌های قرار گرفته در SPT استفاده می‌شود. اگر مقدار [sptSet[v «درست» (True) باشد، راس v در SPT قرار می‌گیرد، در غیر این صورت، یعنی اگر [sptSet[v «غلط» (False) باشد، راس v در SPT قرار نمی‌گیرد. آرایه []dist برای ذخیره‌سازی کوتاه‌ترین مقدار فاصله از همه راس‌ها مورد استفاده قرار می‌گیرد.

کد الگوریتم دایجسترا در ++C

کد الگوریتم دایجسترا در جاوا

کد الگوریتم دایجسترا در #C

کد الگوریتم دایجسترا در پایتون

منبع: فرادرس


    مرتب سازی درجی (Insertion Sort) — به زبان ساده

    «مرتب سازی درجی» (Insertion Sort) یک الگوریتم مرتب‌سازی ساده است که روش عملکرد آن مشابه روشی است که افراد کارت‌های بازی را در دست خود مرتب می‌کنند. در این مطلب، به الگوریتم مرتب سازی درجی پرداخته شده و سپس، پیاده‌سازی آن در زبان‌های برنامه‌نویسی گوناگون، شامل «سی‌پلاس‌پلاس» (++C ،(C، «جاوا» (Java)، «پایتون» (Python)، «سی‌شارپ» (#C) و «پی‌اچ‌پی» (PHP) انجام شده است.

    الگوریتم مرتب سازی درجی

    //مرتب‌سازی آرایه []arr با سایز n

    1. (insertionSort(arr, n
    2. از  i = 1 تا n-1 حلقه بزن
      • عنصر [arr[i را انتخاب کن و آن را در توالی مرتب شده [arr[0…i-1 درج کن

    مثال اول از مرتب سازی درجی

    مثال دوم از مرتب سازی درجی

    12, 11, 13, 5, 6

    از i = 1 (دومین عنصر از آرایه) تا 4 (آخرین عنصر از آرایه) حلقه بزن.

    i = 1. به دلیل آنکه 11 از 12 کوچک‌تر است، 12 را جا به جا کن و 11 را پیش از 12 درج کن.

    i = 2. عدد 13 در جای خود باقی می‌ماند، زیرا همه عناصر [A[0..I-1 کوچک‌تر از 13 هستند.

    11, 12, 13, 5, 6

    i = 3. عدد ۵ به آغاز منتقل می‌شود و همه عناصر دیگر، از 11 تا 13 یک خانه از خانه کنونی خود رو  به جلو، جا به جا می‌شوند.

    5, 11, 12, 13, 6

    i = 4. عدد ۶ به خانه پس از ۵ منتقل می‌شود و عناصر از 11 تا 13 به اندازه یک خانه از خانه کنونی‌شان، به جلو می‌روند.

    5, 6, 11, 12, 13

    کد مرتب سازی درجی در ++C

    کد مرتب سازی درجی در C

    کد مرتب سازی درجی در جاوا

    کد مرتب سازی درجی در پایتون

    کد مرتب سازی درجی در #C

    کد مرتب سازی درجی در PHP

    خروجی

    خروجی قطعه کدهای بالا، برای آرایه [6, 5, 13, 11, 12] به صورت زیر است.

    5 6 11 12 13

    پیچیدگی زمانی: (O(n*2

    فضای کمکی: (O(1

    موارد مرزی (Boundary Cases): مرتب سازی درجی، در صورتی که عناصر دارای ترتیب برعکس باشند، بیشترین زمان اجرا را می‌برد. همچنین، در صورتی که عناصر مرتب شده باشند، کمترین زمان اجرا (از درجه n) را خواهد داشت.

    مرتب‌سازی درجا: بله

    پایدار: بله

    آنلاین: بله

    کاربردها: مرتب‌سازی درجی، هنگامی مورد استفاده قرار می‌گیرد که تعداد عناصر کم باشد. همچنین، هنگامی که آرایه ورودی تقریبا مرتب شده باشد و تنها چند عنصر در یک آرایه بزرگ در جای نادرست قرار داشته باشند، مرتب سازی درجی گزینه مناسبی خواهد بود.

    مرتب سازی درجی دودویی

    هنگامی که از جستجوی دودویی برای کاهش تعداد مقایسه‌ها در مرتب سازی درجی استفاده می‌شود، به آن مرتب سازی درجی دودویی گفته می‌شود. مرتب سازی درجی دودویی از جستجوی دودویی به منظور پیدا کردن موقعیت مناسب برای درج عناصر انتخاب شده در هر تکرار استفاده می‌شود. در درج نرمال، مرتب‌سازی در بدترین حالت (O(i به طور می‌انجامد (در iاُمین تکرار). این مقدار را می‌توان با استفاده از جستجوی دودویی به (O(logi کاهش داد. به طور کلی،‌ الگوریتم همچنان دارای زمان اجرای (O(n2 است، زیرا مجموعه‌ای از جا به جایی‌ها برای هر درج مورد نیاز است.

    پیاده‌سازی مرتب سازی درجی برای لیست‌های پیوندی

    در ادامه، پیاده‌سازی ساده‌ای از مرتب سازی درجی برای لیست‌های پیوندی ارائه شده است.

    1. یک لیست خالی «مرتب شده» (Sorted) (یا «نتیجه» (Result)) بساز.
    2. لیست داده شده را معکوس کن و اقدامات زیر را برای هر گره انجام بده:
      • گره کنونی را به صورت مرتب شده، در لیست «مرتب شده» (Sorted) یا «نتیجه» (Result) قرار بده.
    3. سر لیست پیوندی داده شده را به سر لیست مرتب شده (یا نتیجه) تغییر بده.

    کد مرتب سازی درجی در لیست‌های پیوندی در ++C

    کد مرتب سازی درجی در لیست‌های پیوندی در جاوا

    کد مرتب سازی درجی در لیست‌های پیوندی در #C

    منبع: فرادرس