এটি আপনার ডেটা কাঠামোর উপর নির্ভর করবে।
পুনর্নির্দেশিত প্রান্তগুলি সহ একটি ঘন গ্রাফের জন্য, আপনি ত্রিভুজাকার ম্যাট্রিক্স উপস্থাপনকারী বিট অ্যারেগুলির একটি তালিকা সত্যিই হারাতে পারবেন না। List<BitArray>
উদাহরণস্বরূপ একটি । যৌক্তিকভাবে, এটি দেখতে এটির মতো হবে:
0123
0
11
211
3001
41010
সেখান থেকে আপনি আপনার নোড ডেটা সঞ্চয় করে এমন একটি তালিকাতে সূচকটিতে বিটআর্রির সূচকটি ব্যবহার করতে পারেন।
উদাহরণস্বরূপ, নোডের প্রতিবেশী সকলকে পাওয়া এই রকম হবে:
// C#
List<Node> Nodes = /* populated elsewhere */
List<BitArray> bits = /* populated elsewhere */
public static IEnumerable<Node> GetNeighbours(int x)
{
for (int i = 0; i < bits[idx].Count; i++)
{
if (this.bits[idx][i])
yield return this.Nodes[i];
}
for (int i = 0; i < this.Nodes.Count; i++)
{
if (idx < this.bits[i].Count && this.bits[i][idx])
yield return this.Nodes[i];
}
}
(নোট করুন যে আপনি উপাত্তের পরিমাণের উপর নির্ভর করে সূচক প্রকারটিও বাইট বা ushort বা সেই লাইন বরাবর কিছু হতে বেছে নিতে পারেন কারণ সমস্ত সূচকগুলি ইতিবাচক হবে I আমি এটিকে তুচ্ছ হিসাবে এটি একটি মাইক্রো-অপ্টিমাইজেশন মনে করি না)
নির্দেশিত গ্রাফের জন্য, আপনি সংযোগ সংরক্ষণের জন্য বিটগুলির একটি * এন অ্যারের রুটে যাবেন ... যদি নোডের সংখ্যার তুলনায় এটি খুব কম বিস্ফোরিত হয়, যেখানে আপনি সূচকগুলির সংলগ্ন তালিকায় যেতে পারেন।