ডেটা স্ট্রাকচার এবং অ্যালগরিদমের মধ্যে সম্পর্ক কী? [বন্ধ]


13

আমি ডেটা স্ট্রাকচারে একটি ভাল অনলাইন কোর্সের সন্ধান করছি কিন্তু খুঁজে পেয়েছি যে গুগল অ্যালগরিদম কোর্সের ফলাফলও ফিরিয়ে দেয়, যা স্টাফ বলে:

এই কোর্সে আপনি অ্যালগরিদম ডিজাইনের কয়েকটি মৌলিক নীতিগুলি শিখবেন: ডিভাইড-অ্যান্ড-বিজয়ের পদ্ধতি, গ্রাফ অ্যালগরিদম, ব্যবহারিক ডেটা স্ট্রাকচার (হিপস, হ্যাশ টেবিল, অনুসন্ধানের গাছ) , এলোমেলোনাযুক্ত অ্যালগরিদম এবং আরও অনেক কিছু। [সূত্র]

এবং

এই শ্রেণীর শেষে আপনি গ্রাফ এবং অন্যান্য গুরুত্বপূর্ণ ডেটা স্ট্রাকচারের জন্য নতুন অ্যালগরিদমগুলি তৈরি করার জন্য এবং এই অ্যালগরিদমের দক্ষতা মূল্যায়নের জন্য প্রয়োজনীয় ধারণাগুলি বুঝতে পারবেন । [সূত্র]

এবং

এই কোর্সটি গণ্য সমস্যাগুলির গাণিতিক মডেলিংয়ের একটি ভূমিকা সরবরাহ করে। এটি এই সমস্যাগুলি সমাধান করার জন্য ব্যবহৃত সাধারণ অ্যালগরিদম, অ্যালগরিদমিক দৃষ্টান্ত এবং ডেটা স্ট্রাকচারকে কভার করে । [সূত্র]

আমার প্রশ্ন হ'ল: কি অ্যালগরিদম এবং ডেটা স্ট্রাকচারগুলি ঘনিষ্ঠভাবে লিঙ্কযুক্ত, যার অর্থ তারা একসাথে বুঝতে হবে বা একটি বিষয় অন্যটির চেয়ে বেশি ভিত্তিগত?

সম্পাদনা: এই প্রশ্নটি বন্ধ করার জন্য যারা ভোটদান করছেন, আপনি দয়া করে আমাকে বলতে পারেন কেন এবং সম্ভবত এটির কীভাবে উন্নতি করা যায়? সঠিক প্রশ্ন জিজ্ঞাসা করা শিক্ষা প্রক্রিয়ার একটি অংশ is


17
একটি ডেটা স্ট্রাকচার স্থির এবং কিছুই করতে পারে না। একটি অ্যালগোরিদম হ'ল কিছু ডেটা সম্পাদন করার জন্য নির্দেশাবলীর একটি সেট। একটি ছাড়া অন্যটি অকেজো। তারা একসাথে কম্পিউটার প্রোগ্রাম করে। তারা উভয়ই মৌলিক।
ফোশি

2
@ ফোশি ভুল ডেটা স্ট্রাকচারটি আলগোরিদিমগুলির সাথে ঘনিষ্ঠভাবে আবদ্ধ থাকে যা ডেটা ম্যানিপুলেট করে। সুতরাং সেই অ্যালগরিদমগুলি ঘনিষ্ঠভাবে আবদ্ধ করা ডেটা কাঠামোর অংশ হিসাবে বিবেচিত হয়। উদাহরণস্বরূপ রেখাযুক্ত তালিকা ডেটা কাঠামো আপনাকে জানায় যে কীভাবে ডেটা সংরক্ষণ করা হয় এবং কীভাবে ডেটাটি পড়ে এবং ম্যানিপুলেটেড হয়।
ইউফোরিক

7
@ ইউফোরিক আমি যুক্তিটি ভুল করে বলতে পারি যে অ্যালগোরিদমগুলি ডেটা কাঠামোর অংশ part বাইনারি অনুসন্ধান কার্যকর করার একাধিক উপায় রয়েছে: আপনি উদাহরণস্বরূপ, নিষ্পাপ if less than recurse to the left; if greater than, recurse to the right; if equal, returnঅনুসন্ধান বা সামান্য আরও পরিশীলিত করতে পারেন if less than recurse to the left; otherwise keep track of this value as a potential candidate and recurse to the right; check for equality once we reach the leaves। তাদের তুলনায় কিছুটা আলাদা সংখ্যা রয়েছে। দুটি গাছই আপনি গাছের সাথে বেছে নিতে বেছে নিতে পারেন of
ডোভাল

4
@ ইউফোরিক আপনি ডেটা স্ট্রাকচারটিকে বিমূর্তভাবে ডেটা স্ট্রাকচার এবং অ্যালগরিদমের সংমিশ্রণ করে এমন বিমূর্ত ডেটা টাইপের সাথে বিভ্রান্ত করছেন।
ডোভাল

7
@ ইউফোরিক, আমাকে একমত হতে হবে না মার্জ সাজান একটি অ্যালগরিদম। একটি অ্যারে একটি ডেটা স্ট্রাকচার। একটি লিঙ্কযুক্ত তালিকা একটি পৃথক তথ্য কাঠামো। আমি উভয়ই চালনার জন্য মার্জসর্টের একটি বাস্তবায়ন লিখতে পারি। কিছু ডেটা স্ট্রাকচার কোনও নির্দিষ্ট অ্যালগরিদমের জন্য আরও প্রাকৃতিক বা আরও দক্ষ হতে পারে তবে এটি খুব কমই একটি চূড়ান্ত প্রয়োজনীয়তা (হিপ সাজানোর বাস্তবায়নের জন্য আপনার খুব বেশি কিছু করতে হবে)। নিকোলাস রাইথ 1980 এর দশকে একটি জনপ্রিয় পাঠ্য বই লিখেছিলেন: শিরোনাম: "অ্যালগোরিদম + ডেটা স্ট্রাকচারস = প্রোগ্রামস"
চার্লস ই গ্রান্ট

উত্তর:


20

সব ধরণের মিশ্রণ বিদ্যমান। আপনার কাছে ডেটা স্ট্রাকচার রয়েছে, যা অ্যালগরিদম, অ্যালগরিদমের সাথে সম্পর্কিত নয়, যার কোনও (প্রকৃত) ডেটা স্ট্রাকচারের প্রয়োজন নেই, তবে বেশিরভাগ ক্ষেত্রে দুটি একটি প্যাকেজে আসে।

সম্পাদনা করুন: @ ডোল যথাযথভাবে নির্দেশিত হিসাবে, প্রতি সেটের ডেটা স্ট্রাকচারগুলির সাথে কোনও ক্রিয়াকলাপ যুক্ত নেই। ডেটা স্ট্রাকচার এবং অ্যালগরিদমের সংমিশ্রনের কাজটি একটি বিমূর্ত ডাটা টাইপ করে।

অ্যালগরিদম ছাড়াই ডেটা স্ট্রাকচার

উদাহরণস্বরূপ, দ্বি-মাত্রিক স্থানাঙ্কগুলি সংরক্ষণ করার জন্য একটি ডেটা স্ট্রাকচার বিবেচনা করুন Point। এক বিন্দুর জন্য করণীয় অ্যালগরিদমের দিক থেকে অনেক কিছুই নেই এবং এটি সত্যই কেবল একটি মান xএবং yমানের জন্য একটি ধারক । অবশ্যই, এই ডেটা স্ট্রাকচারটি দেওয়া, আপনি এখন এটির শীর্ষে সমস্ত ধরণের অ্যালগরিদম যুক্ত করতে পারেন (দূরত্ব গণনা, উত্তল হাল, কী কী আছে)।

আপনি প্রচুর ডেটা স্ট্রাকচারের কথা ভাবতে পারেন, যা কেবলমাত্র ব্যক্তিগত ডেটা সংগ্রহ। এগুলি অভ্যাসে ঘন ঘন ঘটে গেলেও তারা ভাল শিক্ষাদানের উপাদান তৈরি করে না, কারণ এটি থেকে শেখার কিছুই নেই, একবার আপনি যখন বুঝতে পেরেছেন যে একক ডেটা আইটেমগুলি একটি নতুন ডেটা কাঠামোতে জড়ো করা যেতে পারে (যেমন আপনি কী শিখেন উপরের Pointউদাহরণের পরে , যদি আমি আপনাকে সেই দুর্দান্ত ভয়ঙ্কর ডেটা স্ট্রাকচার সরবরাহ করি Point3D, যা ত্রিমাত্রিক জায়গার জন্য একই কাজ করতে পারে?)

(বাস্তব) ডেটা স্ট্রাকচার ছাড়াই অ্যালগরিদম

"রিয়েল", কারণ স্পষ্টতই প্রতিটি আকর্ষণীয় অ্যালগরিদমের জন্য পূর্ণসংখ্যা বা বুলিয়ানগুলির মতো আদিম উপাত্তের প্রয়োজন হয় এবং আমরা এই প্রসঙ্গে ডেটা স্ট্রাকচার হিসাবে বিবেচনা করতে চাই না। একইভাবে উপরের দিকেও, এই অ্যালগোরিদমগুলি সাধারণত বরং সাধারণ হয়। বিশেষত, তারা কোনও ধরণের জটিল অবস্থার সাথে আসে না, কারণ এটি সাধারণত কোনও ডাটা স্ট্রাকচারে যায় (পরের অংশটি দেখুন)।

যেমন একটি অ্যালগরিদমের জন্য একটি উদাহরণ দুটি সংখ্যার সবচেয়ে বড় সাধারণ বিভাজক গণনা করা হবে। ইউস্লিডের অ্যালগরিদমগুলি গিসিডির জন্য কেবলমাত্র দুটি পূর্ণসংখ্যা রাখা দরকার এবং সেগুলি ম্যানিপুলেট করে।

জিনিসগুলি আরও আকর্ষণীয় হয়ে উঠতে শুরু করলে, আপনি খুব শীঘ্রই বিমূর্ত ডেটা ধরণের বিশ্বে প্রবেশ করবেন। উদাহরণস্বরূপ, ইরোটোথিনিসের চালনী কোনও অ্যারের উপর ভিত্তি করে। অ্যারে এখনও আদিম কিনা, বা বাস্তবে, ইতিমধ্যে কোনও ডেটা স্ট্রাকচার না থাকলে আপনি আলোচনা করতে পারেন আমরা এখন আলোচনা করতে পারি। যে কোনও উপায়ে, ডেটা কাঠামো ছাড়াই সম্পূর্ণভাবে উপস্থিত অ্যালগরিদমগুলি বরং বিরক্তিকর, এমনকি যদি আপনি তাদের বিচ্ছিন্ন অস্তিত্ব স্বীকার করেন।

ডেটা স্ট্রাকচার, ওরফে অ্যাবস্ট্রাক্ট ডেটা ধরণের সাথে মিলিত অ্যালগরিদম

এখন এগুলি আকর্ষণীয়, তবে দুটি ভিন্ন কারণে। সাধারণত, আপনি দুটি দিক থেকে এগুলির কাছে যেতে পারেন: প্রথমে ডেটা কাঠামো, বা প্রথমে অ্যালগরিদম।

যদিও একটি বিমূর্ত তথ্য প্রকার ডেটা স্ট্রাকচার + অ্যালগরিদম / ক্রিয়াকলাপের সংমিশ্রণ দ্বারা সংজ্ঞায়িত করা হয়, আমরা প্রায়শই তাদের যেকোন একটিতে ফোকাস দিয়ে দেখি এবং অন্যটিকে সক্ষম হিসাবে বিবেচনা করি।

ডেটা স্ট্রাকচার, তারপরে অ্যালগরিদম

আপনি বিমূর্ত ডেটা ধরণের মুখোমুখি হবেন, যা ব্যবহার করা বরং সহজ, তবে তাদের অভ্যন্তরীণভাবে কাজ করতে আরও কম সংখ্যক জটিল অ্যালগরিদম জড়িত। উদাহরণস্বরূপ, একটি HashMapব্যবহার করা তুচ্ছ, তবে একটি নিফ্টি হ্যাশ ফাংশন এবং অভ্যন্তরের হ্যাশ সংঘর্ষের সাথে ডিলের সাথে জড়িত। তবুও, ব্যবহারকারী হিসাবে আপনার দৃষ্টিকোণ থেকে আপনি এটির জন্য এমন কিছু হিসাবে যত্নশীল যা আপনার জন্য কিছু করে যা আপনার জন্য কিছু করে না।

নীচের সর্বশেষ গোষ্ঠীর বিপরীতে, এই ডেটা স্ট্রাকচারগুলি তাদের ব্যবহারকারীদের এই অ্যালগোরিদমগুলিতে প্রকাশ করে না। HashMapএটি ব্যবহারে সক্ষম হওয়ার জন্য আপনার কোনও অভ্যন্তরীণ হ্যাশ ফাংশন সম্পর্কে জানতে বা যত্ন নেওয়ার দরকার নেই । (যদিও এটি কার্যকরভাবে ব্যবহার করতে, আপনি এই জিনিসগুলি জানতে চাইতে পারেন;)

অ্যালগরিদম, তারপরে ডেটা স্ট্রাকচার

অন্য দিকটির অর্থ হল আপনার কাছে একটি অ্যালগরিদম রয়েছে, যা আপনি সহজভাবে ব্যবহার করতে সক্ষম হতে চান তবে এটি যা ইচ্ছা অনুযায়ী কাজ করার জন্য অভ্যন্তরীণভাবে ডেটা স্ট্রাকচার প্রয়োজন। উদাহরণ Pointহ'ল বাইনারি স্পেস পার্টিশনিং (বিএসপি) অ্যালগরিদম, আপনি কেবলমাত্র একটি প্রদত্ত কোয়েরি পয়েন্টের নিকটতম পয়েন্টের একটি বৃহত সেট থেকে দ্বি-মাত্রিক চাইতে পারেন । যাইহোক, আসলে অ্যালগরিদম লিখতে আপনার ভিতরে গাছের কাঠামো (এবং দূরত্ব গণনার মতো অতিরিক্ত আলগোরিদিম )ও প্রয়োজন need

সাধারণভাবে, কেউ বলতে পারেন যে এই গোষ্ঠীর আলগোরিদিমগুলি তাদের অভ্যন্তরীণ রাষ্ট্রের উপস্থাপনের জন্য জড়িত ডেটা স্ট্রাকচার ব্যবহার করে। আমি যুক্তি দিয়ে বলব যে এই অ্যালগোরিদমগুলির এই গ্রুপটি সবচেয়ে বৈচিত্রপূর্ণ এবং আপনি অনেকগুলি এই সাধারণ স্কিমের সাথে খাপ খায় এমনগুলি দেখতে পাবেন। দৃষ্টিকোণ সম্পর্কিত, আমরা এগুলি আকর্ষণীয় হিসাবে দেখি, কারণ তারা আমাদের জন্য কিছু করে (f.ex. বাছাই) করে এবং ডেটা হোল্ডিং অংশটি সম্পর্কে তেমন যত্ন নেয় না।

ঘনিষ্ঠভাবে সম্পর্কিত ডেটা স্ট্রাকচার এবং অ্যালগরিদমগুলি

অবশেষে, আপনার কাছে ডেটা স্ট্রাকচার রয়েছে, যা আলগোরিদিমগুলির সাথে খুব ঘনিষ্ঠভাবে সম্পর্কিত যা তাদের সাথে সরাসরি মিল রয়েছে। একটি সাধারণ উদাহরণ হ'ল বাইনারি গাছ, যা আপনি যখন এর সাথে অর্থপূর্ণ কিছু করতে চান, তখন আপনার উপর গাছ-চলার অ্যালগরিদমের বিষয়টিকে বাধ্য করে (গভীরতা-প্রথম, প্রস্থ-প্রথম, যাই হোক না কেন)।

এই ক্ষেত্রেগুলির জন্য, আমরা প্রায়শই প্রায়শই ফলস্বরূপ বিমূর্ত তথ্যের ধরণের দৃষ্টিভঙ্গির দৃষ্টি নিবদ্ধ রাখি। কখনও কখনও আপনি আপনার গাছের কাঠামো সম্পর্কে যত্নশীল হন, কয়েক মিনিট পরে আপনি এটিতে অনুসন্ধানের অপারেশন চালাতে সক্ষম হওয়ার বিষয়ে যত্নশীল হন, তারপরে আপনি কোনও নোড মুছে ফেলার বিষয়ে ভাবছেন এবং ঠিক কীভাবে কাঠামোটি পরে দেখায় সে সম্পর্কে ডানদিকে। যদিও এগুলি সমস্ত উপরের অন্যান্য বিভাগের ক্ষেত্রেও সত্য, তবে এটি আপনার মনের প্রাথমিক দৃষ্টি নিবদ্ধ করা বিষয় নয়, উদাহরণস্বরূপ, আপনি যখন / এ থেকে ডেটা সংরক্ষণ / পুনরুদ্ধার করবেন Mapবা যখন আপনি কোনও লিঙ্কযুক্ত তালিকাকে সৃজন করেন।


1
আপনি ডেটা স্ট্রাকচার এবং বিমূর্ত ডেটা ধরণকে বিভ্রান্ত করছেন। একটি ডেটা স্ট্রাকচার কিছুই করে না । "আপনি ডেটা স্ট্রাকচারের মুখোমুখি হবেন, যা ব্যবহার করা বরং সহজ" বলার কোনও অর্থ নেই কারণ একটি ডেটা স্ট্রাকচার কেবল একটি কাঠামো। এ Mapহ'ল একটি বিমূর্ত ডাটা টাইপ যা কোনও নির্দিষ্ট ডেটা স্ট্রাকচার এবং কাঠামোকে অনুসরণ করে এবং হেরফেরের মাধ্যমে কাঙ্ক্ষিত ফলাফল আনার জন্য অ্যালগরিদমের একটি সেট ব্যবহার করে প্রয়োগ করা যেতে পারে। ডেটা স্ট্রাকচারটি অ্যালগোরিদমগুলি লুকায় না, কারণ এর কোনওটি নেই; বিমূর্ত ডেটা টাইপ ডেটা স্ট্রাকচারকে আড়াল করে (এটি এটাকে বিমূর্ত করে তোলে))
ডোভাল

মনে রাখবেন যে এক অর্থে অ্যালগরিদমগুলি সর্বদা লুকিয়ে থাকে কারণ কার্যাদি নিরীক্ষণের কোনও উপায় নেই। এ কারণেই সম্ভবত তাদের ল্যাম্বদা ক্যালকুলাসে বিমূর্ততা বলা হয় (যার একমাত্র ডেটা টাইপ ফাংশন)।
ডোভাল

2
আপনি সঠিক. তবুও, আমরা কীভাবে বিভিন্ন এডিটি দেখি তার মধ্যে একটি পার্থক্য দেখি। আমি আমার উত্তরটি সম্পাদনা করেছি এবং আশা করছি এটি এখন আরও স্পষ্ট হয়ে গেছে এবং এডিটিগুলির সাথে কাঠামোর আর কোনও সংকোচন হয় না, তবুও জোর দিয়ে বলেছি যে আপনি কোনও এডিটির জন্য কাঠামো এবং / অথবা অপারেশনগুলিতে ফোকাস করতে পারেন।
ফ্রাঙ্ক

এটি কি বলা খুব সহজ যে ডেটা স্ট্রাকচারগুলি বিশেষ্য এবং অ্যালগরিদমগুলি ক্রিয়া হয়? আমি মনে করি আপনি বলতে পারেন যে অ্যালগরিদম হল ক্রিয়াটি প্রয়োগ করা, তবে আপনি এখনও একটি গাছ অনুসন্ধান করেন , এমনকি যদি সেই অনুসন্ধানটি বাইনারি অনুসন্ধান হয়। আপনি এটি বলে সমস্ত প্রযুক্তিগত বিশদটি হাতছাড়া করতে চাইবেন তবে এটির একটি নির্দিষ্ট কমনীয়তা আছে।
Magus

@ ডোভাল: এমনকি যদি কোনও ডাটা স্ট্রাকচার যা একে অপরের সাথে কিছু সম্পর্ক রাখতে এবং বজায় রাখা দরকার এমন অ্যারেতে সংখ্যার একগুচ্ছ থাকে তবে প্রয়োজনীয় আক্রমণকারীদের বজায় রাখা যদি সহজ হয় তবে এই জাতীয় জিনিস "ব্যবহার করা সহজ" হতে পারে কেউ যা চায় তা করার সময়, বা "যদি ব্যবহার করা কঠিন" হয় তবে এটি কঠিন।
সুপারক্যাট

5

ডেটা স্ট্রাকচারগুলি প্রায়শই একটি অ্যালগরিদমের বিবরণকে প্রভাবিত করে। এ কারণে দু'জনে প্রায়ই হাত মিলিয়ে যায়।

উদাহরণস্বরূপ আপনার লন কাটার জন্য একটি অ্যালগরিদম বিবেচনা করুন। আপনি কীভাবে আপনার লন কাটার বিষয়ে যান তা সম্ভবত আপনার লনের প্রকৃত কাঠামোর দ্বারা প্রভাবিত হতে পারে। আপনি যদি ঘন প্যাকড শহরতলিতে একটি ছোট্ট বাড়িতে থাকেন এবং আপনার লনটি কয়েক মিটার বর্গক্ষেত্রের সামান্য আয়তক্ষেত্র হয় তবে আপনি সম্ভবত ট্র্যাক্টর / রাইডিং কাওয়ারের পরিবর্তে আপনার লনটি একটি পুশ-কাঁচের সাহায্যে কাটা পছন্দ করবেন। যদি আপনার লনটিতে অনেক একর সমতল জমি জমি জড়িত থাকে, তবে আপনার পছন্দটি চালক কাঁচের তুলনায় ধাক্কা-কাঁচের বিপরীতে থাকতে পারে (যদিও ক্ষত অবশেষে কাজটি শেষ করতে পারে)। যদি আপনার লনটিতে বিশাল সমতল অঞ্চলগুলির সাথে একর জমি জড়িত থাকে তবে কয়েকটি ছোট ছোট পাহাড় এবং কয়েকটি গাছ থাকে তবে লন কাটার জন্য আপনি আরও আকর্ষণীয় অ্যালগরিদম বিকাশ করতে পারেন যা একটি রাইডিং কাঁচা এবং ধাক্কা কাটা, বা অন্য কোনও ঘাস উভয়কেই জড়িত cutting কাটিয়া কৌশল।

শেষ পর্যন্ত যদিও আপনার অ্যালগরিদম (বা কোন অ্যালগরিদম ব্যবহার করতে হবে) কীভাবে বিকাশ করা যায় সে সম্পর্কিত আপনার সিদ্ধান্তগুলির উপর আপনার ডেটার কাঠামোর একটি উল্লেখযোগ্য প্রভাব থাকতে পারে। এই কারণে, দুটি বিষয় প্রায়শই একসাথে চলে যায়।

এবং তদ্বিপরীত: কখনও কখনও অ্যালগরিদম আমরা প্রভাবগুলি (কমপক্ষে কমপক্ষে শুরুতে) আপনার অ্যালগরিদম সমর্থন করার জন্য ডেটা স্ট্রাকচারগুলি বিকাশ করতে চাই। উদাহরণস্বরূপ একটি অ্যারে তালিকা থেকে কোনও লিঙ্কযুক্ত তালিকার ধারণার দিকে যাওয়া এবং শেষ পর্যন্ত একটি অর্ডারযুক্ত তালিকা সংরক্ষণের জন্য একটি বিএসটি-তে যা দ্রুত অনুসন্ধানের অনুমতি দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.