ওহে! আজকের পাঠটি বাকিদের থেকে কিছুটা আলাদা হবে। এটি ভিন্ন হবে যে এটি শুধুমাত্র জাভার সাথে পরোক্ষভাবে সম্পর্কিত। যে বলেন, এই বিষয় প্রতিটি প্রোগ্রামার জন্য খুবই গুরুত্বপূর্ণ. আমরা অ্যালগরিদম সম্পর্কে কথা বলতে যাচ্ছি । একটি অ্যালগরিদম কি? সহজ কথায়, এটি এমন কিছু কর্মের ক্রম যা একটি পছন্দসই ফলাফল অর্জনের জন্য অবশ্যই সম্পন্ন করতে হবে । আমরা প্রায়ই দৈনন্দিন জীবনে অ্যালগরিদম ব্যবহার করি। উদাহরণস্বরূপ, প্রতিদিন সকালে আপনার একটি নির্দিষ্ট কাজ থাকে: স্কুলে যান বা কাজে যান এবং একই সময়ে:
- জামাকাপড়
- পরিষ্কার
- ফেড
- একটি অ্যালার্ম ঘড়ি ব্যবহার করে জেগে উঠুন।
- একটি স্নান নিন এবং নিজেকে ধুয়ে নিন।
- সকালের নাস্তা এবং কিছু কফি বা চা তৈরি করুন।
- খাওয়া.
- আপনি যদি আগের সন্ধ্যায় আপনার জামাকাপড় ইস্ত্রি না করে থাকেন তবে সেগুলি ইস্ত্রি করুন।
- পোশাক পরে নাও.
- বাড়ি ছেড়ে চলে যান।
- ওয়েবস্টারের তৃতীয় নতুন আন্তর্জাতিক অভিধানের 1961 সংস্করণটি কিনুন বা ডাউনলোড করুন।
- এই অভিধানে আমাদের তালিকা থেকে প্রতিটি নাম খুঁজুন।
- কাগজের টুকরোতে, অভিধানের পৃষ্ঠাটি লিখুন যেখানে নামটি অবস্থিত।
- নামগুলি সাজানোর জন্য কাগজের টুকরা ব্যবহার করুন।
for
লুপ লিখুন যা এই কাজটি সম্পাদন করে
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
এই অ্যালগরিদম জটিলতা কি? লিনিয়ার, অর্থাৎ O(n)। প্রোগ্রামটি অবশ্যই কতগুলি ক্রিয়াকলাপ সম্পাদন করবে তা নির্ভর করে এতে কতগুলি সংখ্যা পাস করা হয়েছে তার উপর। অ্যারেতে 100টি সংখ্যা থাকলে, 100টি অ্যাকশন থাকবে (স্ক্রীনে স্ট্রিংগুলি প্রদর্শনের জন্য বিবৃতি)। যদি অ্যারেতে 10,000টি সংখ্যা থাকে, তাহলে 10,000টি ক্রিয়া সম্পাদন করতে হবে। আমাদের অ্যালগরিদম কোন উপায়ে উন্নত করা যেতে পারে? না। যাই হোক না কেন, আমাদেরকে অ্যারের মধ্য দিয়ে N পাস করতে হবে এবং কনসোলে স্ট্রিং প্রদর্শন করতে N স্টেটমেন্ট চালাতে হবে। আরেকটি উদাহরণ বিবেচনা করুন।
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
আমাদের একটি খালি আছে LinkedList
যার মধ্যে আমরা বেশ কয়েকটি সংখ্যা সন্নিবেশ করি। আমাদের উদাহরণে একটি একক সংখ্যা সন্নিবেশ করার অ্যালগরিদমিক জটিলতা LinkedList
এবং কীভাবে এটি তালিকার উপাদানগুলির সংখ্যার উপর নির্ভর করে তা মূল্যায়ন করতে হবে। উত্তর হল O(1), অর্থাৎ ধ্রুবক জটিলতা । কেন? মনে রাখবেন যে আমরা তালিকার শুরুতে প্রতিটি সংখ্যা সন্নিবেশ করান। উপরন্তু, আপনি মনে রাখবেন যে আপনি যখন একটি সংখ্যা সন্নিবেশ করান LinkedList
, উপাদানগুলি কোথাও সরে না। লিঙ্কগুলি (বা রেফারেন্স) আপডেট করা হয়েছে (যদি আপনি ভুলে যান যে লিঙ্কডলিস্ট কীভাবে কাজ করে, আমাদের পুরানো পাঠগুলির একটি দেখুন )। যদি আমাদের তালিকার প্রথম নম্বরটি হয় x
, এবং আমরা তালিকার সামনে y নম্বরটি সন্নিবেশ করি, তাহলে আমাদের যা করতে হবে তা হল:
x.previous = y;
y.previous = null;
y.next = x;
যখন আমরা লিঙ্কগুলি আপডেট করি, তখন আমরা চিন্তা করি না যে কতগুলি সংখ্যা ইতিমধ্যেই রয়েছেLinkedList
, এক বা এক বিলিয়ন। অ্যালগরিদমের জটিলতা ধ্রুবক, অর্থাৎ O(1)।
GO TO FULL VERSION