
_START_ARTICLE_
بحث أول-أفضل
_START_PARAGRAPH_
أفضل-البحث الأول هو خوارزمية بحث تستكشف مجموعة البيانات (Graph) من خلال توسيع نطاق العقدة الأكثر نجاحاً أي الأكثر مطابقة لقاعدة محددة يتم البحث بواسطتها._NEWLINE_يهودا بيرل وصف البحث الأول الأفضل من خلال تقدير تقدير نجاح تلك العقدة n "وذلك وفقاً لدالة تقييم إرشادية (heuristic evaluation function)  والتي قد تعتمد بشكل عام على كل من : وصف n، وصف الهدف، المعلومات التي تم جمعها بواسطة البحث عن تلك النقطة، والأهم من ذلك كله، أي معلومات إضافية حول نطاق المعضلة (problem domain)"_NEWLINE_استخدم بعض الكتاب "البحث الأول-الأفضل" للإشارة على وجه التحديد إلى البحث بواسطة خوارزمية الكشف عن مجريات الأمور (heuristic) التي تحاول التنبؤ بمدى قرب نهاية الطريق من الحل، بحيث توسّع المسارات التي تعتبر أقرب إلى الحل للوصول إلى الحل بشكل أسرع. ويسمى هذا النوع من البحث بـ الأول-الأفضل الجشع أو البحث الإرشادي النقي (pure heuristic search) - بحث الكشف النقي عن مجريات الأمور._NEWLINE_عادةً ما يتم تنفيذ كفاءة اختيار أفضل مرشح ليتم توسيعه باستخدام طابور الأولوية (priority queue)._NEWLINE_خوارزمية البحث بأولوية الأفضل هي مثال على البحث الأول-الأفضل (تعرف بـ A* بالإنجليزية)، أما الخوارزمية المعروفة بـ (B*) فهي تستخدم غالباً لإيجاد المسارات في البحث الإندماجي (combinatorial search). ولا تعتبر أي من أ* أو ب*  خوارزمية بحث أول-أفضل جشع حيث أن كلاهما لا تتناغمان مع المسافة المقطوعة من البداية مجموعة مع المسافات المقدرة نحو الهدف وهي صفة خوارزمية البحث الأول-الأفضل الجشع.
_START_SECTION_
الخوارزمية
_START_PARAGRAPH_
خوارزمية البحث الأول-الأفضل تكون على النحو التالي._NEWLINE_OPEN = [initial state]_NEWLINE_while OPEN is not empty or until a goal is found_NEWLINE_do_NEWLINE_ 1. Remove the best node from OPEN, call it n._NEWLINE_ 2. If n is the goal state, backtrace path to n (through recorded parents) and return path._NEWLINE_ 3. Create n's successors._NEWLINE_ 4. Evaluate each successor, add it to OPEN, and record its parent._NEWLINE_done_NEWLINE_هذا الإصدار من الخوارزمية ليس كاملاً، أي أنها لا تجد دائماً مساراً ممكناً بين عقدتين، وحتى لو كان هناك مسار. فعلى سبيل المثال، قد يعلق في حلقة ما إذا وصلها عند نهاية مغلقة، ويحدث هذا عندما تكون العقدة الوحيدة التي تخلف (ن) هي أصلها. وبالتالي ترجع إلى أصلها، وهكذا يتم إدراج الخلف الواقع في النهاية المغلقة في قائمة م  مرة أخرى._NEWLINE_النسخة التالية تمتد الخوارزمية إلى استخدام قائمة إضافية غ  (ملاحظة م = مفتوحة، غ=مغلقة) وهي قائمة تحتوي على كافة العقد التي تم تقييمها ولن يتم النظر فيها مرة أخرى. وهذا سوف يجنب أي عقدة يجري تقييمها مرتين، وبالتالي فإنه لن يخضع لحلقات لانهائية._NEWLINE_OPEN = [initial state]_NEWLINE_CLOSED = []_NEWLINE_while OPEN is not empty_NEWLINE_do_NEWLINE_ 1. Remove the best node from OPEN, call it n, add it to CLOSED._NEWLINE_ 2. If n is the goal state, backtrace path to n (through recorded parents) and return path._NEWLINE_ 3. Create n's successors._NEWLINE_ 4. For each successor do:_NEWLINE_       a. If it is not in CLOSED and it is not in OPEN: evaluate it, add it to OPEN, and record its parent._NEWLINE_       b. Otherwise, if this new path is better than previous one, change its recorded parent._NEWLINE_          i.  If it is not in OPEN add it to OPEN._NEWLINE_          ii. Otherwise, adjust its priority in OPEN using this new evaluation._NEWLINE_done