Основни стратегии и инженерски аспекти на неинформираното пребарување

Со експоненцијалниот развој на информатичките технологии и вештачката интелигенција, разбирањето на основните алгоритми за пребарување станува клучно за напредокот во решавањето на комплексни проблеми. Неинформираното пребарување е една од фундаменталните категории во областа на алгоритмите за решавање проблеми, која вклучува техники како што се BFS (Breadth-First Search), DFS (Depth-First Search), UCS (Uniform Cost Search) и нивните варијанти.

Неинформираното пребарување претставува класична категорија на алгоритми кои не користат дополнително доменско знаење или хеуристики за да претпостават каде се наоѓа целта, туку се потпираат исклучиво на структурата на просторот на состојби и дефинираните оператори. Овие алгоритми, како што се BFS (пребарување по ширина), DFS (пребарување по длабочина) и UCS (пребарување со еднаков трошок), се разликуваат по политиката на избор на јазол кој следен ќе се прошири во процесот на пребарување. Во пракса, иако формално не користат хеуристики, изборот на структура на податоци, третманот на повторени состојби и редоследот на операторите значително влијаат на нивната ефикасност и однесување, што ја прави оваа област не само теоретска, туку и дисциплина на внимателен инженерски дизајн.

Во контекст на филозофските размислувања за логика и рационално донесување одлуки, овие алгоритми претставуваат практична имплементација на теоретските концепти за истражување и оптимизација. Тие овозможуваат систематско и ефективно пребарување низ просторот на можни решенија и ја нагласуваат важноста на внимателниот дизајн и обработка на повторени состојби, како и справувањето со циклуси и редоследот на операторите.

Неинформирано пребарување

Неинформираното пребарување ги опфаќа оние стратегии кои не користат доменско знаење или хеуристики за да „претпостават“каде се наоѓа целта, туку се потпираат на самата структура на просторот на состојби и на дефинираните оператори. Во класичниот модел на пребарување имаме почетна состојба, тест за цел и оператори кои генерираат наследници.

Алгоритмот одлучува кој јазол следен ќе го прошири, а токму оваа политика на избор ја разликуваат најпознатите алгоритми како што се BFS (пребарување по ширина), DFS (пребарување по длабочина) и UCS (пребарување со еднаков трошок). Сепак, неговата главна слабост е големиот мемориски трошок, бидејќи мора да чува голем број јазли од тековното ниво и претходните состојби за да избегне повторување и заглавување во циклуси. Во пракса, неинформираното пребарување ретко е „наивно“ во инженерска смисла. Дури и кога формално нема хеуристика, изборот на структура на податоци, третманот на повторени состојби, редоследот на оператори и ограничувањата на ресурси го менуваат однесувањето.

 BFS (Breadth-First Search)

Breadth-First Search пребарува по нивоа: прво ги разгледува сите состојби на растојание 1 од почетокот, потоа сите на растојание 2, итн. Интуитивно, тоа е „радијално“ ширење на фронтот на пребарување, што го прави природен избор кога трошокот по чекор е еднаков и кога сакаме најмал број чекори до целта. Во имплементација, BFS речиси секогаш се реализира со `queue` за фронтот.

Во имплементацијата, BFS најчесто се реализира со помош на структура на податоци queue (редица), која овозможува FIFO (first-in, first-out) пристап, односно прво се обработуваат јазлите кои биле додадени први. Една од најзначајните предности на BFS е неговата комплетност, односно доколку постои решение на конечна длабочина и факторот на разгранување е конечен, BFS сигурно ќе го најде тоа решение. Исто така, BFS е оптимален во смисла на минимален број чекори кога сите чекори имаат ист трошок, бидејќи првото решение што ќе го најде е најплиткото, односно најкраткото патување до целта.

Сепак, главната слабост на BFS е неговиот мемориски трошок. Поради тоа што алгоритмот мора да чува голем број јазли од тековното ниво и претходните нивоа за да избегне повторување и заглавување во циклуси, меморијата што ја користи расте експоненцијално со длабочината на најплиткото решение, приближно од редот (b^d), каде што (b) е факторот на разгранување, а (d) е длабочината. Ова може да го направи BFS непрактичен за проблеми со големи или длабоки простори на состојби. Исто така, во практични имплементации, за да се избегнат повторени посети на исти состојби, се користи структура visited или closed set, која овозможува глобална детекција на повторени состојби и значително ја намалува експанзијата во графови со многу спојувања.

Силата на BFS е во неговата систематичност. BFS не „заглавува“ во длабоки гранки пред да ги разгледа плитките, што е особено корисно во простори каде решенијата се релативно близу до стартот. Слабоста е што таа систематичност има висока цена во меморија, бидејќи мора да го чува целиот фронт на тековното ниво и (често) голем дел од претходните состојби за да избегне повторување.

Комплетност и оптималност на  BFS

BFS претставува алгоритам кој е комплетен и оптимален во одредени услови. Комплетност се однесува на способноста на алгоритмот да најде решение доколку такво постои во просторот на состојби. Во случајот на BFS, алгоритмот е комплетен под стандардни услови,тоа значи дека ако факторот на разгранување (b) е конечен и ако постои решение на конечна длабочина (d), BFS сигурно ќе го најде тоа решение. Оваа карактеристика произлегува од неговата стратегија на пребарување по нивоа, односно систематско проширување на сите јазли на растојание 1 од почетокот, потоа сите на растојание 2, и така натаму, сè додека не се достигне нивото каде што лежи решението. На тој начин не се заглавува во бесконечни гранки и се прескокнуваат потенцијални решенија на помали длабочини.

Оптималноста се однесува на тоа дали алгоритмот ќе најде најдобро (најевтино) решение според одреден критериум. Во контекст на BFS, оптималноста е гарантирана кога сите чекори имаат ист трошок, односно кога трошокот по чекор е константен. Тогаш најплиткото решение, кое BFS прво ќе го најде, е истовремено и најевтиното решение во смисла на минимален број чекори. Меѓутоа, ако чекорите имаат различни трошоци, BFS може да најде решение со минимален број чекори, но со поголем вкупен трошок, што значи дека престанува да биде оптимален според критериумот на минимален трошок. Во такви случаи, се користат други алгоритми како Uniform Cost Search (UCS), кои ја земаат предвид тежината на чекорите.  

Мемориски трошок на  BFS

Меморискиот трошок претставува една од најзначајните практични пречки при примена на алгоритмот Breadth-First Search (BFS) во реални проблеми. Главната причина за високата мемориска цена на BFS лежи во неговата стратегија на пребарување по нивоа, која бара чување на сите јазли од тековното ниво, како и голем дел од јазлите од претходните нивоа, за да се избегне повторување на состојби и заглавување во циклуси. Ова значи дека меморијата што ја користи BFS не е ограничена само на фронтот на пребарување, туку вклучува и акумулација на сите видени состојби, што дополнително ја зголемува потребата за простор.

Во најлош случај, бројот на јазли што се чуваат расте експоненцијално со длабочината на најплиткото решение. Ова експоненцијално зголемување значи дека иако BFS може да биде брз и ефикасен за мали длабочини, за проблеми со поголема длабочина мемориските барања стануваат непрактични и често надминуваат реални хардверски ограничувања, како што се капацитетите на RAM меморијата.

Исто така, во пребарување во графови, каде што постојат циклични патеки, неопходно е користење на „затворен сет“ (visited/closed set) за да се избегне повторно проширување на исти состојби. Иако ова ја зголемува ефикасноста и гарантира комплетност, истовремено ја зголемува мемориската потрошувачка. Во некои домени, за да се намали меморискиот отпечаток, се применуваат компромиси како ограничување на меморијата или делумно заборавање на некои состојби, но тоа обично доаѓа на сметка на формалните гаранции за комплетност и оптималност. Затоа, иако BFS е моќен и сигурен алгоритам, неговата примена во големи и комплексни простори на состојби е ограничена токму поради неговиот голем мемориски трошок.

DFS и варијанти

Depth-First Search (DFS) претставува алгоритам за пребарување во просторот на состојби, кој се карактеризира со стратегија на „нуркање“ по една гранка колку што е можно подлабоко пред да се врати назад и да продолжи со друга гранка. Овој пристап е природно имплементиран преку стек (stack) или рекурзија, што го прави мемориски многу поефикасен во споредба со алгоритми како Breadth-First Search (BFS). Во основната форма, DFS треба да ја чува само тековната патека и неколку помошни структури за враќање, што значи дека мемориската потрошувачка е од редот на длабочината на дрвото, а не експоненцијална како кај BFS.

Сепак, DFS има свои ограничувања. Поради својата природа, тој е чувствителен на структурата на просторот на пребарување и може да потроши огромно време во длабока гранка која не води до целта, особено ако решението се наоѓа „на страна“ и e релативно плитко. Во бесконечни или многу длабоки простори, DFS може да не заврши без дополнителни мерки, што го прави ризичен избор во такви случаи.

За да се надминат овие проблеми, се користат варијанти на DFS. Една од нив е Depth-Limited Search (DLS), која воведува лимит на длабочината до која алгоритмот може да нурне. Оваа модификација ја прави постапката безбедна во простори каде што постојат бескрајни гранки или рекурзивни структури, но истовремено воведува ризик од „cutoff“, ситуација кога решението постои, но подлабоко од лимитот, па алгоритмот може да врати дека не нашол решение.

Итеративното продлабочување (Iterative Deepening DFS) комбинира мемориската ефикасност на DFS со комплетноста и оптималноста на BFS. Овој метод извршува DLS со растечки лимити, почнувајќи од 0, па 1, 2, и така натаму, сè додека не се најде целта. Иако на прв поглед изгледа неефикасен поради повторното посетување на плитките јазли, во дрва со експоненцијален раст најголемиот дел од јазлите се на најдлабокото ниво, па повторувањето е релативно мала надградба во време. Клучната предност е што меморијата останува мала, слична на DFS, додека се враќа комплетноста како кај BFS.

Ограничена длабочина на DFS

DLS може да се разгледува како пример на ограничување на рационалниот процес на пребарување на вистината или решението, каде што ограничувањата на човечката способност за обработка на информации и ресурси го диктираат опсегот на истражување. Ова ја нагласува важноста на балансирање помеѓу длабочината на анализа и практичните ограничувања, што е релевантно и во пошироки контексти на филозофија на знаењето и методологија на истражување.

Ограничената длабочина (Depth-Limited Search, DLS) претставува варијанта на класичниот алгоритам за пребарување во длабочина (DFS), која воведува јасно дефиниран лимит (L) на максималната длабочина до која алгоритамот може да нурне во просторот на состојби. Оваа модификација има за цел да ја спречи потенцијалната бесконечна експанзија на пребарувањето во случаи кога просторот е многу длабок или содржи бесконечни гранки, што е чест проблем кај класичниот DFS.

Во практична смисла, DLS функционира така што алгоритамот се извршува како обичен DFS, но кога ќе достигне јазол на длабочина (L), тој не продолжува понатаму со проширување на наследниците на тој јазол. Ова значи дека пребарувањето е ограничено и не може да „потоне“ подалеку од зададениот лимит. Оваа карактеристика ја прави DLS особено корисна во домени каде што постои ризик од бесконечни патеки или кога е потребно да се контролира потрошувачката на ресурси, особено меморија и време.

Меѓутоа, воведувањето на лимитот (L) носи и одредени ограничувања. Најважното е што DLS не е комплетен алгоритам во општ случај, бидејќи може да се случи решението да постои, но на длабочина поголема од (L). Во таков случај, алгоритмот ќе врати дека не нашол решение, што се нарекува „cutoff“ ситуација. Затоа, DLS е комплетен само ако однапред знаеме дека решението лежи на длабочина помала или еднаква на (L). Во спротивно, DLS служи повеќе како алатка за контрола на ресурсите не како гарантирана метода за наоѓање цел.

Ограничената длабочина, со својата едноставност и ефективност во одредени случаи, често се користи како основа за понапредни техники, како што е итеративното продлабочување (Iterative Deepening DFS), кое ги надминува нејзините ограничувања преку постепено зголемување на лимитот и комбинира мемориската ефикасност на DFS со комплетноста на BFS.

Итеративно продлабочување (Iterative Deepening)

Итеративното продлабочување може да се гледа како модел на рационален процес на истражување кој балансира помеѓу длабочината на анализа и ограничувањата на ресурсите. Тој ја илустрира идејата дека систематичното и постепено проширување на знаењето, со контрола на сложеноста, овозможува ефикасно и сигурно приближување кон вистината или решението, без ризик од бескрајно „заглавување“ во некоја погрешна насока.

Во практична смисла, итеративното продлабочување е често најразумниот избор за неинформирано пребарување во сложени проблеми, бидејќи избегнува катастрофален мемориски раст, а сепак не ризикува бесконечно нуркање во погрешна гранка, што е чест проблем кај класичниот DFS со ограничена длабочина.

Итеративното продлабочување (Iterative Deepening Depth-First Search, IDDFS) претставува варијанта на пребарувањето во длабочина, која ги надминува ограничувањата на класичниот Depth-Limited Search (DLS) преку постепено зголемување на лимитот на длабочина. Овој метод комбинира две клучни предности: мемориската ефикасност на DFS и комплетноста (како и оптималноста по број на чекори) на BFS.

Принципот на работа на итеративното продлабочување е едноставен. Алгоритамот извршува серија од DLS пребарувања, почнувајќи од лимит на длабочина 0, потоа 1, 2, и така натаму, сè додека не се најде целната состојба. На прв поглед, ова може да изгледа како неефикасен пристап бидејќи истиот јазол на плитко ниво се посетува повеќе пати. Меѓутоа, во дрва со експоненцијален раст, најголемиот дел од јазлите се на најдлабокото ниво, па повторувањето на посетувањето на плитките јазли претставува релативно мала временска надградба.

Клучната предност на оваа техника е што мемориската потрошувачка останува мала, слична на класичниот DFS, бидејќи секое пребарување користи само стек за тековната патека до лимитот. Во исто време, итеративното продлабочување ја враќа комплетноста, односно гарантира дека ако постои решение на конечна длабочина, алгоритамот ќе го најде. Дополнително, кога сите чекори имаат еднаков трошок, IDDFS е и оптимален по број на чекори, што го прави исклучително корисен во ситуации кога не е позната длабочината на решението или кога просторот на пребарување е многу голем и потенцијално бесконечен.

UCS (Uniform Cost Search)

UCS може да се разгледува како модел на рационално одлучување во услови на ограничени ресурси и различни вредности на „трошокот“. Тој ја илустрира идејата дека рационалниот агент треба да ги земе предвид не само бројот на чекори, туку и квалитетот и тежината на секој чекор.

Uniform Cost Search (UCS) претставува техника во областа на неинформираното пребарување, која се одликува со својата способност да ги третира проблемите како задачи за минимизација на трошокот, наместо само минимален број чекори. За разлика од класичните алгоритми како што е пребарувањето во ширина (BFS), кои прошируваат јазли според нивната длабочина, UCS ги проширува јазлите според акумулираниот трошок од почетната состојба до тековниот јазол.

Оваа методологија е особено важна во ситуации кога различните акции или премини во просторот на решенија имаат различни трошоци. На пример, кога патиштата во мрежа имаат различни времиња на патување, енергетски трошоци или ризици. Во такви случаи, класичното BFS може да даде резултат кој е минимален по број на чекори, но не и оптимален по вкупен трошок. UCS, пак, обезбедува формална гаранција дека првпат кога ќе ја извлечеме целната состојба од приоритетниот ред, патеката до неа е најевтина, под услов сите трошоци да се позитивни. 

Технички, UCS е директна примена на алгоритмот на Дејкстра за наоѓање најкратки патеки во граф со ненегативни тежини, но гледано од перспектива на пребарување. Во UCS, како и во Дејкстра, се користи приоритетен ред и релаксација на растојанијата, а „затворениот сет“ од јазли кои се веќе финализирани гарантира дека нема да се појави поевтина патека до нив подоцна. Оваа паралела ја објаснува и оптималноста на UCS и неговата комплетност во рамките на поставените услови 

Сепак, UCS има и свои ограничувања. Кога трошоците се „чудни“, на пример, кога постојат негативни ребра или многу мали фракции, алгоритамот може да се соочи со проблеми како што се голем број проширувања или губење на стабилноста и оптималноста. Во такви случаи, потребни се други техники, како Bellman-Ford, или редефинирање на моделот на проблемот. Исто така, кога трошокот е повеќекритериумски, еднодимензионалниот пристап на UCS станува недоволен, што отвора простор за понапредни методи како Парето-пребарување (Pareto Search), каде „евтино“ добива поширока, и понекогаш политичка, интерпретација. 

Врска со Дејкстра

Паралелата помеѓу UCS и Дејкстра е длабока бидејќи „затворениот сет“ во UCS одговара на јазлите чии најдобри растојанија се финализирани во Дејкстра. Ова значи дека UCS не само што е комплетен и оптимален, туку и ефикасно ја користи структурата на графот и трошоците за да избегне непотребни проширувања и повторувања, што е клучно за практичната примена на алгоритмот во сложени проблеми со различни трошоци на акциите.

Uniform Cost Search (UCS) претставува алгоритам кој суштински е еквивалентен на алгоритмот на Дејкстра, но гледан низ призма на пребарување во простор на состојби. Дејкстрин алгоритам е класичен метод за наоѓање најкратки патеки од еден извор до сите други јазли во граф со ненегативни тежини на ребрата. Тој користи приоритетен ред и релаксација на растојанијата, при што секој пат кога ќе се извлече јазол со најмал тековен трошок, тој се „финализира“ односно, најевтиниот пат до него е пронајден и нема потреба од понатамошно ажурирање.

Во контекст на UCS, се применува истиот принцип, но со фокус на наоѓање на најевтин пат до конкретна целна состојба, а не до сите јазли. UCS користи приоритетен ред каде приоритетот е акумулираниот трошок од почетокот до тековниот јазол. Кога ќе ја извлечеме целната состојба од приоритетниот ред, алгоритамот гарантира дека патеката до неа е оптимална, односно најевтина, под услов сите трошоци да се позитивни. Оваа гаранција произлегува од истиот принцип како и кај Дејкстра, откако ќе се извлече јазол со најмал трошок, нема да се појави поевтина патека до него подоцна.

Што значи „евтино“ кога трошоците се чудни

UCS не е само технички алгоритам, туку и модел кој ја рефлектира сложеноста на рационалното одлучување во услови на неодреденост и повеќекритериумски вредности. Во контекстот на Uniform Cost Search (UCS), поимот „евтино“ традиционално се однесува на минимален акумулиран трошок од почетната состојба до тековниот јазол, при што се претпоставува дека сите трошоци се позитивни и релативно „нормални“ (на пример, позитивни реални броеви). Меѓутоа, кога трошоците стануваат „чудни“, како што се нула трошоци, многу мали фракции или дури негативни вредности, интуицијата за „евтино прво“ се комплицира и може да доведе до проблеми во работењето и перформансите на UCS.

Прво, нултите трошоци се формално дозволени и UCS останува коректен, односно ќе најде оптимално решение. Сепак, во практиката, тие можат да предизвикаат голем број проширувања во платоа каде што повеќе јазли имаат ист акумулиран трошок. Ова создава ситуации каде алгоритамот мора да избира меѓу многу „евтини“ патеки, што може да го зголеми времето на извршување и мемориската потрошувачка. Во такви случаи, начинот на решавање на врзувањето (tie-breaking) и третманот на повторени состојби стануваат критични за ефикасноста на алгоритамот.

Негативните трошоци претставуваат сериозен предизвик. Тие го нарушуваат основниот принцип на UCS (и на Дејкстра), според кој кога ќе се извлече јазол со најмал тековен трошок, тој е „финализиран“ и нема да се појави поевтина патека до него подоцна. Со негативни ребра, оваа гаранција се губи, бидејќи може да постои патека која по извлекувањето на јазолот ќе го намали неговиот трошок, што доведува до неоптимални резултати или нестабилно однесување на алгоритамот. Во такви случаи, потребни се други техники, како Bellman-Ford, или редефинирање на моделот на проблемот.

Исто така, кога трошокот е повеќекритериумски (на пример, време и ризик), еднодимензионалниот скаларен трошок повеќе не е доволен за да ја опфати комплексноста на проблемот. Тогаш мора да се користат техники како Парето-пребарување, каде „евтино“ станува повеќезначен и политички или вредносно обременет поим, а не само техничка дефиниција. Ова отвора простор за филозофски и етички размислувања за тоа како да се дефинира и вреднува „трошок“ во сложени системи и одлуки.

 Практични трикови

Практичните трикови ја преминуваат формалната теорија и ја претвораат во дисциплина на внимателен дизајн и инженеринг на пребарувачкиот процес, каде што дури и мали имплементациски детали можат да имаат драматично влијание врз резултатот. Границата меѓу неинформирано и информирано пребарување понекогаш станува порозна, бидејќи правилата за редослед и третман на состојби можат да инкорпорираат делумно доменско знаење без формална хеуристика

Практичните трикови во неинформираното пребарување претставуваат суштински аспект на успешната имплементација и примена на алгоритмите како што се BFS, DFS и UCS во реални системи. Тие не се формални хеуристики, туку инженерски техники и правила кои значајно влијаат на ефикасноста, комплетноста и оптималноста на пребарувањето, особено во сложени и големи простори на состојби.

Еден од клучните практични трикови е правилниот третман на повторените состојби. Во графови со циклуси, ако не се контролира повторното додавање на исти јазли во фронтот на пребарување, може да се изгуби комплетноста или да се зголеми експоненцијално сложеноста. Затоа, користењето на „затворен сет“ (closed set) кој ги бележи веќе посетените јазли е неопходно за избегнување бескрајни циклуси и непотребни проширувања. Ова е особено важно кај UCS, каде што трошоците варираат, а правилното ажурирање на приоритетниот ред и релаксацијата на растојанијата мора да бидат внимателно имплементирани.

Друг важен аспект е редоследот на генерација на наследници. Иако формално не влијае на оптималноста, во пракса тој може значително да влијае на брзината на наоѓање решение и на мемориската потрошувачка. На пример, приоритетно проширување на „потенцијално подобри“ јазли, дури и без експлицитна хеуристика, може да се смета за „инженерска хеуристика“ која го приближува неинформираното пребарување кон информираното.

Исто така, многу е важно вниманието кон ресурсите меморија и време. Во реални апликации, изборот на структура на податоци, оптимизацијата на операциите со приоритетен ред и ограничувањата на длабочината или бројот на проширувања се практични мерки кои овозможуваат пребарувањето да биде изводливо и ефикасно.

Детекција на циклуси

Во поширок контекст, детекцијата на циклуси ја одразува и потребата за рационално ограничување на бескрајните регресии и повторувања во процесот на донесување одлуки. Детекцијата на циклуси претставува основен проблем во неинформираното пребарување, посебно ако станува збор за графови кои можат да содржат повратни врски. Без соодветна контрола, алгоритмите како DFS, BFS или UCS може да влезат во бесконечни циклуси и со тоа пребарувањето неефикасно или дури и бескрајно.

Детекцијата на циклуси може да се прави на два нивоа: локално, по тековната патека, и глобално, преку „visited/closed“ структура. Локалната проверка е евтина и особено природна за DFS. Ако при проширување видиме дека наследникот е веќе на тековната патека, го сечеме за да не влеземе во непосредна јамка. Ова го спречува најочигледниот „самоубиствен“ случај, но не спречува повторни посети преку различни патеки.

Глобалната детекција со „visited„ е посилна бидејќи секоја состојба што сме ја виделе ја одбележуваме и не ја додаваме повторно. Ова значајно ја намалува експанзијата во графови со многу спојувања. Сепак, во UCS мора да се внимава, ако најдеме поевтина патека до веќе видена состојба, треба да ја ажурираме (decrease-key концепт), инаку можеме да ја изгубиме оптималноста. Значи „cycle detection“ не е само да „не посетуваме двапати“, туку правилно управување со најдобриот познат трошок по состојба.

 Редослед на оператори и хеуристичко „подтурнување“

Редоследот на оператори во неинформираното пребарување има практично влијание врз ефикасноста на алгоритмите, иако формално не го менува нивниот критериум за избор на јазол за проширување. Во алгоритми како DFS, редоследот на примената на операторите може да го промени времето потребно за наоѓање на решение. Ако „добриот“ оператор, односно оној што води побрзо кон целта, се применува прв, пребарувањето може брзо да стигне до целната состојба. Напротив, ако тој оператор е последен, алгоритмот може да нурне во долга и неплодна гранка, што значително го зголемува времето и ресурсите потребни за пребарување. Во BFS, ефектот од редоследот е помалку изразен бидејќи алгоритмот ги разгледува сите јазли на исто ниво, но сепак редоследот влијае на тоа која целна состојба ќе биде пронајдена прва и како се формира фронтот на пребарување.

Концептот на „хеуристичко подтурнување“ претставува практична техника која не го менува формалниот критериум на избор на јазол, туку само го подредува редоследот на наследниците така што „најперспективните“ се појавуваат порано во редицата. Во суштина, ова е инженерски пристап кој користи делумно доменско знаење за да се подобри перформансата на неинформираното пребарување, без да се загрози неговата комплетност или оптималност. Во BFS, ваквото подредување не ја нарушува оптималноста, бидејќи не се прескокнуваат нивоа, туку само се менува редоследот на разгледување во рамките на истото ниво.

Иако формално не користиме хеуристика, редоследот по кој ги применуваме операторите може да влијае на времето за пронаоѓање решение. Во DFS, ако „добриот“ оператор е прв, можеме брзо да стигнеме до цел, но ако е последен, може да нурнеме во долга неплодна гранка. Во BFS ефектот е посуптилен (бидејќи сепак ги разгледува сите на ниво), но редоследот влијае на тоа која целна состојба на исто ниво ќе ја најдеме прва, и како се формира фронтот.

„Хеуристичко подтурнување“ е практична техника каде не го менуваме критериумот на избор (на пример, остануваме BFS), но ги подредуваме наследниците така што „најперспективните“ да се појавуваат порано во редицата. Ова не ја руши комплетноста кај BFS/IDDFS, и не ја руши оптималноста по чекори кај BFS кога трошоците се еднакви, затоа што не прескокнуваме нивоа само го менуваме редоследот во рамки на истото ниво.

Leave a Reply

Your email address will not be published. Required fields are marked *