মেমরি ব্যবহার সম্পর্কে keyser5053 এর উত্তর যুক্ত করতে।
যে কোনও নির্দেশিত গ্রাফের জন্য, একটি সংলগ্ন ম্যাট্রিক্স (প্রতিটি প্রান্তে 1 বিট) n^2 * (1)
মেমরির বিট গ্রহণ করে।
একটি জন্য সম্পূর্ণ গ্রাফ , একটি সন্নিহিত অবস্থা তালিকা (64 বিট পয়েন্টার সঙ্গে) হ্রাস n * (n * 64)
মেমরি বিট, তালিকা ওভারহেড ব্যতীত।
অসম্পূর্ণ গ্রাফের জন্য, একটি সংলগ্ন তালিকা 0
মেমরির বিট গ্রহণ করে, তালিকার ওভারহেড ব্যতীত।
সংলগ্ন তালিকার জন্য, আপনি e
কোনও সন্নিবেশ ম্যাট্রিক্স মেমরির জন্য অনুকূল হওয়ার আগে সর্বাধিক প্রান্ত ( ) নির্ধারণ করতে অনুসরণ সূত্রটি ব্যবহার করতে পারেন ।
edges = n^2 / s
সর্বোচ্চ সীমা নির্ধারণ করতে, s
প্ল্যাটফর্মের পয়েন্টার আকারটি কোথায় ।
যদি আপনার গ্রাফটি গতিশীলভাবে আপডেট হয় তবে আপনি গড় দক্ষতা গণনা (প্রতি নোড) দিয়ে এই দক্ষতা বজায় রাখতে পারেন n / s
।
Bit৪ বিট পয়েন্টার এবং ডায়নামিক গ্রাফ সহ কয়েকটি উদাহরণ (একটি ডায়নামিক গ্রাফ পরিবর্তনের পরে সমস্যার সমাধান দক্ষতার সাথে আপডেট করে, পরিবর্তনের পরে প্রতিবার এটি স্ক্র্যাচ থেকে পুনরবৃত্ত করার চেয়ে।)
নির্দেশিত গ্রাফের জন্য, যেখানে n
300 হয়, সংলগ্ন তালিকা ব্যবহার করে নোডের প্রতি প্রান্তের সর্বোত্তম সংখ্যাটি হ'ল:
= 300 / 64
= 4
যদি আমরা এটি keyser5053 সূত্রে প্লাগ করি, d = e / n^2
( e
মোট প্রান্ত গণনাটি কোথায় ), আমরা দেখতে পারি যে আমরা ব্রেক পয়েন্টের নীচে ( 1 / s
):
d = (4 * 300) / (300 * 300)
d < 1/64
aka 0.0133 < 0.0156
তবে, পয়েন্টারের জন্য 64 বিট ওভারকিল হতে পারে। আপনি যদি পরিবর্তে পয়েন্টার অফসেট হিসাবে 16 বিট ইন্টিজার ব্যবহার করেন তবে ব্রেকিং পয়েন্টের আগে আমরা 18 টি প্রান্তের মধ্যে ফিট করতে পারি।
= 300 / 16
= 18
d = ((18 * 300) / (300^2))
d < 1/16
aka 0.06 < 0.0625
এই উদাহরণগুলির প্রত্যেকটি সংলগ্নতার ওভারহেড উপেক্ষা করে তাদের তালিকা করে ( 64*2
একটি ভেক্টর এবং 64 বিট পয়েন্টারগুলির জন্য)।