ডেটা স্ট্রাকচার কি?
ডেটা স্ট্রাকচার হল ডেটা সংগঠিত ও অ্যাক্সেস করার একটি নির্দিষ্ট উপায় .
উদাহরণগুলির মধ্যে রয়েছে:
- অ্যারে
- বাইনারী গাছ
- হ্যাশ
বিভিন্ন ডেটা স্ট্রাকচার বিভিন্ন কাজে পারদর্শী।
উদাহরণস্বরূপ, যদি আপনি একটি অভিধান (শব্দ এবং সংজ্ঞা) বা একটি ফোন বুক (ব্যক্তির নাম এবং নম্বর) মতো দেখতে ডেটা সংরক্ষণ করতে খুঁজছেন তবে হ্যাশগুলি দুর্দান্ত।
কি ডেটা স্ট্রাকচার উপলব্ধ জানা , এবং এদের প্রত্যেকের বৈশিষ্ট্য , আপনাকে আরও ভালো রুবি ডেভেলপার করে তুলবে।
এই নিবন্ধে আপনি যা শিখবেন!
অ্যারে বোঝা
অ্যারে হল প্রথম ডেটা স্ট্রাকচার যা আপনি যখন প্রোগ্রামিং সম্পর্কে পড়া শুরু করেন তখন আপনি শিখেন।
অ্যারেগুলি মেমরির একটি সংলগ্ন অংশ ব্যবহার করে যেখানে বস্তুগুলি তাদের মধ্যে ফাঁক ছাড়াই একের পর এক সংরক্ষণ করা হয়৷
নিম্ন-স্তরের প্রোগ্রামিং ভাষার বিপরীতে, যেমন C, রুবি আপনার মেমরি পরিচালনা, সর্বাধিক অ্যারের আকার প্রসারিত করার এবং উপাদানগুলি মুছে ফেলার সময় এটিকে সংকুচিত করার সমস্ত কঠোর পরিশ্রম করে।
ব্যবহার করে :
- আরো উন্নত ডেটা স্ট্রাকচারের ভিত্তি হিসেবে
- লুপ চালানো থেকে ফলাফল সংগ্রহ করতে
- আইটেম সংগ্রহ করা হচ্ছে
আপনি সব জায়গায় অ্যারে পাবেন, যেমন split
&chars
পদ্ধতি, যা একটি স্ট্রিংকে অক্ষরের একটি অ্যারেতে বিভক্ত করে।
উদাহরণ :
out =[]10. বার { |i| আউট <<আমি }# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
নিম্নলিখিত সারণী আপনাকে দেখায় যে অ্যারের আকার বৃদ্ধির সাথে সাথে বিভিন্ন অ্যারে অপারেশনগুলি কীভাবে আচরণ করে৷
আপনি যদি সময় জটিলতার স্বরলিপির সাথে পরিচিত না হন তবে এই নিবন্ধটি পড়ুন।
অ্যারেগুলির জন্য সময় জটিলতা :
অপারেশন | জটিলতা |
---|---|
ধাক্কা | O(1) |
পপ | O(1) |
অ্যাক্সেস | O(1) |
খুঁজুন | ৷O(n) |
মুছুন | ৷O(n) |
এটি কেন সহায়ক?
কারণ এটি আপনাকে অ্যারের কর্মক্ষমতা বৈশিষ্ট্য বলে।
আপনি যদি অনেক find
করছেন একটি বিশাল অ্যারের অপারেশন যা ধীর হতে চলেছে...
কিন্তু আপনি যদি জানেন যে কোন সূচীগুলি ব্যবহার করতে হবে, তাহলে O(1)
এর কারণে একটি অ্যারে দ্রুত হতে চলেছে সময় জটিলতা।
এই মানদণ্ডের সাথে আপনার ডেটা কাঠামো চয়ন করুন :
- কর্মক্ষমতা বৈশিষ্ট্য => আপনি ডেটা দিয়ে কি করছেন? আপনার ডেটাসেট কত বড়?
- আপনার ডেটার আকার ও ফর্ম => আপনি কি ধরনের ডেটা নিয়ে কাজ করছেন? আপনি কি আপনার ডেটা পুনরায় সংগঠিত করতে পারেন যাতে এটি একটি ভাল ডেটা কাঠামোর সাথে ফিট করে?
হ্যাশ ডেটা স্ট্রাকচার
আপনার কি দেশের কোড এবং দেশের নামের মধ্যে একটি ম্যাপিং আছে?
অথবা হয়ত আপনি শুধু স্টাফ গুনতে চান।
হ্যাশগুলি ঠিক এই জন্যই সহায়ক!
একটি হ্যাশ হল একটি ডেটা স্ট্রাকচার যেখানে প্রতিটি মানের একটি কী থাকে এবং এই কী যেকোনো কিছু হতে পারে , যেমন একটি স্ট্রিং, একটি পূর্ণসংখ্যা, একটি প্রতীক, ইত্যাদি।
এটি কিভাবে কাজ করে?
একটি হ্যাশ আপনার কীকে একটি সংখ্যায় রূপান্তর করে (hash
ব্যবহার করে রুবিতে পদ্ধতি) এবং তারপর সেই সংখ্যাটিকে সূচক হিসাবে ব্যবহার করে। কিন্তু আপনার রুবি প্রোগ্রামগুলিতে হ্যাশ ব্যবহার করতে সক্ষম হওয়ার জন্য আপনাকে বুঝতে হবে না।
ব্যবহার করে :
- একটি স্ট্রিং এ অক্ষর গণনা
- সংজ্ঞায় শব্দ ম্যাপিং, ফোন নম্বরে নাম ইত্যাদি।
- একটি অ্যারের মধ্যে ডুপ্লিকেট খুঁজুন
উদাহরণ :
"aaabcd" .each_char .with_object(Hash.new(0)) { |ch, হ্যাশ| hash[ch] +=1 }# {"a"=>3, "b"=>1, "c"=>1, "d" =>1}
সময় জটিলতা :
অপারেশন | জটিলতা |
---|---|
স্টোর | O(1) |
অ্যাক্সেস | O(1) |
মুছুন | ৷O(1) |
খুঁজুন (মান) | O(n) |
ধ্রুবক O(1)
এর কারণে কর্মক্ষমতার ক্ষেত্রে হ্যাশগুলি সবচেয়ে সহায়ক ডেটা স্ট্রাকচারগুলির মধ্যে একটি। সঞ্চয়, মুছে ফেলা এবং অ্যাক্সেস সময়।
একটি হ্যাশের প্রসঙ্গে খুঁজুন মানে আপনি একটি নির্দিষ্ট মান খুঁজছেন।
স্ট্যাকস
একটি স্ট্যাক একটি প্লেটের স্তুপের মতো, আপনি একটি প্লেটের উপরে আরেকটি প্লেট রাখেন এবং আপনি শুধুমাত্র উপরের প্লেটটি সরাতে পারেন।
এটি প্রথমে শোনার চেয়ে বেশি কার্যকর!
ব্যবহার করে :
- একটি নিয়মিত লুপ দিয়ে পুনরাবৃত্ত পদ্ধতি প্রতিস্থাপন করে
- সাম্প্রতিক কাজগুলিকে উপরে রেখে বাকি কাজগুলির উপর নজর রাখুন
- একটি অ্যারে বিপরীত করুন
উদাহরণ :
স্ট্যাক =[1,2,3,4,5](1..stack.size)।ম্যাপ { stack.pop }# [5, 4, 3, 2, 1]
হ্যাঁ, আপনি reverse
ব্যবহার করতে পারেন পরিবর্তে।
এটি আপনাকে স্ট্যাকের এই বিশেষ বৈশিষ্ট্যটি দেখানোর জন্য শুধুমাত্র একটি উদাহরণ।
সময় জটিলতা :
অপারেশন | জটিলতা |
---|---|
ধাক্কা | O(1) |
পপ | O(1) |
খুঁজুন | ৷--- |
অ্যাক্সেস | --- |
লক্ষ্য করুন যে স্ট্যাকের (এবং সারি) শুধুমাত্র দুটি অপারেশন আছে, insert
&delete
, অথবা push
&pop
.
যদিও এটি একটি স্ট্যাকের ভিতরে অনুসন্ধান করা সম্ভব, এটি খুব বিরল৷
৷কিভাবে বাইনারি ট্রি ব্যবহার করবেন
বেশিরভাগ রুবি ডেভেলপার সম্ভবত বাইনারি গাছ সম্পর্কে শুনেছেন কিন্তু কখনও ব্যবহার করেননি।
এটা কেন?
প্রথমত, আমাদের কাছে বিল্ট-ইন বাইনারি ট্রি ইমপ্লিমেন্টেশন নেই।
দ্বিতীয়ত, একটি বাইনারি ট্রি দৈনন্দিন প্রোগ্রামিং চ্যালেঞ্জের জন্য সহায়ক নয়, অ্যারে এবং হ্যাশের বিপরীতে যা আপনি সর্বদা ব্যবহার করেন।
কিন্তু বাইনারি গাছ একটি খুব আকর্ষণীয় ডেটা কাঠামো .
আসলে, অনেক বৈচিত্র রয়েছে, যেমন ট্রাই (পরবর্তী বিভাগে কভার করা হয়েছে), বহুমুখী গাছ যেমন বি-ট্রি (ডাটাবেসে ব্যবহৃত) এবং হিপ।
ব্যবহার করে :
- ডেটা কম্প্রেশন
- রাউটিং টেবিল
- বিমূর্ত সিনট্যাক্স ট্রি (AST)
উদাহরণ :
# https://github.com/jamesconant/bstreerequire 'bstree'root =Bstree::Node.new(5)root.insert(2)root.insert(7)root.search(3)# শূন্যপ্রে>সময় জটিলতা :
অপারেশন | জটিলতা |
---|---|
ঢান | O(log n) |
মুছুন | ৷O(log n) |
খুঁজুন | ৷O(log n) |
অ্যাক্সেস | --- |
একটি সুষম বাইনারি গাছ হল যখন সমস্ত নোডের দুটি সন্তান থাকে এবং সমস্ত পাতা একই স্তরে থাকে
যদি একটি গাছ ভারসাম্যহীন হয়ে পড়ে, কর্মক্ষমতা হ্রাস পায় O(n)
.
একটি স্ব-ভারসাম্যপূর্ণ বাইনারি গাছে (রেড-ব্ল্যাক ট্রি, বা AVL গাছের মতো), প্রতিটি অপারেশনে গাছের উচ্চতা (বা স্তরের) সমানুপাতিক সময় লাগে।
লক্ষ্য করুন কিভাবে অ্যাক্সেসের সময় নেই কারণ একটি নোড অ্যাক্সেস করার জন্য আপনাকে প্রথমে এটি খুঁজে বের করতে হবে...
সেক্ষেত্রে, আপনার কাছে O(log n)
থাকবে অ্যাক্সেসের জন্য।
কিন্তু একটি নির্দিষ্ট নোডে একটি রেফারেন্স (একটি পরিবর্তনশীল হিসাবে) রাখলে, সেটি হবে O(1)
অ্যাক্সেস সময়।
ট্রাই ডেটা স্ট্রাকচার
একটি ট্রাই একটি বিশেষায়িত গাছের মতো ডেটা কাঠামো৷
এটি শব্দগুলির সাথে কাজ করার জন্য সহায়ক, এবং তারপরে দ্রুত শব্দগুলি অনুসন্ধান করা যা একটি উপসর্গ দিয়ে শুরু হয়, বা সম্পূর্ণ শব্দটি অনুসন্ধান করে৷
ব্যবহার করে :
- শব্দের খেলা
- বানান পরীক্ষক
- স্বয়ংসম্পূর্ণ পরামর্শ
উদাহরণ :
# https://github.com/gonzedge/rambling-trierequire 'rambling-trie'trie =Rambling::Trie.create('words.txt')trie.include?('chocolate')# truetrie.include ?('স্যালমন')# সত্য
সময় জটিলতা :
অপারেশন | জটিলতা |
---|---|
যোগ করুন | O(k) |
অন্তর্ভুক্ত? | O(k) |
শব্দ | O(k) |
এই টেবিলে, আমি k
ব্যবহার করি ইনপুট স্ট্রিং এর আকার বোঝাতে, যখন n
ডেটা স্ট্রাকচারের আকার বোঝাতে ব্যবহৃত হয়।
তাই apple
শব্দের জন্য , k
5 হবে।
সারাংশ
আপনি সাধারণ ডেটা স্ট্রাকচার, তাদের প্রধান ব্যবহার এবং বৈশিষ্ট্য এবং রুবিতে কীভাবে ব্যবহার করবেন সে সম্পর্কে শিখেছেন।
আপনি যখন এই নতুন জ্ঞান প্রয়োগ করবেন তখন আপনি দ্রুত সমস্যার সমাধান করতে সক্ষম হবেন!
আপনি কি আমার জন্য এই পোস্টটি শেয়ার করতে পারেন যদি আপনি এটি সহায়ক বলে মনে করেন?
ধন্যবাদ 🙂