কোডটি কল্পনা করুন:
public class obj
{
// elided
}
public static Dictionary<string, obj> dict = new Dictionary<string, obj>();
পদ্ধতি 1
public static obj FromDict1(string name)
{
if (dict.ContainsKey(name))
{
return dict[name];
}
return null;
}
পদ্ধতি 2
public static obj FromDict2(string name)
{
try
{
return dict[name];
}
catch (KeyNotFoundException)
{
return null;
}
}
এই 2 টি কার্য সম্পাদনের ক্ষেত্রে পার্থক্য থাকলে আমি কৌতূহলী ছিলাম, কারণ প্রথমটির দ্বিতীয়টির চেয়ে কম হওয়া উচিত - অভিধানের কোনও মান রয়েছে কিনা তা দ্বিগুণ পরীক্ষা করা দরকার, দ্বিতীয় ফাংশনটিতে কেবল অভিধান অ্যাক্সেস করতে হবে একবার কিন্তু ওয়াও, এটি আসলে বিপরীত:
1 000 000 মানগুলির জন্য লুপ (100,000 বিদ্যমান এবং 900,000 বিদ্যমান নেই):
প্রথম ফাংশন: 306 মিলিসেকেন্ড
দ্বিতীয় ফাংশন: 20483 মিলিসেকেন্ড
তা কেন?
সম্পাদনা: আপনি এই প্রশ্নের নীচে মন্তব্যগুলিতে লক্ষ্য করতে পারেন, দ্বিতীয় অস্তিত্বের কার্যকারিতা 0 টি বিদ্যমান কী নেই এমন ক্ষেত্রে প্রথমটির তুলনায় কিছুটা ভাল। তবে একবার কমপক্ষে 1 বা ততোধিক অ-বিদ্যমান কী থাকলে, দ্বিতীয়টির পারফরম্যান্স দ্রুত হ্রাস পায়।
O(1)
অনুসন্ধানের ... বিশেষত যেহেতু দুটি O(1)
অপারেশন করা এখনও অনিচ্ছাকৃতভাবে O(1)
।
ContainsKey
প্রত্যাশিতO(1)
...