ডাটা স্ট্রাকচার এবং আলগোরিদিম

উইকিবই থেকে
(Data Structures and Algorithm থেকে পুনর্নির্দেশিত)
পরিভ্রমণে ঝাঁপ দিন অনুসন্ধানে ঝাঁপ দিন

কম্পিউটার বিজ্ঞানে উপাত্ত সংগঠন (টেমপ্লেট:Lang-en) বলতে উপাত্তকে কম্পিউটারে রাখার একটি নির্দিষ্ট উপায়কে বোঝায় যাতে উপাত্তকে দক্ষতার সাথে ব্যবহার করা যায়। যত্নের সাথে বাছাই করা উপাত্ত সংগঠন উপাত্তের উপর সবচেয়ে দক্ষ অ্যালগোরিদমের ব্যবহার সম্ভব করে তোলে। একটি সুপরিকল্পিত উপাত্ত সংগঠন মেমরি ও সময় যথাসম্ভব বাঁচিয়ে উপাত্তের উপর অনেকগুলি জরুরি অপারেশন প্রয়োগ করার ক্ষমতা দেয়। কোন একটি প্রোগ্রামিং ভাষাতে প্রদত্ত উপাত্ত টাইপ, রেফারেন্স ও অপারেশন অনুসারে উপাত্ত সংগঠনগুলি বাস্তবায়ন করা হয়।

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

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

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

ডাটা স্ট্রাকচারের অত্যাধিক গুরুত্বের কারণে অনেক প্রোগ্রামিং ভাষার লাইব্রেরিতে এদের অন্তর্ভূক্ত করা হয়। সি++ এর স্ট্যাণ্ডার্ড টেমপ্লেট লাইব্রেরী কণ্টেইনার্স, জাভার কালেকশন্স ফ্রেমওয়ার্ক এবং মাইক্রোসফটের .নেট ফ্রেমওয়ার্কে এই পদ্ধতি অবলম্বন করা হয়।

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

পরিচ্ছেদসমূহ

অ্যারে[সম্পাদনা]

সূচনা[সম্পাদনা]

নির্দিষ্ট সংখ্যক, একই ধরণের তথ্য নির্দেশনাকে অ্যাের্ বলা হয় ৷ যেমন, কোন বিদ্যালয়ের 200 জন ছাত্রের বয়স, অ্যাের্-র মাধ্যমে প্রকাশ করা হল ৷

অ্যারে ঘোষণা (Declaration of an Array in C)[সম্পাদনা]

অন্যন্ন ভেরিয়েবলের মতই অ্যাের্ ঘোষিত হয় ৷

এক রৈখিক অ্যারে[সম্পাদনা]

দ্বিরৈখিক অ্যারে[সম্পাদনা]

বহূরৈখিক অ্যারে[সম্পাদনা]

স্ট্যাক[সম্পাদনা]

স্ট্যাক হল এমন একটি রৈখিক গঠন যাহার শূধুমাত্র একদিকেই তথ্য যুক্ত করা যায় বা মুছে দেওয়া যায় ৷ উদাহরণ হিসেবে বলা যায় টেবিলের উপর কিছু সংখ্যক বই (একটি অন্যটির উপর) , যার শুধুমাত্র উপরের বইটি সরান যাবে বা এর উপর অন্য আরেকটি বই রাখা যাবে ৷

স্ট্যাক উপস্থাপন অ্যারে-র মাধ্যমে[সম্পাদনা]

  1. include <stdio.h>
  2. include <conio.h>
  3. define MAXSIZE 5

struct stack /* Structure definition for stack */ { int stk[MAXSIZE]; int top; };

typedef struct stack STACK; STACK s;

/* Function declaration/Prototype*/

void push (void); int pop(void); void display (void);

void main () { int choice; int option = 1;

clrscr ();

s.top = -1;

printf ("STACK OPERATION\n"); while (option) { printf ("------------------------------------------\n"); printf (" 1 --> PUSH \n"); printf (" 2 --> POP \n"); printf (" 3 --> DISPLAY \n"); printf (" 4 --> EXIT \n"); printf ("------------------------------------------\n");

printf ("Enter your choice\n"); scanf ("%d", &choice);

switch (choice) { case 1: push(); break; case 2: pop(); break; case 3: display(); break; case 4: return; }

fflush (stdin); printf ("Do you want to continue(Type 0 or 1)?\n"); scanf ("%d", &option); } }

/*Function to add an element to the stack*/ void push () { int num; if (s.top == (MAXSIZE - 1)) { printf ("Stack is Full\n"); return; } else { printf ("Enter the element to be pushed\n"); scanf ("%d", &num); s.top = s.top + 1; s.stk[s.top] = num; } return; }


/*Function to delete an element from the stack*/ int pop () { int num; if (s.top == - 1) { printf ("Stack is Empty\n"); return (s.top); } else { num = s.stk[s.top]; printf ("poped element is = %d\n", s.stk[s.top]); s.top = s.top - 1; } return(num); }

/*Function to display the status of the stack*/ void display () { int i; if (s.top == -1) { printf ("Stack is empty\n"); return; } else { printf ("\nThe status of the stack is\n"); for (i = s.top; i >= 0; i--) { printf ("%d\n", s.stk[i]); } } printf ("\n"); }

স্ট্যাক উপস্থাপন লিংকড লিষ্ট-এর মাধ্যমে[সম্পাদনা]

স্ট্যাক-এর প্রয়োগ[সম্পাদনা]

কিউ[সম্পাদনা]

কিউ বাংলা মানে লাইনে দাড়ানো ৷ কিউ হচ্ছে এমন একটি সরল রৈখিক গঠন যাহার শুধুমাত্র পশ্চাদ্ভাগে তথ্য যুক্ত এবং সম্মুখভাগ থেকে মুছে ফেলা যায় ৷ এই দুই প্রান্তকে যথাক্রমে "REAR" & "FRONT" বলা হয় ৷

কিউ as an abstract data type[সম্পাদনা]

কিউ উপস্থাপন[সম্পাদনা]

চক্রাকার কিউ[সম্পাদনা]

দ্বিপ্রান্তীয় কিউ - ডিকিউ[সম্পাদনা]

কিউ অগ্রাধিকার[সম্পাদনা]

কিউ-এর প্রয়োগ[সম্পাদনা]

লিংকড লিষ্ট[সম্পাদনা]

লিংকড লিষ্ট বাংলা মানে সংযুক্ত সারি ৷

শক্তিশালী স্মৃতি বরাদ্দ[সম্পাদনা]

প্রাথমিক ক্রিয়াকলাপ[সম্পাদনা]

দ্বি-লিংকড লিষ্ট[সম্পাদনা]

চক্রাকার লিংকড লিষ্ট[সম্পাদনা]

বাইনারি ট্রী[সম্পাদনা]

বাইনারি ট্রী ধরণ[সম্পাদনা]

বাইনারি ট্রী-এর ধর্ম[সম্পাদনা]

বাইনারি ট্রী -র উপস্থাপনা[সম্পাদনা]

ক্রিয়াকলাপ[সম্পাদনা]

বাইনারি ট্রী ট্রাভার্সাল[সম্পাদনা]

বাইনারি ট্রী পুন:গঠন[সম্পাদনা]

ট্রী সংখ্যা নির্ণয়[সম্পাদনা]

প্রয়োগ[সম্পাদনা]

গ্রাফ[সম্পাদনা]

সর্টিং[সম্পাদনা]

বাবল সর্ট[সম্পাদনা]

সিলেক্সন শর্ট[সম্পাদনা]

ইনসার্সন সর্ট[সম্পাদনা]

কুইক সর্ট[সম্পাদনা]

মার্জ সর্ট[সম্পাদনা]

সার্চিং[সম্পাদনা]

লিনিয়ার সার্চ[সম্পাদনা]

বাইনারি সার্চ[সম্পাদনা]

ইন্ডেক্সড্ শিকুন্সিয়াল সার্চ[সম্পাদনা]