স্থানিক হ্যাশিংয়ের চেয়ে চতুর্ভুজটি কখন পছন্দনীয়?


12

আমি একই সাথে প্রচুর পরিমাণে একটি 2 ডি প্ল্যাটফর্মার তৈরি করছি। এগুলি সমস্ত এএবিবি সংঘর্ষ সনাক্ত করেছে। আমি প্রথমে চতুষ্পদার্থের সংখ্যা হ্রাস করার জন্য একটি চতুষ্পদ চেষ্টা করেছিলাম, কয়েকটি ভিন্ন কনফিগারেশন চেষ্টা করেছি, তবে এটি আমার প্রয়োজনীয় হিসাবে কার্যকর প্রমাণিত হয়নি। আমি একটি স্থানিক হ্যাশ প্রয়োগ করেছি এবং এটি আরও কার্যকর, প্রতিটি সংঘর্ষের জন্য যাচাই করার জন্য অবজেক্টগুলির সংখ্যা মারাত্মকভাবে হ্রাস পেয়েছে।

চতুর্ভুজ ব্যবহার করে 2 ডি সংঘর্ষ সনাক্তকরণ করা কি স্থানিক হ্যাশিংয়ের চেয়ে ভাল? আমার পরীক্ষাগুলি অনুসারে, মনে হয় স্থানিক হ্যাশিং সবসময় সংঘর্ষের জন্য পরীক্ষা করার জন্য কম বস্তুর সাথে শেষ হয়?

আমি অ্যালগরিদমগুলির সাথে সময় নির্ধারণ করিনি, তবে হ্যাশিং খুব ব্যয়বহুল বা কার্যকর করা যখন আপনি সি উদাহরণস্বরূপ কোডিং করছেন তখন প্রয়োগ করা খুব কঠিন? লক্ষণীয় বিষয় হ'ল আমি জাভাস্ক্রিপ্টে গেমটি লিখছি, যেখানে আপনার "নিখরচায়" হ্যাশিং রয়েছে।

এই তুলনা এখানে, আমি কিছু উপেক্ষা করেছি? http://zufallsgenerator.github.io/2014/01/26/visually-comparing-algorithms/

উত্তর:


12

চতুষ্পদ গাছের প্রধান সুবিধাটি হ'ল এটি আপনাকে খুব দ্রুত বিবেচনা থেকে বালতিগুলির পুরো দলগুলি বাতিল করতে দেয়।

উদাহরণস্বরূপ, ধরা যাক যে আমার ছয়টি স্তরযুক্ত একটি চতুষ্কোণ গাছ রয়েছে। এর সর্বনিম্ন স্তরে, এটি 32x32 বাক্স; নীচে, সর্বাধিক বিস্তারিত স্তরের সমন্বিত 1024 বাক্স। তুলনা করার জন্য, আমরা একটি "স্থানিক হ্যাশ" বিবেচনা করব - একটি সমতল গ্রিড যেখানে 32x32 বাক্স, মোট 1024 বাক্স রয়েছে। (কোয়াড ট্রিতে মোট 1024 টিরও বেশি বাক্স রয়েছে, কারণ এতে উচ্চতর স্তরের বৃহত্তর বাক্সও রয়েছে)

আসুন ধরে নেওয়া যাক যে সিস্টেমে কোনও সংঘর্ষযোগ্য বস্তু নেই - আমাদের কোয়াড ট্রি এবং আমাদের ফ্ল্যাট গ্রিডের সমস্ত বাক্স সম্পূর্ণ ফাঁকা।

যদি আপনি এমন কোনও কিছুর সংঘর্ষগুলি পরীক্ষা করে যা যথেষ্ট পরিমাণে যথেষ্ট হয় যে তার সীমানা বাক্সটি সমস্ত বাক্সকে ছেদ করে, এবং আপনি একটি সমতল গ্রিড ব্যবহার করছেন, আপনাকে সেখানে 1024 বাক্সের প্রতিটি একটিও পরীক্ষা করে দেখতে হবে যে এখানে কিছু আছে কিনা? তাদের।

তবে আপনি যদি নেস্টেড চতুষ্কোণ গাছটি ব্যবহার করছেন তবে খুব উচ্চ স্তরের স্তরটি আপনাকে বলতে পারে যে সিস্টেমে অন্য কোনও অবজেক্ট নেই এবং তাই আপনাকে কেবলমাত্র একটি একক বাক্সের দিকে নজর রাখতে হবে যে আপনি সংঘর্ষগুলি খুঁজে পাচ্ছেন না know গাছের গভীরে - আপনি তাত্ক্ষণিক পরীক্ষা বন্ধ করতে পারেন।

একইভাবে, যদি কেবলমাত্র কোয়াড গাছের নির্দিষ্ট অঞ্চলে জিনিসগুলি বিদ্যমান থাকে তবে কোয়াড ট্রি প্রাকৃতিকভাবে কেবল আপনার সম্ভাব্য প্রাসঙ্গিক বাক্সগুলির সাহায্যে আপনার অনুসন্ধানের জন্য গাইড করবে, যেখানে গ্রিডের জন্য আপনাকে প্রতিটি একক ছেদযুক্ত বাক্সটি পরীক্ষা করতে হবে, কারণ আপনার আগাম জানার কোনও উপায় নেই because কোন গ্রিড স্কোয়ারগুলিতে তাদের অবজেক্ট থাকবে। যদি আপনার কোয়াড গাছের বেশিরভাগ অংশ খালি থাকে এবং আপনি বড়, জটিল প্রশ্নগুলি (বলুন, ছোট, সাধারণ আয়তক্ষেত্রের পরিবর্তে বিশাল ক্যামেরা হতাশাগুলি) করছেন, তবে আপনি দেখতে পাবেন যে আপনি যদি মোটামুটি কম কিছু বাক্সের মধ্যে পুনরাবৃত্তি করেন তবে আপনি কোনও ফ্ল্যাট গ্রিডের চেয়ে গাছের কাঠামো ব্যবহার করে কিছু পরীক্ষা করে। এবং এটি একটি বড় পার্থক্য করতে পারে।

যার সবকটিই বোঝাতে পারে না যে একটি গাছের কাঠামো সবসময় অবশ্যই সঠিক পছন্দ। আপনার উদাহরণে যেমন পরিস্থিতি রয়েছে তার জন্য ফ্ল্যাট গ্রিডগুলি আদর্শ - বস্তুর ঘন মেঘ পৃথিবীর যে কোনও জায়গায় সমানভাবে ছড়িয়ে পড়ে এবং আমরা সহজ, সাশ্রয়ী সংঘর্ষের পরীক্ষা দিই। অবশ্যই কোনও গ্রিড সম্ভবত সেই ক্ষেত্রে সর্বোত্তম পদ্ধতির হতে পারে!


5
অত্যন্ত অলসতার জন্য ল্যাকোনিক সংক্ষিপ্তসার: চতুর্ভুজগুলি বিভিন্ন আকারের বস্তুগুলি দ্রুত হ্যান্ডেল করে।
আনকো

ধন্যবাদ, এটি একটি দুর্দান্ত উত্তর! বস্তুর ইউনিফর্ম আকার এমন কিছু ছিল যা আমার সন্দেহ হয়েছিল।
ক্রিস

আসলে, আপনি সাধারণত কোয়াড ট্রি সমস্ত স্তরের সন্ধান করতে হবে যেহেতু সাধারণভাবে কোনও বস্তু নেই কিনা তা পরীক্ষা করতে, একটি স্তর কেবল এমন অবজেক্ট সম্পর্কে তথ্য ধারণ করে যা উভয়ই সেই স্তরের সীমার মধ্যে পুরোপুরি ফিট করে এবং একটি নিম্ন স্তরেও খাপ খায় না।
মলতে

1
@ মলত আপনি যদি কোয়াড ট্রি প্রয়োগের উপর জোর দিয়ে থাকেন যা এই ধরণের কোয়েরিতে শুরুতে না পারে তবে তার পরিবর্তে একেবারে স্থানিক হ্যাশ ব্যবহার করুন; আপনি মেমরির ব্যয়ের 33% সাশ্রয় করবেন এবং আপনি এটির কোনও উপকার পাবেন না। অথবা বিকল্পভাবে, আপনি আপনার আদর্শগত বিশুদ্ধতাটি কেবল একটি স্মিজ আলগা করতে পারেন এবং একটি কোয়াড ট্রি ব্যবহার করতে পারেন যা প্রাথমিকভাবে বেরিয়ে যেতে পারে, প্রতিটি নোড তার বাচ্চাদের সত্তার সংখ্যার সন্ধান করে অন্যথায় ফাঁকা নোডের মতো একটি বিচ্ছিন্ন চতুর্ভুজ ব্যবহার করে যতক্ষণ না প্রয়োজন হয় গাছ থেকে লিঙ্কযুক্ত। বাস্তবিক। পাঁচ বছরেরও বেশি পরে।
ট্রেভর পাওয়েল

@ ট্রেভরপওয়েল অবশ্যই, আপনি ঠিক বলেছেন আমি আপনার গ্যারান্টিটি পেয়েছিলাম যে আপনাকে কেবল একটি একক বাক্সের দিকে নজর দিতে হবে। এটি ঠিক সত্য নয় কারণ আপনাকে এই গণনাগুলি অনুসরণ করতে হবে। যতদূর আমি বলতে পারি ততক্ষণে আপনি উপরের দিকে এবং আরও নীচে সংঘর্ষগুলি সন্ধান করতে পারেন।
ম্যালথে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.