300000
تار عنکبوت©
تعداد بردها: 147659
(6 – 20) : | دور مسیر تصادفی چالش |
تعاریف + چرا این بازی یک "بازی ریاضی" است؟
نمودارها و شکلهای این بازی، پایه و اساس یک شاخه از ریاضیات هستند که با عنوان نظریه گراف شناخته میشود !
گراف چیست؟
گراف : یک گراف از گرهها (راسها) و یالها تشکیل شده است.
گره : "شیء"هایی که یک گراف، آنها را به هم متصل میکند گره نامیده میشوند. در بازی تار عنکبوت، گرهها را با دایره نشان داده میدهیم.
یال : هر پاره خط یا منحنی که دو گره از یک گراف را به هم وصل کند، یک یال گراف نامیده میشود. در بازی تار عنکبوت، یالها به صورت پاره خط هستند.
گسترش یک مسیر
مسیر : یک مسیر دنبالهای از یالهای متصل با یک گره شروع و یک گره پایان است.
مسیر اویلری : یک مسیر که از هر یال گراف دقیقا یک بار استفاده کند، یک مسیر اویلری نامیده میشود.
در این بازی، هدف بازیکن پیدا کردن یک مسیر اویلری است.
مسیرهای اویلری در زندگی روزمره وجود دارند؟
یک ماشین برفروب، یک کامیون نظافت خیابانها و مامور پستچی، چند مثال از اتومبیلها و افرادی هستند که باید از هر خیابان عبور کنند اما میخواهند از هیچ خیابانی دو بار عبور نکنند.
آیا نام "اویلر" آشنا به نظر میرسد؟
نظریه گراف زمانی آغاز شد که لئونارد اویلر، ریاضیدان اهل سوییس، در حال کار بر روی این نوع از مسیرها بود.
اویلر مقالهای در مورد پلهای هفتگانه کونیگسبرگ نوشت که ثابت میکرد، پیادهروی به صورتی که عبور از روی هر پل دقیقا یک بار اتفاق بیفتد، غیرممکن است.
برای کسب اطلاعات بیشتر در مورد این مساله، روی نقشه زیر کلیک کنید.
دور : یک دور، مسیری است که گره پایان آن همان گره شروع آن است .
دور اویلری : دوری است که هم یک مسیر اویلری و هم یک دور باشد. "دور" را در گراف بالا انتخاب کنید. جواب شما همیشه یک دور اویلری خواهد بود!
دستورالعمل تنظیمات بازی
در کادر کنار گرهها، میتوانید هر شماره از 6 تا 20 را تایپ کنید. این عد،د تعداد گرههای نمایش داده شده در گراف خواهد بود. هر چه تعداد بزرگتر باشد، پیدا کردن جواب سختتر میشود!
سپس، یک نوع گراف را انتخاب کنید
دور : مسیرهای برنده همیشه بر روی همان گره شروع پایان مییابند.
مسیر : در مسیرهای برنده، گره پایان، گروه شروع نیست.
تصادفی : گرافهایی که ممکن است یک دور اویلری یا یک مسیر اویلری داشته باشند. در مسیرهای برنده ممکن است گره پایان همان گره شروع باشد یا نباشد.
چالش : گرافهای دست سازی که در آنها، یالها از روی هم عبور میکنند و بنابر این، تشخیص پلها دشوار است.
در نهایت، روی "ایجاد یک تار جدید" کلیک کنید تا تغییرات مورد نظرخود در تنظیمات گراف را مشاهده کنید !
کدام گره را باید به عنوان گره شروع انتخاب کنم؟
درجه: درجه یک ویژگی گره است. تعداد یالهای متصل به یک گره را درجه گره مینامند. گرههای یک گراف را با توجه به دره های آنها به دو دسته گرههای فرد و گرههای زوج تقسیم میکنند.
گراف همبند: گرافی که در آن هر دو گره متمایز میتواند از طریق یک مسیر به هم متصل شوند.
پل : یک یال را پل مینامند اگر دو گره انتهای آن یال را نتوان به کمک یالهای دیگر به هم متصل کرد. بنابر این، پس از عبور از یک پل، فرد به سمت قبلی باز نخواهد گشت. حذف یک پل، گراف را به دو مولفه مجزا تقسیم میکند.
گراف بدون جهت : گرافی که در آن یالها هیچ جهتی ندارند. ما در این بازی، فقط چنین گرافهایی را در نظر میگیریم.
گراف چهتدار : گرافی که در آن هر یال، مانند یک خیابان یک طرفه، دارای یک جهت است.
یک گراف بدون جهت، شامل یک دور اویلری است هرگاه همه گرههای آن دارای درجه زوج باشند (درجه 0، 2، 4، 6، ...) . به همین دلیل شما میتوانید هر گره دلخواه را به عنوان گره شروع حرکت خود انتخاب کنید و برنده شوید. فقط به خاطر داشته باشید که دور اویلری شما باید در همان گره که از آن شروع کردهاید به پایان برسد.
یک گراف شامل یک مسیر اویلری است، اما شامل یک دور اویلری نیست، هرگاه گراف دقیقا دو گره فرد (درجه 1، 3، 5، 7، ...) داشته باشد و تمام گرههای دیگر زوج باشند. در این حالت، شما باید یک گره فرد را به عنوان گره شروع و گره فرد دیگر را به عنوان گره پایان مسیر خود انتخاب کنید وگرنه شما نمیتوانید یک مسیر اویلری پیدا کنید.
چرا دقیقا دو گره ؟
به هر حرکت، به این صورت فکر کنید : "خارج شدن" از یک گره و "وارد شدن" به گره بعدی. غیر از گره شروع و گره پایان مسیر، هر بار که به یک گره وارد شوید باید از آن خارج شوید پس تعداد یالهای ورودی و خروجی از آن گره باید برابر باشند و مجموع آنها که درجه گره است عددی زوج خواهد بود. پس گرههای میانی مسیر حتما باید زوج باشند. اما چون در گره شروع، تعداد خارج شدن یکی بیشتر از تعداد وارد شدن است، درجه آن باید عددی فرد باشد. همچنین در گره پایانی تعداد واردشدن به گره یکی بیشتر تعداد خارج شدن از آن است و درجه آن باید فرد باشد.
هنگامی که بازی را شروع میکنید، اولین یالی که علامتگذاری میکنید، حرکت "خارج شدن" از گره شروع است. این حرکت فعلا با هیچ حرکت "وارد شدن" متناظر نمیشود.
برای ایجاد یک دور اویلری، آخرین یالی که علامتگذاری میکنید، حرکت "وارد شدن" به گره شروع است. این حرکت با اولین حرکتی که انجام دادهاید متناظر میشود و به این ترتیب گره شروع دارای درجه زوج خواهد بود.
اگر مسیر اویلری گراف، یک دور نباشد، آخرین یالی که علامتگذاری میکنید یک حرکت "وارد شدن" به گره پایان است (که گره شروع نیست) و با هیچ حرکتی متناظر نیست. به این دلیل گره شروع و گره پایان درجه فرد خواهند داشت.
نگران موارد دیگر نباشید. اگر تعداد گرههای فرد دقیقا 0 یا 2 نباشد، هیچ مسیر اویلری یا دور اویلری وجود ندارد، یعنی هیچ راهی برای برنده شدن وجود ندارد. چنین گرافهایی نباید در این بازی ظاهر شوند.
سوالهای مقدماتی
آیا تعداد گرههای فرد میتواند فرد باشد ؟
نه.
چرا ؟
اثبات :
با شمارش دو انتهای تمام یالها، به همان عددی میرسیم که از جمع کردن تمام درجههای تمام گرهها بدست میآید. این ادعا درست است؟
چون هر یال دارای دو انتها است، تعداد کل انتهاهای تمام یالها باید یک عدد زوج باشد. (مجموع چند عدد زوج یک عدد زوج است.)
برای محاسبه مجموع درجههای تمام گرهها، میتوان ابتدا درجههای زوج را جمع کرد که یک عدد زوج را میدهد و سپس مجموع درجههای فرد را محاسبه کرد.
اگر تعداد گرههای فرد یک عدد فرد باشد، حاصل این مجموع یک عدد فرد است و در نتیجه حاصل جمع یک عدد زوج با یک عدد فرد عددی فرد خواهد بود. بنابر این، مجموع کل درجهها فرد خواهد بود. اما این عدد باید با تعداد کل تمام انتهاهای تمام یالها برابر باشد که یک عدد زوج است. بنابر این، تعداد گرههای درجه فرد نمیتواند فرد باشد. یعنی در هر گراف، تعداد گرههای فرد باید زوج باشد.
به عنوان مثال، 1 یک عدد فرد است و بنابر این، هیچ گرافی با فقط1 گره فرد وجود ندارد.
در کدام گرافها، مسیر یا دور اویلری وجود دارد؟
اگر یک گره دارای درجه زوج باشد، یعنی 2، 4، 6, . . . یال به آن گره متصل باشد، آنگاه وقتی که به آن گره برسیم ، تعدادی فرد از یالهای استفاده نشده باقی میماند که بزرگتر از صفر است، بنابر این، میتوانیم از آن گره خارج شده و مسیر را ادامه دهیم. اگر درجه گره فرد باشد، یعنی 1، 3، 5، , . . یال به آن متصل باشد، آنگاه آن گره باید گره شروع یا گره پایان مسیر باشد. چون یک مسیر فقط 2 انتها دارد، پس گراف فقط میتواند شامل 2 گره فرد باشد. بنابر این :
برای وجود یک دور اویلری، گراف باید فقط گرههای زوج داشته باشد و برای وجود یک مسیر اویلری، گراف باید شامل دقیقا 2 گره فرد باشد، از این دو گره فرد، یکی گره شروع و دیگری گره پایان مسیر خواهد بود.
چگونه میتوان یک مسیر یا دور اویلری را پیدا کرد ؟
همانطور که در بالا نشان داده شد، اگر هیچ گره فردی وجود نداشته باشد، دور اویلری را میتوان از هر گره دلخواه شروع کرد و در همان گره به پایان دور رسید. اگر دقیقا 2 گره فرد وجود داشته باشد، یکی از آنها به عنوان گره شروع انتخاب میشود و مسیر اویلری در گره دیگر پایان مییابد.
آیا ممکن است که هنگام پیدا کردن مسیر مشکلی پیش بیاید؟
بله، ممکن است اتفاق بیفتد. مثال:
4 2 /\/\ 1---3---5 2 4 / \ / \ 1---3---5
فقظ گره 3 دارای درجه 4 است و درجه بقیه گرهها 2 است. بنابر این، همه درجهها زوج هستند و ما میتوانیم از هر گره دلخواه شروع کنیم. بیایید از گره 1 شروع کنیم و به گره 3 برویم و هر یالی که پیموده میشود را حذف میکنیم.
2 4 / \ / \ 1 3---5
یال 3-2 تبدیل به یک پل میشود. عبور از این یال و حذف آن یک گراف ناهمبند ایجاد میکند
2 4 / / \ 1 3---5
و دیگر نمیتوان به طور کامل از تمام یالها عبور کرد. بنابر این، برای تکمیل دور اویلری، باید از گره 3 به گره 4 یا گره 5 برویم.
چگونه میتوان از عبور از پل جلوگیری کرد؟
برای بررسی اینکه آیا یال یک پل است یا خیر، باید از یک انتهای یال شروع کرده و از تمام گرههای همسایه آن بگذریم. اگر به انتهای دیگر یال نرسیم، یال یک پل است. چنین جستجوی کاملی در مورد همه همسایههای یگ گره زیاد سخت نیست. اما اگر کسی بخواهد قبل از عبور از هر یال این کار را انجام دهد، کار بسیار سختی خواهد بود. یک الگوریتم کامل برای این کار، الگوریتم فلوری نامیده میشود که قدمت آن به سال 1883 برمیگردد.
آیا الگوریتم کارآمدتری وجود دارد ؟
یک الگوریتم کارآمدتر متعلق است به هایرهولزر (1873) .
اگر گراف دارای دو گره فرد باشد، یک مسیر اویلری را پیدا میکند و در غیر این صورت، یک دور اویلری پیدا خواهد کرد، در هر دو مورد، بسیار سریع و بدون بررسی پلها.
1) بعد از حذف تمام یالهای استفاده شده، تعداد یالهای استفاده نشده باقیمانده در تمام گرهها یک عدد زوج خواهد بود.
چرا ؟
اگر درجه یک گره زوج باشد، پس تعداد "وارد شدن" به آن با تعداد " خارج شدن" از آن برابر است، پس، تعداد یالهای حذف شده عددی زوج بوده است و بنابر این، تعداد یالهای باقیمانده (که همان درجه گره است) باز هم زوج خواهد بود. اگر درجه گره فرد باشد، پس آن گره یا گره شروع و یا گره پایان مسیر اویلری بوده است و در نتیجه، مجموع تعداد ورود و خروج به آنها عددی فرد است و پس از حذف یالهای مسیر، در این دو گره هم تعداد یالهای باقیمانده عددی زوج خواهد بود زیرا عدد فرد - عدد فرد = عدد زوج.
2) باید حداقل یک گره با یالهای مجاور استفاده شده و استفاده نشده وجود داشته باشد.
چرا ؟
چون نمودار اصلی همبند بود.
چون 1) میتوان یک دور شامل یالهای استفاده نشده را پیدا کرد که در این گره شروع شده و پایان مییابد. چون 2) این دور زمانی که به این گره میرسد میتواند در اولین مسیر یا دور شامل این گره ادغام شود. این ترکیب دور های شامل یالهای استفاده نشده تکرار میشود تا زمانی که تمام یالها استفاده شوند و بنابر این، یکی از آنها دارای یک مسیر اویلری یا دور اویلری است که از تمام یالها استفاده میکند.
قیمت این نسخه سریعتر چقدر است؟
باید مسیر یا دور قبلی را به یاد داشته باشید تا بتوانید دور جدید را به آن اضافه کند.
مثال :
2 4 / \ / \ 1---3---5
دور 1-3-2-1 را به عنوان اولین دور میسازیم. گره 3 هم در این دور و هم در دور استفاده نشده 3-4-5-3 دیده میشود. آن را به دور اول وارد کرده و دور 1-3-4-5-3-2-1 را میسازیم. دیگر یال استفاده نشده وجود ندارد، بنابر این، الگوریتم در اینجا به پایان میرسد، ما دور اویلری را پیدا کردهایم.
چگونه میتوان با استفاده از رابط تعاملی ما، یک دور را به یک دور دیگر وارد کرد؟
میتوان روی "Undo" کلیک کرد تا زمانی که به آخرین گره، که انتهای یک یال استفاده شده و یک یال استفاده نشده است، مانند گره 3 در مثال بالا، برسید. اکنون دور 3-4-5-3 را وارد کنید و سپس با یالهای استفاد نشده ادامه دهید.
اگر یک گره فرد وجود داشته باشد، آیا باید ابتدا هر دو گره فرد را پیدا کنیم و اولین مسیر را از یکی به دیگری بکشیم؟
نه. اگر کسی فقط یک گره فرد را پیدا کند، میتواند مسیر را از این گره شروع کند. مسیر به طور خودکار در گره فرد دیگر به پایان میرسد، خواه از تمام یالها استفاده شده باشد یا نشده باشد.
چرا ؟
چون وقتی که به یک گره زوج میرسیم، پس تعداد فردی از یالهای متصل آن استفاده شده است.
چرا ؟
چون هر بار که به یک گره میرسیم، باید آن گره را ترک کنیم، بنابر این، از تعداد زوجی از یال ها استفاده میشود. در حال حاضر، با استفاده از یک یال به یک گره زوج رسیده است. بنابر این، در مجموع از تعدادی فرد از یالهای یگ گره زوج استفاده شده است،
چون حاصل تفریق یک عدد زوج و یک عدد فرد، عددی فرد است، بنابر این، تعدادی فرد از یالهای استفاده نشده باقی میماند. یک عدد فرد همیشه غیر صفر است، بنابر این، حداقل یک یال استفاده نشده وجود دارد که میتوان از آن برای ترک آن گره استفاده کرد. بنابر این، مسیر به طور خودکار در یک گره فرد به پایان میرسد خواه تمام یالها مورد استفاده قرار گرفته باشند یا خیر.
آیا پیشنهادی دارید که چگونه میتوان یک گره فرد پیدا کرد ؟
البته میتوان درجه هر گره را بررسی کرد تا زمانی که یک گره درجه فرد پیدا شود. در اینجا یک راه بدون نیاز به شمارش درجه گرهها ارائه میکنیم.
میتوان یک گره را بطور تصادفی انتخاب کرد. اگر درجه آن فرد باشد، پس یک گره فرد پیدا شده است. اگر نه، از آن گره شروع به رسم یک دور میکنیم. اگر در یک گره متوقف شویم، آن گره یک گره فرد است، پس یک گره فرد پیدا کرده ایم. اگر دور کامل شود، یعنی به گره شروع برسیم و یالهای استفاده نشده وجود داشته باشد، دور ساخته شده را نادیده گرفته و دوباره همین کار را انجام میدهیم - یعنی یک گره را انتخاب کرده و یک مسیر یا دور را میکشیم. این کار تا زمانی ادامه مییابد که یا یک گره فرد پیدا شود یا دیگر یال استفاده نشده وجود نداشته باشد. که در این صورت همه گرهها زوج بودهاند و گره فرد وجود نداشته است.
اگر گراف شبیه یک شهر با خیابانهای یک طرفه باشد چه کار باید کرد ؟
یک گراف با یالهایی که فقط میتوانند در یک جهت پیموده شوند ، گراف جهتدار نامیده میشود. با توجه به استدلال بالا، 2 گزاره زیر قابل قبول هستند.
یک گراف جهتدار شامل دور اویلری است، اگر و تنها اگر، برای هر گره، تعداد یالهای خروجی با تعداد یالهای ورودی برابر باشد.
یک گراف جهتدارشامل یک مسیر اویلری است، اگر و تنها اگر
یک گره دارای یک یال خروجی بیشتر از یالهای ورودی است،
یک گره دارای یک یال ورودی بیشتر از یالهای خروجی است و
تمام یالهای دیگر دارای تعداد یکسانی از یالهای خروجی و ورودی هستند.
برای به روز رسانی عضو شوید و یا ما را دنبال کنید: