যখন আমি ইঞ্জিনটি কোডিং করছি, আমি প্রায়শই কেবল একটি স্থির সাথে সম্পর্কিত n
: আমি ইতিমধ্যে একটি স্পেসিয়াল পার্টিশন পেয়েছি যাতে প্রাপ্ত বস্তুর সংখ্যা সীমাবদ্ধ করে দেওয়া হয় update()
,physics()
এবং render()
স্ক্রিন এবং পার্শ্ববর্তী এলাকার আনুমানিক যারা। সর্বাধিক ব্যাচের আকার সাধারণত প্রতি-গেমের তুলনায় বেশ ভাল-সংজ্ঞায়িত হয় যদিও এটি আপনি পরিকল্পনা করার চেয়ে সামান্য বড়।
এই ক্ষেত্রে আমি ধ্রুবক ফ্যাক্টর গুণক এবং নিম্ন-অর্ডার শর্তগুলির সাথে যতটা উদ্বিগ্ন আমি বিগ-ও-তে তেমন উদ্বিগ্ন নই। রানটাইমের মতো a*n^2 + b*n + c
(যা হয় O(n^2)
) কোনও ফাংশনের জন্য , আমি প্রায়শই হ্রাস a
এবং সম্ভবত মুছে ফেলার সাথে অনেক বেশি উদ্বিগ্ন c
। একটি সেটআপ বা টিয়ারডাউন খরচ c
আনুপাতিকভাবে বড় বনাম একটি ছোট হয়ে যেতে পারেn
।
তবে, এটি বলার অপেক্ষা রাখে না যে বিগ-ও (বা আরও বিশেষত বড়-থিটা ) একটি দুর্দান্ত কোড গন্ধ সূচক। একটি দেখুনO(n^4)
কোথাও, বা আরও খারাপ O(k^n)
জ্যামিতিক সময় দেখুন এবং আপনি অন্যান্য বিকল্প বিবেচনা করছেন তা নিশ্চিত করার সময় এসেছে।
আমি যখন সাধারণত ডেটা তৈরির সরঞ্জামগুলি নিয়ে কাজ করি তখন বিগ-ও অনুকূলতার বিষয়ে আমি আরও বেশি উদ্বিগ্ন এবং নিম্ন বিগ-ও-এর সাথে অ্যালগরিদমগুলি খুঁজতে হুপসের মধ্য দিয়ে ঝাঁপিয়ে পড়ে। একটি প্রদত্ত স্তর / স্ট্রিমিং এরিয়াতে বস্তুর সংখ্যা সাধারণত ভালভাবে সংজ্ঞায়িত করা হয়, তবে পুরো গেম জুড়ে অবজেক্ট / শিল্প সম্পদ / কনফিগারেশন ফাইল / ইত্যাদি মোট সংখ্যা নাও হতে পারে। এটিও অনেক বড় সংখ্যা। এমনকি একটি সমান্তরাল ডেটা মেক চালানো, আমরা এখনও এক মিনিটের ক্রমের জন্য অপেক্ষা করি (আমি জানি, স্বেচ্ছাহীন সাদা - কনসোলগুলির জন্য ডেটা তৈরি করতে কয়েক ঘন্টা সময় লাগতে পারে - আমরা বেশিরভাগ ছোট হ্যান্ডহেল্ড গেমস) যেতে পারিjam data-clean && jam data
।
একটি সুনির্দিষ্ট উদাহরণ দেওয়ার জন্য: এটি ব্যাকগ্রাউন্ড টাইল-স্ট্রিমিং অ্যালগরিদম সহ সত্যই হাতছাড়া হয়ে গেছে যা 8x8 256-রঙের টাইলগুলি প্রবাহিত করে। ব্যাকগ্রাউন্ডের "স্তরগুলি" এর মধ্যে স্ট্রিমিং বাফারগুলি ভাগ করে নেওয়া দরকারী এবং আমাদের একটি নির্দিষ্ট স্তরে একই বাফার ভাগ করে নেওয়ার মধ্যে তাদের 6 টি পর্যন্ত থাকতে পারে। সমস্যাটি হ'ল প্রয়োজনীয় বাফারের আকার নির্ধারণ করা সমস্ত 6 টি স্তরের সম্ভাব্য অবস্থানের উপর ভিত্তি করে - এবং যদি সেগুলি প্রাথমিক সংখ্যার প্রস্থ / উচ্চতা / স্ক্রোল হার হয় তবে আপনি দ্রুত একটি বিস্তৃত অনুসন্ধানে প্রবেশ শুরু করুন - যা কাছে আসা শুরু করেO(6^numTiles)
- যা অনেক ক্ষেত্রে "মহাবিশ্বের চেয়ে বেশি দীর্ঘ হবে" বিভাগে। ভাগ্যক্রমে বেশিরভাগ ক্ষেত্রে মাত্র ২-৩ স্তর রয়েছে তবে তারপরেও আমরা আধ ঘন্টা রানটাইমের উপরে চলে যাই। এই মুহুর্তে, আমরা এই সম্ভাবনার একটি খুব ছোট উপসেট নমুনা করেছি, নির্দিষ্ট পরিমাণ সময় না কাটা পর্যন্ত গ্রানুলারিলিটি বাড়ছে (বা আমরা কাজটি শেষ করেছি, যা ছোট ডাবল-স্তর কনফিগারেশনের জন্য ঘটতে পারে)। আমরা কতবার ভুল প্রমাণিত হয়েছিল তার পূর্বের পরিসংখ্যানের ভিত্তিতে আমরা এই অনুমানটিকে কিছুটা দ্বিধাগ্রস্থ করি এবং তারপরে ভাল পরিমাপের জন্য কিছুটা অতিরিক্ত প্যাডিং যোগ করি।
অন্য একটি মজাদার উদাহরণ: কিছুক্ষণ আগে পিসি গেমটিতে নেতৃত্ব প্রকৌশলী কিছুটা সময় বাদ দিয়ে তালিকাগুলি বাদ দিয়ে পরীক্ষা করেছিলেন । মেমরির ওভারহেড আরও ক্যাশে প্রভাব তৈরি করে, যা পুরো ব্যাপারটিতে এক ধরণের অ-ধ্রুবক গুণক যুক্ত করে - তাই এগুলি সামান্য ক্ষেত্রে মোটেই ভাল পছন্দ নয়'ren
। তবে বৃহত্তর সাজানো তালিকার জন্য যেখানে অনুসন্ধানগুলি ঘন ঘন হয়, তারা একটি সুবিধা দেয় provide
(আমি প্রায়শই দেখতে পাই যে নিষ্পাপ অ্যালগরিদম উচ্চ বিগ-ও, ছোট ডেটা সেটগুলিতে দ্রুত এবং সহজে বোঝা যায়; আরও আকর্ষণীয় / জটিল (যেমন প্যাট্রিসিয়া ট্রাই) লোকেদের বুঝতে এবং বজায় রাখা আরও শক্ত, তবে বৃহত্তর উপরের উচ্চতর পারফরম্যান্স) ডেটা সেট।)