সব ধরণের মিশ্রণ বিদ্যমান। আপনার কাছে ডেটা স্ট্রাকচার রয়েছে, যা অ্যালগরিদম, অ্যালগরিদমের সাথে সম্পর্কিত নয়, যার কোনও (প্রকৃত) ডেটা স্ট্রাকচারের প্রয়োজন নেই, তবে বেশিরভাগ ক্ষেত্রে দুটি একটি প্যাকেজে আসে।
সম্পাদনা করুন: @ ডোল যথাযথভাবে নির্দেশিত হিসাবে, প্রতি সেটের ডেটা স্ট্রাকচারগুলির সাথে কোনও ক্রিয়াকলাপ যুক্ত নেই। ডেটা স্ট্রাকচার এবং অ্যালগরিদমের সংমিশ্রনের কাজটি একটি বিমূর্ত ডাটা টাইপ করে।
অ্যালগরিদম ছাড়াই ডেটা স্ট্রাকচার
উদাহরণস্বরূপ, দ্বি-মাত্রিক স্থানাঙ্কগুলি সংরক্ষণ করার জন্য একটি ডেটা স্ট্রাকচার বিবেচনা করুন Point
। এক বিন্দুর জন্য করণীয় অ্যালগরিদমের দিক থেকে অনেক কিছুই নেই এবং এটি সত্যই কেবল একটি মান x
এবং y
মানের জন্য একটি ধারক । অবশ্যই, এই ডেটা স্ট্রাকচারটি দেওয়া, আপনি এখন এটির শীর্ষে সমস্ত ধরণের অ্যালগরিদম যুক্ত করতে পারেন (দূরত্ব গণনা, উত্তল হাল, কী কী আছে)।
আপনি প্রচুর ডেটা স্ট্রাকচারের কথা ভাবতে পারেন, যা কেবলমাত্র ব্যক্তিগত ডেটা সংগ্রহ। এগুলি অভ্যাসে ঘন ঘন ঘটে গেলেও তারা ভাল শিক্ষাদানের উপাদান তৈরি করে না, কারণ এটি থেকে শেখার কিছুই নেই, একবার আপনি যখন বুঝতে পেরেছেন যে একক ডেটা আইটেমগুলি একটি নতুন ডেটা কাঠামোতে জড়ো করা যেতে পারে (যেমন আপনি কী শিখেন উপরের Point
উদাহরণের পরে , যদি আমি আপনাকে সেই দুর্দান্ত ভয়ঙ্কর ডেটা স্ট্রাকচার সরবরাহ করি Point3D
, যা ত্রিমাত্রিক জায়গার জন্য একই কাজ করতে পারে?)
(বাস্তব) ডেটা স্ট্রাকচার ছাড়াই অ্যালগরিদম
"রিয়েল", কারণ স্পষ্টতই প্রতিটি আকর্ষণীয় অ্যালগরিদমের জন্য পূর্ণসংখ্যা বা বুলিয়ানগুলির মতো আদিম উপাত্তের প্রয়োজন হয় এবং আমরা এই প্রসঙ্গে ডেটা স্ট্রাকচার হিসাবে বিবেচনা করতে চাই না। একইভাবে উপরের দিকেও, এই অ্যালগোরিদমগুলি সাধারণত বরং সাধারণ হয়। বিশেষত, তারা কোনও ধরণের জটিল অবস্থার সাথে আসে না, কারণ এটি সাধারণত কোনও ডাটা স্ট্রাকচারে যায় (পরের অংশটি দেখুন)।
যেমন একটি অ্যালগরিদমের জন্য একটি উদাহরণ দুটি সংখ্যার সবচেয়ে বড় সাধারণ বিভাজক গণনা করা হবে। ইউস্লিডের অ্যালগরিদমগুলি গিসিডির জন্য কেবলমাত্র দুটি পূর্ণসংখ্যা রাখা দরকার এবং সেগুলি ম্যানিপুলেট করে।
জিনিসগুলি আরও আকর্ষণীয় হয়ে উঠতে শুরু করলে, আপনি খুব শীঘ্রই বিমূর্ত ডেটা ধরণের বিশ্বে প্রবেশ করবেন। উদাহরণস্বরূপ, ইরোটোথিনিসের চালনী কোনও অ্যারের উপর ভিত্তি করে। অ্যারে এখনও আদিম কিনা, বা বাস্তবে, ইতিমধ্যে কোনও ডেটা স্ট্রাকচার না থাকলে আপনি আলোচনা করতে পারেন আমরা এখন আলোচনা করতে পারি। যে কোনও উপায়ে, ডেটা কাঠামো ছাড়াই সম্পূর্ণভাবে উপস্থিত অ্যালগরিদমগুলি বরং বিরক্তিকর, এমনকি যদি আপনি তাদের বিচ্ছিন্ন অস্তিত্ব স্বীকার করেন।
ডেটা স্ট্রাকচার, ওরফে অ্যাবস্ট্রাক্ট ডেটা ধরণের সাথে মিলিত অ্যালগরিদম
এখন এগুলি আকর্ষণীয়, তবে দুটি ভিন্ন কারণে। সাধারণত, আপনি দুটি দিক থেকে এগুলির কাছে যেতে পারেন: প্রথমে ডেটা কাঠামো, বা প্রথমে অ্যালগরিদম।
যদিও একটি বিমূর্ত তথ্য প্রকার ডেটা স্ট্রাকচার + অ্যালগরিদম / ক্রিয়াকলাপের সংমিশ্রণ দ্বারা সংজ্ঞায়িত করা হয়, আমরা প্রায়শই তাদের যেকোন একটিতে ফোকাস দিয়ে দেখি এবং অন্যটিকে সক্ষম হিসাবে বিবেচনা করি।
ডেটা স্ট্রাকচার, তারপরে অ্যালগরিদম
আপনি বিমূর্ত ডেটা ধরণের মুখোমুখি হবেন, যা ব্যবহার করা বরং সহজ, তবে তাদের অভ্যন্তরীণভাবে কাজ করতে আরও কম সংখ্যক জটিল অ্যালগরিদম জড়িত। উদাহরণস্বরূপ, একটি HashMap
ব্যবহার করা তুচ্ছ, তবে একটি নিফ্টি হ্যাশ ফাংশন এবং অভ্যন্তরের হ্যাশ সংঘর্ষের সাথে ডিলের সাথে জড়িত। তবুও, ব্যবহারকারী হিসাবে আপনার দৃষ্টিকোণ থেকে আপনি এটির জন্য এমন কিছু হিসাবে যত্নশীল যা আপনার জন্য কিছু করে যা আপনার জন্য কিছু করে না।
নীচের সর্বশেষ গোষ্ঠীর বিপরীতে, এই ডেটা স্ট্রাকচারগুলি তাদের ব্যবহারকারীদের এই অ্যালগোরিদমগুলিতে প্রকাশ করে না। HashMap
এটি ব্যবহারে সক্ষম হওয়ার জন্য আপনার কোনও অভ্যন্তরীণ হ্যাশ ফাংশন সম্পর্কে জানতে বা যত্ন নেওয়ার দরকার নেই । (যদিও এটি কার্যকরভাবে ব্যবহার করতে, আপনি এই জিনিসগুলি জানতে চাইতে পারেন;)
অ্যালগরিদম, তারপরে ডেটা স্ট্রাকচার
অন্য দিকটির অর্থ হল আপনার কাছে একটি অ্যালগরিদম রয়েছে, যা আপনি সহজভাবে ব্যবহার করতে সক্ষম হতে চান তবে এটি যা ইচ্ছা অনুযায়ী কাজ করার জন্য অভ্যন্তরীণভাবে ডেটা স্ট্রাকচার প্রয়োজন। উদাহরণ Point
হ'ল বাইনারি স্পেস পার্টিশনিং (বিএসপি) অ্যালগরিদম, আপনি কেবলমাত্র একটি প্রদত্ত কোয়েরি পয়েন্টের নিকটতম পয়েন্টের একটি বৃহত সেট থেকে দ্বি-মাত্রিক চাইতে পারেন । যাইহোক, আসলে অ্যালগরিদম লিখতে আপনার ভিতরে গাছের কাঠামো (এবং দূরত্ব গণনার মতো অতিরিক্ত আলগোরিদিম )ও প্রয়োজন need
সাধারণভাবে, কেউ বলতে পারেন যে এই গোষ্ঠীর আলগোরিদিমগুলি তাদের অভ্যন্তরীণ রাষ্ট্রের উপস্থাপনের জন্য জড়িত ডেটা স্ট্রাকচার ব্যবহার করে। আমি যুক্তি দিয়ে বলব যে এই অ্যালগোরিদমগুলির এই গ্রুপটি সবচেয়ে বৈচিত্রপূর্ণ এবং আপনি অনেকগুলি এই সাধারণ স্কিমের সাথে খাপ খায় এমনগুলি দেখতে পাবেন। দৃষ্টিকোণ সম্পর্কিত, আমরা এগুলি আকর্ষণীয় হিসাবে দেখি, কারণ তারা আমাদের জন্য কিছু করে (f.ex. বাছাই) করে এবং ডেটা হোল্ডিং অংশটি সম্পর্কে তেমন যত্ন নেয় না।
ঘনিষ্ঠভাবে সম্পর্কিত ডেটা স্ট্রাকচার এবং অ্যালগরিদমগুলি
অবশেষে, আপনার কাছে ডেটা স্ট্রাকচার রয়েছে, যা আলগোরিদিমগুলির সাথে খুব ঘনিষ্ঠভাবে সম্পর্কিত যা তাদের সাথে সরাসরি মিল রয়েছে। একটি সাধারণ উদাহরণ হ'ল বাইনারি গাছ, যা আপনি যখন এর সাথে অর্থপূর্ণ কিছু করতে চান, তখন আপনার উপর গাছ-চলার অ্যালগরিদমের বিষয়টিকে বাধ্য করে (গভীরতা-প্রথম, প্রস্থ-প্রথম, যাই হোক না কেন)।
এই ক্ষেত্রেগুলির জন্য, আমরা প্রায়শই প্রায়শই ফলস্বরূপ বিমূর্ত তথ্যের ধরণের দৃষ্টিভঙ্গির দৃষ্টি নিবদ্ধ রাখি। কখনও কখনও আপনি আপনার গাছের কাঠামো সম্পর্কে যত্নশীল হন, কয়েক মিনিট পরে আপনি এটিতে অনুসন্ধানের অপারেশন চালাতে সক্ষম হওয়ার বিষয়ে যত্নশীল হন, তারপরে আপনি কোনও নোড মুছে ফেলার বিষয়ে ভাবছেন এবং ঠিক কীভাবে কাঠামোটি পরে দেখায় সে সম্পর্কে ডানদিকে। যদিও এগুলি সমস্ত উপরের অন্যান্য বিভাগের ক্ষেত্রেও সত্য, তবে এটি আপনার মনের প্রাথমিক দৃষ্টি নিবদ্ধ করা বিষয় নয়, উদাহরণস্বরূপ, আপনি যখন / এ থেকে ডেটা সংরক্ষণ / পুনরুদ্ধার করবেন Map
বা যখন আপনি কোনও লিঙ্কযুক্ত তালিকাকে সৃজন করেন।