430890

প্রোগ্রামিংএ Non Linear Data Structure এর ব্যাবহার ও প্রয়োজনীয়তা

প্রোগ্রামিং এবং সফটওয়ার ডেভলপমেন্টে এ কিছু কিছু সমস্যার ক্ষেত্রে ডাটাসমূহকে Sequentially(Linearly) মেমোরিতে রাখার চেয়ে ভিন্ন ভিন্ন পদ্ধতি অবলম্বন করলে নানারকম সুবিধা পাওয়া যায়। অর্থাৎ insert, search, delete এ Time Complexity কম হতে পারে কিংবা ডাটা স্টোর করতে কম মেমোরি লাগতে পারে। এই ধরনের কিছু Data Structure হল  Tree, Map, pair, Set, Hash Map, Hash Table, Priority queue, Heap ইত্যাদি।এইগুলোকে একত্রে Non Linear Data Structure বলা হয়। আজকের পর্বে আমরা Map, Pair, Set,  Hash map, Hash Table  এই Data Structure গুলো নিয়ে আলোচনা করব।

এই Data Structure গুলো Competitive Programming এবং সফটওয়ার ডেভলপমেন্টে প্রায়ই ব্যবহার হয় কিন্তু আমরা অনেকেই এইগুলাকে কোর্স করার সময় এড়িয়ে গিয়েছি। তাই এখন বাধ্য হয়ে আবার শিখতে হচ্ছে । সুতরাং সময় থাকতে শিখে ফেলেন। ভবিষ্যতে কাজে লাগবে, যদি ভাল মানের কিছু ডিজিটাল প্রডাক্ট বা সার্ভিস তৈরি করতে চান।

C++ এ Map, Pair এর Built-in Method   রয়েছে। তাই সরাসরি আমার তা ব্যাবহার করতে পারি। কিন্তু C++ এ Hash map ,Hash table   এর Built-in Method   নেই, তাই C++ এ Hash map, Hash table   ব্যাবহার করা একটু দুরুহ। অন্যদিকে Java তে Hash map ,Hash table   এর  জন্য  Built In Method   রয়েছে যা দিয়ে সহজেই Hash map ,Hash table  কে ব্যাবহার করা যায়। তাই আমি অনেককেই এই কথাটা বলি, “আমি সি/সি++ পারি, আমি জাভা পারি এইসব না বলে বলবা আমি এই Data Structure টা পারি, আমি এই Algorithm টা পারি।” একটা প্রোগ্রামিং ভাষা আসলে বিশেষ কিছু নয়, কোন সমস্যা সমাধান বা একটা কাজ ভাল ভাবে করার মত Data Structure এবং Algorithm জানাটাই আসল ব্যাপার ।

এখন জানার বিষয় আমারা কখন কোন Data Structure টি ব্যবহার করব। সংক্ষেপে বলা যায়, যখন আমাদের ডাটাসমূহকে key-Value Pair হিসেবে রাখতে হয়। অর্থাৎ প্রতিটা Data কে আলাদা আলাদা Key এর সাপেক্ষে ম্যাপিং করে রাখা হয়। তখন আমরা সাধারণত Non Linear Data Structure ব্যবহার করে থাকি।

উদাহরণের মাধ্যমে দেখা যাকঃ-

দরুন ক্লাসে ৫জন ছাত্রের প্রত্যেকের নাম এবং সিজিপিএ প্রোগ্রামে রাখতে হবে এবং প্রয়োজন অনুযায়ী কোন ছাত্রের নাম, সিজিপিএ কিংবা নামের সাপেক্ষে সিজিপিএ কত তা জানতে চাইতে পারে? এই কাজটি আমরা Array ব্যবহার করেও করতে পারি কিন্তু ডাটার পরিমান যখন অনেক বেশি হবে তখন Array ব্যবহার অনেক ব্যায়বহুল হয়ে দাঁড়াবে। ব্যায়বহুল বলতে Time Complexity এবং মেমরি রিডানডেন্সি বেড়ে যাব। এই বিষয়টি অতি গুরুত্বপূর্ন তাই এটি নিয়ে আমরা অন্য পর্বে বিস্তারিত দেখব। তার আগে কিছু Data Structure ভাল করে শিখে নেই।

Key(name) Value(cgpa)
Shovon 3.2
Tusher 2.5
Shojib 2.8

প্রথমে আমারা দেখি  C++ এ Map ব্যবহার করে এই কাজটা করা যায় কিনা?

#include <iostream>
#include <map>
#include<string>
using namespace std;
int main ()
{
  map<string,float> student;
  map<string,float>::iterator it;

  student["shovon"] = 3.2;
  student["Tusher"] = 2.5;
  student["Shojib"] = 2.8;

  // map normally print data alpabatically/
  for ( it=student.begin(); it!=student.end(); ++it){
    cout << it->first << " => " << it->second << '\n';
  }


  return 0;
}

 

এখন আমরা Java তে Hash Map ব্যবহার করে আবার এই কাজটি করব।

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

public class Main {

  public static void main(String[] args) {
    HashMap<String, float> hMap = new HashMap<String, float>();
    hMap.put("Shovon", "3.2");
    hMap.put("Tusher", "2.5");
    hMap.put("Shojib", "2.8");

    Collection c = hMap.values();
    Iterator itr = c.iterator();
    while (itr.hasNext()) {
      System.out.println(itr.next());
    }
  }
}

Note: C++ এ Pair বা Set এবং java তে Hash Table ব্যবহার করে এই কাজটা করা যায়।

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

রেফারেন্সঃ

http://pumpkinprogrammer.com/2014/06/21/c-tutorial-intro-to-hash-tables/

http://www.cplusplus.com/reference/map/map/find/

http://www.java2s.com/Tutorials/Java/java.util/HashMap/0340__HashMap.size_.htm

http://javahungry.blogspot.com/2014/03/hashmap-vs-hashtable-difference-with-example-java-interview-questions.html

http://tech.aozturk.me/simple-hash-map-implementation-in-c/

http://www.java2s.com/Tutorial/Java/0140__Collections/IteratethroughthevaluesofHashMap.htm

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *