ბილიკის პრობლემა არის ფუნდამენტური პრობლემა გამოთვლითი სირთულის თეორიაში, რომელიც მოიცავს გრაფაში ორ წვეროს შორის გზის პოვნას. მოცემული გრაფიკის G = (V, E) და ორი წვერის s და t, მიზანია დავადგინოთ არის თუ არა გზა s-დან t-მდე G-ში.
ბილიკის პრობლემის გადასაჭრელად, ერთი მიდგომაა მარკირების ალგორითმის გამოყენება. მარკირების ალგორითმი არის მარტივი და ეფექტური ტექნიკა, რომელიც შეიძლება გამოყენებულ იქნას იმის დასადგენად, არის თუ არა გზა გრაფიკის ორ წვეროს შორის.
ალგორითმი მუშაობს შემდეგნაირად:
1. დაიწყეთ საწყისი წვერის s მონიშნით, როგორც მონახულებული.
2. s-ის მიმდებარე ყოველი v წვეროსთვის, მონიშნეთ v როგორც მონახულებული და დაამატეთ ის რიგში.
3. სანამ რიგი ცარიელი არ არის, გაიმეორეთ შემდეგი ნაბიჯები:
ა. ამოიღეთ წვერო u რიგიდან.
ბ. თუ u არის სამიზნე t წვერო, მაშინ ნაპოვნია გზა s-დან t-მდე.
გ. წინააღმდეგ შემთხვევაში, u-ის მიმდებარე v წვეროზე, რომელიც არ არის მონახულებული, მონიშნეთ v როგორც მონახულებული და დაამატეთ ის რიგში.
მარკირების ალგორითმი იყენებს სიგანის პირველი ძიების (BFS) გადაკვეთის სტრატეგიას, რათა გამოიკვლიოს გრაფიკი და მონიშნოს წვეროები, როგორც მონახულებული. ამით ის უზრუნველყოფს, რომ სასტარტო წვეროდან მისაწვდომი ყველა წვერო მონახულებულია, რაც ალგორითმს საშუალებას აძლევს განსაზღვროს არის თუ არა გზა საწყის და სამიზნე წვეროებს შორის.
მარკირების ალგორითმის დროის სირთულე არის O(|V| + |E|), სადაც |V| არის გრაფაში წვეროების რაოდენობა და |E| არის კიდეების რაოდენობა. ეს იმიტომ ხდება, რომ ალგორითმი ერთხელ ეწვევა თითოეულ წვეროს და თითოეულ კიდეს. გამოთვლითი სირთულის თეორიის თვალსაზრისით, მარკირების ალგორითმი მიეკუთვნება P კლასს, რომელიც წარმოადგენს ამოცანებს, რომელთა გადაჭრა შესაძლებელია პოლინომიურ დროში.
აქ არის მაგალითი მარკირების ალგორითმის გამოყენების საილუსტრაციოდ:
განვიხილოთ შემდეგი გრაფიკი:
A --- B --- C | | D --- E --- F
ვთქვათ, გვინდა განვსაზღვროთ არის თუ არა გზა A წვეროდან F წვერომდე. მარკირების ალგორითმი შეგვიძლია გამოვიყენოთ შემდეგნაირად:
1. დაიწყეთ A წვეროს მონიშნით, როგორც მონახულებული.
2. რიგს დაამატეთ A წვერო.
3. ამოიღეთ A წვერო რიგიდან.
4. მონიშნე B წვერო, როგორც მონახულებული და დაამატეთ ის რიგში.
5. ამოიღეთ B წვერო რიგიდან.
6. მონიშნეთ C წვერო, როგორც მონახულებული და დაამატეთ ის რიგში.
7. ამოიღეთ წვერო C რიგიდან.
8. მონიშნე D წვერო მონახულებულად და დაამატეთ ის რიგში.
9. ამოიღეთ წვერო D რიგიდან.
10. მონიშნეთ E წვერო მონახულებულად და დაამატეთ ის რიგში.
11. ამოიღეთ წვერო E რიგიდან.
12. მონიშნე F წვერო მონახულებულად.
13. ვინაიდან F წვერო არის სამიზნე წვერო, ნაპოვნია გზა A-დან F-მდე.
ამ მაგალითში მარკირების ალგორითმი წარმატებით ადგენს, რომ არსებობს გზა A წვეროდან F წვერომდე.
გამოთვლითი სირთულის თეორიაში ბილიკის პრობლემა გულისხმობს გრაფაში ორ წვეროს შორის გზის პოვნას. მარკირების ალგორითმი არის მარტივი და ეფექტური ტექნიკა, რომელიც შეიძლება გამოყენებულ იქნას ამ პრობლემის გადასაჭრელად პირველი სიგანის ძიების განხორციელებით და მონახულებული წვეროების მარკირებით. ალგორითმს აქვს დროის სირთულე O(|V| + |E|) და მიეკუთვნება P კლასს.
სხვა ბოლოდროინდელი კითხვები და პასუხები სირთულე:
- PSPACE კლასი არ არის EXPSPACE კლასის ტოლი?
- არის P სირთულის კლასი PSPACE კლასის ქვესიმრავლე?
- შეგვიძლია დავამტკიცოთ, რომ Np და P კლასი ერთნაირია, თუ ვიპოვით ეფექტური პოლინომიური ამოხსნის ნებისმიერი NP სრული ამოცანის დეტერმინისტულ TM-ზე?
- შეიძლება NP კლასი იყოს EXPTIME კლასის ტოლი?
- არის თუ არა პრობლემები PSPACE-ში, რომლისთვისაც არ არის ცნობილი NP ალგორითმი?
- შეიძლება თუ არა SAT პრობლემა იყოს NP სრული პრობლემა?
- შეიძლება თუ არა პრობლემა იყოს NP სირთულის კლასში, თუ არსებობს არადეტერმინისტული ტურინგ მანქანა, რომელიც გადაჭრის მას პოლინომიურ დროში
- NP არის ენების კლასი, რომლებსაც აქვთ დროის პოლინომიური გადამოწმებები
- არის P და NP რეალურად ერთი და იგივე სირთულის კლასი?
- არის ყველა კონტექსტის თავისუფალი ენა P სირთულის კლასში?
იხილეთ მეტი კითხვა და პასუხი სირთულის განყოფილებაში