الگوریتم ترسیم کلمات world rom mime. الگوریتم های کمکی


بررسی تکالیف 2 8 (r.t.). اگر مختصات دو راس آن (2،1) و (7،5) مشخص باشد، الگوریتمی برای رسم مستطیل برای Draftsman با اضلاع موازی با محورهای مختصات بنویسید. مختصات مستطیل: (2،1)، (2،5)، (7،5)، (7،1) ترجمه به نقطه (2، 1) ترجمه قلم پایین به نقطه (2،5) ترجمه به نقطه (7، 5) ترجمه به نقطه (7، 1) ترجمه به نقطه (2، 1)

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

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


3 9 (s.t.). یک الگوریتم برای رسم لوزی برای Draftsman ایجاد کنید که مرکز آن در نقطه (5،5) باشد، مورب ها با محورهای مختصات موازی باشند و طول آنها برابر با 8 و 4 واحد باشد. دو گزینه برای مکان لوزی در صفحه مختصات وجود دارد. حرکت به نقطه (3، 5) قلم پایین حرکت به نقطه (5، 9) حرکت به نقطه (7، 5) حرکت به نقطه (5، 1) حرکت به نقطه (3، 5) حرکت به نقطه (1، 5) حرکت قلم پایین به نقطه (5، 7) حرکت به نقطه (9، 5) حرکت به نقطه (5، 3) حرکت به نقطه (1، 5)

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

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


4 10 (s.t.). الگوریتمی برای کنترل کشو بنویسید که در نتیجه آن مربعی بر روی صفحه مختصات رسم می شود که طول ضلع آن برابر با 2 واحد است. شما می توانید هر نقطه از صفحه مختصات را به عنوان یکی از رئوس انتخاب کنید، به عنوان مثال، (2،2). حرکت به نقطه (2، 2) قلم رها حرکت به بردار (0، 2) حرکت به بردار (2، 0) حرکت به بردار (0، -2) حرکت به بردار (-2، 0)

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


5 11 (s.t.). الگوریتمی برای کنترل کشو بنویسید که در نتیجه آن یک مستطیل بر روی صفحه مختصات رسم می شود که طول اضلاع آن برابر با 3 و 4 واحد است. شما می توانید هر نقطه از صفحه مختصات را به عنوان یکی از رئوس انتخاب کنید، به عنوان مثال، (4،4). حرکت به نقطه (4، 4) قلم رها حرکت به بردار (0، 4) حرکت به بردار (3، 0) حرکت به بردار (0، -4) حرکت به بردار (-3، 0)

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

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


6 12 (b.t.). الگوریتمی برای کنترل کشو بنویسید که در نتیجه آن متوازی الاضلاع دلخواه روی صفحه مختصات رسم می شود. شما می توانید هر نقطه از صفحه مختصات را به عنوان یکی از رئوس انتخاب کنید، به عنوان مثال، (1،1). حرکت به نقطه (1، 1) قلم رها حرکت به بردار (1، 3) حرکت به بردار (4، 0) حرکت به بردار (-1، -3) حرکت به بردار (-4، 0)

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

اگر الگوریتم تمام مسیرهای ممکن از A تا B را در نظر می گرفت، حتی اگر A و B در یک شهر کوچک بودند، به زندگی ما ختم نمی شد. الگوریتمی که با نام Jikstra's Algorithm شناخته می شود، کاملاً پیچیده است و نیاز به استفاده از ساختار داده ای دارد که به عنوان صف اولویت شناخته می شود. با این حال، در برخی از برنامه ها، حتی این زمان اجرا بسیار کند است و برنامه نویسان سعی می کنند با استفاده از به اصطلاح اکتشافی، آن را بهتر کنند. یک اکتشافی تقریبی از چیزی است که با یک مسئله مرتبط است و اغلب توسط یک الگوریتم اختصاصی محاسبه می شود.


7 13 (a) (r.t.). الگوریتمی برای کشیدن تصویر بنویسید تا در حین ترسیم قلم از کاغذ جدا نشود و دو بار خطی کشیده نشود. فرض کنید (1، 1) مختصات راس پایین سمت چپ شکل باشد. یکی از گزینه ها: حرکت به نقطه (1، 1) حرکت قلم رها به بردار (4، 4) حرکت به بردار (0، -4) حرکت به بردار (4، 4) حرکت به بردار (0، -4) حرکت به بردار (- 8، 0) جابجایی بر اساس بردار (0، 4) تغییر بردار (8، 0)

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

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


8 13 (ب) (r.t.). الگوریتمی برای کشیدن تصویر بنویسید تا در حین ترسیم قلم از کاغذ جدا نشود و دو بار خطی کشیده نشود. فرض کنید (7، 1) مختصات راس سمت چپ بالای شکل باشد. یکی از گزینه های ممکن: ترجمه به نقطه (1، 7) کاهش تغییر قلم به بردار (0، -4) شیفت به بردار (4، 0) شیفت به بردار (0، 2) شیفت به بردار ( -2، 0) جابجایی بردار (0، -4) جابجایی بردار (4، 0) جابجایی بردار (0، 4) جابجایی بردار (-2، 0) جابجایی با بردار (0، 2) تغییر بردار (-4، 0)

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

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





10 فرض کنید (1، 1) مختصات راس پایین سمت چپ شکل باشد. ساخت و ساز باید از یکی از رئوس شروع شود، جایی که تعداد فرد خطوط همگرا می شوند. دو رأس از این قبیل وجود دارد: (5، 1) و (5، 5). یکی از گزینه های ممکن: ترجمه به نقطه (5، 1) تغییر قلم به بردار (4، 4) شیفت به بردار (-8، -4) شیفت به بردار (4، 4) شیفت به بردار (4، -) 4) جابه‌جایی بردار (8-، 4) جابه‌جایی بردار (4، -4) جابه‌جایی بردار (0، 4) جابه‌جایی بردار (4، 0) تغییر بردار (0، -4) تغییر بردار (- 8، 0) جابجایی بر اساس بردار (0، 4) تغییر بردار (4، 0)

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

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





12


13 18 (الف) (s.t.). یک الگوریتم برای کنترل کشو بنویسید که برای توصیف آن مناسب است از چرخه "تکرار n بار" استفاده شود. حرکت به نقطه (1، 1) قلم رها کردن 5 بار تکرار بردار حرکت (0، 1) بردار جابجایی (5، 0) بردار تغییر (0، -1) بردار تغییر (-5، 0) بردار تغییر (0، 1) پایان

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

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


14 19 (a) (b.t.). یک الگوریتم برای کنترل کشو ایجاد کنید که پس از اجرای آن شکل زیر به دست می آید: PROC مربع START، تغییر قلم را به بردار (0، 2) شیفت به بردار (2، 0) شیفت به بردار (0) کاهش دهید. ، -2) شیفت به بردار (-2، 0) لوزی END PROC شروع قلم قطره ای حرکت به بردار (-1، 1) حرکت به بردار (1، 1) حرکت به بردار (1، -1) حرکت به بردار ( -1، -1) END حرکت به نقطه (1، 1) حرکت قلم به سمت پایین تکرار 5 بار مربع حرکت قلم حرکت به بردار (3، 0) حرکت لوزی حرکت قلم حرکت به بردار (1، 0) پایان

در این مورد، معلوم می شود که الگوریتم مشکل، به نام "تطبیق قوی"، مستقیماً برای مشکل ما قابل استفاده است، اگرچه در نگاه اول این رابطه بعید به نظر می رسد. تنها از طریق دانش و درک الگوریتمی موجود می توان چنین رابطه ای را کشف کرد. نمونه های دنیای واقعی بیشتر نمونه های دیگر از مسائل واقعی با راه حل هایی که به الگوریتم های پیشرفته نیاز دارند. تقریباً هر کاری که با رایانه انجام می دهید به نوعی به الگوریتمی مرتبط است که شخصی برای کشف آن بسیار تلاش کرده است.