300000
English | Français | فارسی | 中文 | Українська | Azerbaijani | ខ្មែរ | Tiếng Việt | Bahasa Melayu | Deutsch | O'zbek | РусскийFloodfill©
تعداد بردها: 209822
A Guide for Playing Floodfill
مشکل استفاده از کمترین تعداد رنگ برای رنگ کردن نقشه، بر اساس توضیحات ارائه شده، تاریخ طولانی دارد، به عنوان مثال، در یک مقاله ی ویکی پدیا. این قضیه که 4 رنگ همیشه کافی است که یک نقشه ی ساده را رنگ کرد به عنوان اولین قضیه ی ریاضی بزرگ معروف شد که فقط می توانست توسط رایانه ثابت شود و نه توسط اثبات ریاضی تولید شده توسط انسان.
هیچ الگوریتم شناخته شده ای برای بهینه رنگ کردن نقشه وجود ندارد. منظور از "بهینه" این است که اگر تعداد نواحی N عدد بزرگی است، آنگاه تعداد تلاش های لازم برای رنگ کردن مثل Nk رشد می کندکه در آن k عددی است که به N بستگی ندارد. به بیان دیگر، برای الگوریتم های "بهینه"، تعداد تلاش ها مثل یک چند جمله ای از N رشد می کند. در عوض، الگوریتم های رنگ آمیزی شناخته شده یک پیچیدگی توانی دارند، یعنی تعداد تلاش ها به N با رابطه ی ۴N بستگی دارد.
گر استفاده از 5 یا 6 رنگ مجاز باشد، یا نقشه فقط دو رنگ نیاز داشته باشد، الگوریتم های بهینه شناخته شده اند.
فرصتی دیگر برای رسیدن به روش بهینه این است که، اینکه الگوریتم همیشه بهینه است، کنار گذاشته شود. همچین ابتکاری (یعنی مجموعه ی دستورالعمل ها) که حداقل در بیشتر موارد قابل به کار گیری است باید ذیل مطرح شود:
- مفید است اگر در ابتدا ناحیه ای رنگ شود که بیشترین همسایه ممکن رادارد به این دلیل که اگر آن ناحیه رنگ A شود آنگاه همه ی همسایه ها محدود خواهند شد مه رنگ A نداشته باشند. این مساله تعداد انتخاب های رنگ را برای نواحی همسایه و بنابراین تعداد تلاش های بعدی را در شرایطی که رنگ کردن دشوار باشد را کاهش می دهد.
- رنگی که در اولین رنگ آمیزی استفاده می شود قطعا آزاد است.
- اولین باری که رنگ دوم برای رنگ کردن یک ناحیه استفاده می شود این انتخاب رنگ آزاد است اگر این ناحیه در همسایگی ناحیه ای باشد که در ابتدا رنگ شد، یعنی اگر رنگ دوم لازم باشد.
- اولین باری که رنگ سوم برای رنگ کردن یک ناحیه استفاده می شود، این انتخاب رنگ آزاد است اگر این ناحیه در همسایگی ناحیه هایی باشد که در ابتدا و همچنین دوم رنگ آمیزی شدند، یعنی اگر رنگ سوم لازم باشد.
- در مرحله ی بعدی ناحیه ای را رنگ کنیم که برای آن فقط یک رنگ محتمل باقی مانده باشد به گونه ای که نتوانیم اشتباهی در این رنگ آمیزی داشته باشیم.
- تعداد تلاش ها برای رنگ آمیزی قطعا کمتر از ۴N (امتحان کردن همه ی ۴ رنگ برای همه ی N ناحیه). بنابراین این تعداد تلاش ها برای رنگ آمیزی به صورت مهمی بستگی به تعداد ناحیه ها N دارد. در نتیجه این مفید خواهدبود که رنگ آمیزی قسمت سفید (رنگ نشده) نقشه را به زیر نقشه های غیر متصل جدا از هم که بعدا می توانند جداگانه رنگ شوند، تقسیم کرد. این نواحی فقط N۱ و N۲ ناحیه دارند (=N۱+N۲ N) ، که نیاز به حداکثر ۴(N۱ )+۴(N۲ )=۴N تلاش دارد که بسیار کمتر از ۴(N۱ )*۴(N۲ )=۴N
- >اگر کسی می خواهد که کمترین تعداد رنگ های لازم برای رنگ کردن یک نقشه ی داده شده را پیدا کند آنگاه می تواند در ابتدا بررسی کند که آیا ۲ رنگ کافی است. این کار می تواند به صورت بهینه انجام شود.
اگر فقط دو رنگ (الف) و (ب) قرار باشد که استفاده شوند و یکی از نواحی رنگ آمیزی شده باشد، آنگاه چرخیدن پیرامون نقطه ی اشتراک، رنگ سایر نواحی را تنظیم می کند:
این قانون همچنین برای اولین تلاش رنگ آمیزی نقشه مفید است که ۳ یا ۴ لازم دارد. به عنوان مثال، اگر ناحیه ی ۱ در زیر به رنگ (الف) رنگ آمیزی شده، آنگاه نواحی ۲ و ۴ رنگ های متفاوتی نیاز دارندو ما هیچ ایده ای نداریم که آن رنگ چه خواهد بود اما می دانیم که رنگ کردن ناحیه ی ۳ با رنگ (الف) شرایط بیشتری بر رنگ آمیزی نواحی ۲ و ۴ اعمال نمی کند، چرا که آنها از پیش در همسایگی ناحیه ای با رنگ (الف) قرار گرفته اند.
شکل ۳ فقط یهک بخش کوچکی از نقشه را نشان می دهد اما روش فوق می تواند به شکل دقیق تری برای هر نقشه ای استفاده شود. اگر همه ی همسایه های ناحیه ی ۳ (در شکل ۳، نواحی ۲ و ۴) حداقل یک همسایه با رنگ (الف) دارند (در شکل ۳، ناحیه ی ۱)، رنگ کردن ناحیه ی ۳ با رنگ (الف) نمی تواند اشتباه باشد. دلیل آن این است که رنگ کردن ناحیه ی ۳ با رنگ (الف) هیچ محدودیت جدیدی برای همسایه های آن به وجود نمی آورد، چرا که آنها از پیش از داشتن رنگ (الف) ممنوع شده اند. بنابراین اگر رنگ آمیزی های بعدی مشخص شود که اشتباهی رخ داده است (به این دلیل که تعداد رنگ ها کافی نیست)، آنگاه هیچ امتیازی در اینکه برای ناحیه ی ۳ رنگی غیر از (الف) در نظر گرفته شود وجود ندارد، رنگ آمیزی های های دیگری باید دوباره امتحان شوند. - چه می شود اگر ناحیه ی ۳ در بالا، به صورت قطری همسایه ی ناحیه ی دیگری باشد، مثلا ناحیه ی ۹، که از پیش رنگ دیگری دارد، مثلا رنگ (ب)؟ آیا ۳ باید به رنگ (الف) یا (ب) رنگ شود؟ همچنین اینجا چک کردن همه ی همسایه های ۳ کمک کننده است چه آنها از پیش از داشتن رنگ (الف) یا (ب) ممنوع شده باشند. اگر هیچ یک از این موارد نباشد آنگاه ما می توانیم با رنگ آمیزی ۳ منتظر بمانیم.
برای به روز رسانی عضو شوید و یا ما را دنبال کنید: