جستجوی بروت-فورس: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
جز ←جایگزینهای روش brute-force: تصحیح اشتباههای نگارشی مطابق فرهنگستان زبان فارسی ( چند جمله ای=>چندجملهای) با استفاده از AWB |
Yamaha5Bot (بحث | مشارکتها) جز اصلاح و تمیزکاری مقاله، + ماژول ابرابزار با استفاده از AWB |
||
خط ۲:
{{جعبه اطلاعات الگوریتم
| کلاس = [[الگوریتم جستجو]]
| تصویر =
| زیرنویس تصویر =
| دادهها =
| زمان بدترین =
| زمان بهترین =
| زمان متوسط =
| پیچیدگی فضایی =
}}
در [[علوم کامپیوتر]]، '''[[جستجو|جستجوی]] خام و بیخردانه''' (به انگلیسی: brute-force search) و یا '''جستجوی جامع (فراگیر)''' (به انگیسی: exhaustive search)، همچنین به نام '''جستجوی تولید و تِست''' (به انگلیسی: generate and test) شناخته شده، روشی بدیهی در عین حال بسیار کلی برای [[حل مسئله]] میباشد. این روش که شامل شمارش نظام مند تمام نامزدهای ممکن برای حل و چک کردن اینکه آیا هر یک از نامزدها قادر به ارضا شرط مسئله است. به عنوان مثال، یک الگوریتم brute-force برای پیدا کردن [[مقسوم علیه]]
جستجو به روش brute-force به سادگی قابل پیادهسازی میباشد و همیشه جواب مسئله را در صورت وجود مییابد. با این حال، به دلیل اینکه هزینههای آن متناسب با تعداد نامزدهای حل مسئله است، استفاده از آن در بسیاری از مسائل عملی، که تعداد نامزدهای حل مسئله تمایل به رشد بسیار سریع با افزایش اندازه مسئله را دارد، امکانپذیر نمیباشد.
به عنوان مثال، در برنامههای حساس که در آن هر گونه خطا در الگوریتم میتواند عواقب بسیار جدی داشته باشد، و یا در هنگام استفاده از رایانه برای اثبات یک قضیه ریاضی این روش به کار برده میشود. جستجو به روش brute-force به عنوان روش
▲به عنوان مثال، در برنامههای حساس که در آن هر گونه خطا در الگوریتم میتواند عواقب بسیار جدی داشته باشد، و یا در هنگام استفاده از رایانه برای اثبات یک قضیه ریاضی این روش به کار برده میشود. جستجو به روش brute-force به عنوان روش "پایه" در هنگام تعیین معیار الگوریتمهای دیگر و یا metaheuristics مفید میباشد. در واقع، جستجو به روش brute-force را می توان ساده ترین metaheuristic نام نهاد. با این وجود نباید این روش را با [[روش پسگرد]] اشتباه گرفت. در روش عقبگرد، مجموعه بزرگی از راه حلها را می توان بدون شمارش حذف کرد. روش brute-force برای پیدا کردن یک آیتم در یک جدول [[جستجوی خطی]] نامیده میشود.
== پیادهسازی جستجوی brute-force ==
== الگوریتم پایه ==
به منظور استفاده از روش brute-force در یک کلاس خاص از مسائل، باید چهار زیر برنامه first, next, valid و output
(''first'' (''P'': ایجاد اولین نامزد
(''next'' (''P'', ''c'': ایجاد
(''valid'' (''P'', ''c'': بررسی اینکه مقبولیت نامزد c
(''output'' (''P'', ''c'': از جواب c
مرحله next میبایست زمانی که نامزد دیگری برای حل P
{{چپچین}}
''c'' <math>\gets</math> ''first''(''P'')
'''while''' ''c'' <math>\neq</math> Λ ''do''' ''if''' ''valid''(''P'',''c'') '''then''' ''output''(''P'', ''c'')
{{پایان چپچین}}
پیادهسازی الگوریتم به زبان c:
{{چپچین}}
void BF(char *x, int m, char *y, int n)
{
}}
{{پایان چپچین}}
== انفجار ترکیبی ==
نقطه ضعف اصلی استفاده از روش brute-force در بسیاری از مسائل عملی این است که تعداد نامزدهای حل مسئله بسیار زیاد است. به عنوان مثال، تعداد
== سرعت بخشیدن به الگوریتم ==
از جمله راههای سرعت بخشیدن به الگوریتم brute-force استفاده از راههای ابتکاری مخصوص برای هر مسئله به منظور کاهش فضای جستجو و یا به عبارتی کاهش تعداد نامزدهای قابل قبول میباشد. به عنوان مثال، مسئله معروف
== جایگزینهای روش brute-force ==
روشهای جستجوی متعددی برای یافتن راه حل هنگامی که اطلاعات محدودی از جواب مسئله در دسترس است وجود دارد. همیشه راههای ابتکاری خاص هر مسئله میتواند کار را سادهتر نماید. برای مثال تعیین [[بیشینه و کمینه]] در مراحل ابتدایی حل یک مسئله میتواند بسیار مفید باشد. در بعضی موارد همانند تجزیه جملات، روشهایی مثل تجزیه نمودار ممکن است درجه سختی مسئله را از حد نمایی به سختی چندجملهای تقلیل دهد. در بعضی موارد دیگر، سادهتر کردن مسئله میتواند جستجو را بسیار راحت تر کند. برای مثال در شطرنج کامپیوتری، برای انتخاب هر حرکت، بجای اینکه تمام گزینهها تا انتهای بازی در نظر گرفته شود، تعداد محدودی از بیشینه و کمینهها برای تعداد مشخصی از حرکتها آینده بصورت استاتیک بررسی میشود.
== کاربرد روش brute-force در رمزگشایی ==
در رمزگشایی، حمله به روش brute-force شامل امتحان کردن تمامی کلیدهای ممکن تا وقتی که کلید صحیح پیدا شود. این روش همیشه، به وسیله کسی که نتواند از کاستیهای سامانه رمزنگاری شده استفاده کند، قابل بکارگیری میباشد.
طول کلید تعیین
== منابع ==
سطر ۶۳ ⟵ ۶۴:
{{چپچین}}
^ Christof Paar, Jan Pelzl, Bart Preneel (2010). Understanding Cryptography: A Textbook for Students and Practitioners
. Springer. p.
http://www-igm.univ-mlv.fr/~lecroq/string/node3.html
سطر ۷۱ ⟵ ۷۲:
هم چنین ببینید:
{{چپچین}}
* [[حمله جستجوی فراگیر]]
* [[نماد O بزرگ]]
{{پایان چپچین}}
|