প্রসঙ্গ
ওল্ড লুকাস আর্টস (স্কাম্মভিএম এর যুগ) পয়েন্ট এবং ক্লিক করুন গ্রাফিক অ্যাডভেঞ্চার গেমস প্রাক্টম্পিউটেড পাথফাইন্ডিং ব্যবহৃত। কৌশলটির মোটামুটি রূপরেখা এখানে।
ধাপ 1
প্রতিটি ঘরের মেঝেতে তারা "ওয়াক বাক্স" বলে বিভক্ত ছিল, যা নেভিগেশন জালের নোডের তুলনায় বেশ সমান, তবে ট্র্যাপিজয়েড আকারগুলিতে সীমাবদ্ধ। উদাহরণ:
______ _____ _________ _____
\ A | B | C | D \
\_____| | |_______\
|_____| |
|_________|
ধাপ ২
একটি অফলাইন অ্যালগরিদম (উদাঃ ডিজজস্ট্রা বা এ *) প্রতিটি জোড় নোডের মধ্যে সবচেয়ে সংক্ষিপ্ত পাথ গণনা করে এবং প্রথম দিকের স্টেপটি 2 ডি ম্যাট্রিক্সে সঞ্চয় করে, ব্যবহৃত এবং শুরু করে এবং শেষ নোড দ্বারা প্রতিটি মাত্রায় সূচিযুক্ত হয়। যেমন উপরের ওয়াক বাক্স ব্যবহার করে:
___ ___ ___ ___
| A | B | C | D | <- Start Node
___|___|___|___|___|
| A | A | A | B | C | ---
|___|___|___|___|___| |
| B | B | B | B | C | |
|___|___|___|___|___| |-- Next node in shortest path
| C | B | C | C | C | | from Start to End
|___|___|___|___|___| |
| D | B | C | D | D | ---
|___|___|___|___|___|
^
|
End Node
আপনি অনুমান করতে পারেন, নোডের সংখ্যা বাড়ার সাথে সাথে মেমরির প্রয়োজনীয়তাগুলি দ্রুত বৃদ্ধি পায় (এন ^ 2)। যেহেতু একটি সংক্ষিপ্ত সাধারণত ম্যাট্রিক্সে প্রতিটি প্রবেশের জন্য যথেষ্ট পরিমাণে বড় হয়, 300 টি নোডের জটিল মানচিত্রের ফলে অতিরিক্ত স্টোরের ফলস্বরূপ:
300^2 * sizeof(short) = 176 kilobytes
ধাপ 3
অন্যদিকে, দুটি নোডের মধ্যে সংক্ষিপ্ততম পথটি গণনা করা ছিল অত্যন্ত দ্রুত এবং তুচ্ছ, ম্যাট্রিক্সের মধ্যে কেবল অনুসন্ধানের একটি সিরিজ। কিছুটা এইরকম:
// Find shortest path from Start to End
Path = {Start}
Current = Start
WHILE Current != End
Current = LookUp[Current, End]
Path.Add(Current)
ENDWHILE
সি থেকে এ ফিরে যাওয়ার সংক্ষিপ্ততম পথটি খুঁজতে এই সাধারণ অ্যালগরিদম প্রয়োগ করা:
1) Path = { C }, Current = C
2) Path = { C, B }, Current = B
3) Path = { C, B, A }, Current = A, Exit
প্রশ্ন
আমি সন্দেহ করছি যে প্রতিটি স্তরের জন্য এটি করার মেমরির প্রয়োজনীয়তার সাথে আজকের শক্তিশালী হার্ডওয়্যার সহ, এই কৌশলটি একবারে যে কোনও সুবিধা পেয়েছিল তা রানটাইমে কেবল একটি * সম্পাদনের মাধ্যমে এখন অপ্রত্যাশিত।
আমি আরও শুনেছি যে আজকাল মেমরির চেহারাগুলি সাধারণ গণনার চেয়েও ধীর হতে পারে, এজন্য সাইন এবং কোসাইন লুক সারণী তৈরি করা এখনকার মতো জনপ্রিয় নয়।
তবে আমি অবশ্যই স্বীকার করব যে আমি নিম্ন-স্তরের হার্ডওয়্যার দক্ষতার এই বিষয়গুলি সম্পর্কে এখনও খুব বেশি জ্ঞানী নই, তাই আমি এই বিষয়টির সাথে আরও পরিচিতদের মতামত জানতে এই সুযোগটি নিচ্ছি।
আমার ইঞ্জিনেও রানটাইমের সময় গ্রাফটিতে নোডগুলি গতিশীলভাবে যুক্ত এবং মুছে ফেলার সক্ষমতা প্রয়োজন (এটি দেখুন ) যাতে পূর্ববর্তী রুটটি কেবল জিনিসগুলিকে আরও জটিল করে তোলে, তাই আমি এটিকে স্ক্র্যাপ করে ফেলেছি (আমার রানটাইম এ * এর সমাধান না করার জন্য ইতিমধ্যে নিখুঁতভাবে চলছিল) )। তবুও, আমি ভাবছিলাম ...
নীচের লাইন, এই কৌশলটি কি আজও কোনও দৃশ্যে প্রাসঙ্গিক?