Monday, September 21, 2015

Stack

Stack হল এমন একটি ডাটাস্ট্রাকচার যা, দুইটি নীতি মেনে চলে।

  • Stack এ কোন element insert হলে শেষে দিয়ে insert হবে।
  • কোন element ফেলে/বের করে দিতে হলে last থেকে বের করে দিতে হবে। এই জন্য এইটাকে বলা হয় LIFO. Last in First Out. যে সবার শেষে insert হবে, সে সবার আগে বের হবে।

Stack এর স্ট্রাকচার নিচের ফিগারগুলা দেখে সহজে বুঝা যায়,

Stack

Stack

Capture

Friday, September 18, 2015

Linked list

Data structure এর একদম বেসিক একটা জিনিস হল Linked list.
Linked list এবং Array প্রায় একই রকম কাজ করে। তবে তাদের operation, memory এর উপর ভিত্তি করে কিছু সুবিধা অসুবিধা আছে।

  • Array ব্যবহার এর শুরুতে কতগুলো ব্লক নিয়ে কাজ করব তা ডিক্লেয়ার করে দিতে হয়। এবং পুরো প্রোগ্রাম জুড়ে সেই সাইজ একই থাকে, পরিবর্তন করা যায় না। Linked list এ যখন প্রয়োজন শুধু তখনেই ব্লক এ্যাড করা হয়, তাতে মেমরি অপচয় হয় না।
  • Array তে যেখানে index access করা যায়, Linked list এ তা করা যায় না।
  • Array তে যেকোন পজিশনে এলিমেন্ট insert/delete করা অনেক কষ্টসাধ্য ও complexity বেশি, কিন্তু Linked list দিয়ে তা সহজে করে ফেলা যায়।

Basic Structure:

Linked list এ প্রতিটা ব্লক দুইটি অংশে বিভক্ত। এক অংশে থাকে ডাটা, আরেক অংশে থাকে পরর্বতী ব্লকের address. এইভাবে ব্লক পরর্বতী ব্লকের address সেভ রেখে একটি list এর মত কাঠামো গঠন করে। একটি Linked list দেখতে নিচের fig এর মত হবে।

Wednesday, May 27, 2015

Sparse Table

Sparse Table RMQ (range minimum/maximum query) টাইপ প্রবলেম সল্ভ করতে কাজে লাগে। একটি Array ‘A’ তে কিছু নাম্বার দেয়া আছে। এখন বলা হল কুয়েরি i to j রেঞ্জ দেয়া হবে, বলতে হবে এই রেঞ্জে এর মধ্যে মিনিমাম নাম্বার কত। এখন Brute force way তে করলে worst case complexity যাবে O(Q*N)। কিন্তু Sparse Table দিয়ে O(N log N) এ pre calculation করে O(1) এ প্রতি কুয়েরির answer দেয়া যায়।

Sparse Table:

Sparse Table এ Array প্রতিপজিশন থেকে তার 2 এর power এর length পর্যন্ত result সেভ করে রাখা হয়।এর ফলে, “যেকোন নাম্বারকে 2 এর power এর যোগফল হিসেবে লিখা যায়।” এই property use করে sparse table থেকে সহজে result calculation করা যায়।

Array A[]={10, 1, 3, 20, 25, -5, 6, -10, 11, 8} এর minimum range query জন্য sparse table ST হবে এমন,Capture

Sunday, April 19, 2015

Graphics.h configure In code::blocks

Code::Blocks এ C প্রোগ্রামে graphics.h include করে কাজ করার জন্য প্রথমে কিছু জিনিস configure করে নিতে হয়।

Steps:

  1. Download. এখান থেকে WinBGIm_GCC47 download করতে হবে।
  2. Download করার পর zip folder unzip করলে, graphics.h, winbgim.h, libbgi.a  এই ৩ টি ফাইল পাওয়া যাবে।
  3. তারপর graphics.h, winbgim.h ফাইল দুইটি কপি করে pc তে যেখানে mingw setup করা আছে তার include folder এ paste করতে হবে। (MinGW\include)
    আমার pc তে path হলঃ C:\Program Files (x86)\CodeBlocks\MinGW\include
  4. এখন  libbgi.a ফাইল কপি করে mingw folder এর lib folder এ paste করতে হবে।(MinGW\lib)
    আমার pc তে path হলঃ C:\Program Files (x86)\CodeBlocks\MinGW\lib
  5. Code::Blocks open করে Settings -> Compiler settings -> linker settings এ যেতে হবে।
  6. বামপাশে Link libraries এ Add এ click করে libbgi.a ফাইল সিলেক্ট করে দিতে হবে। অথবা libbgi.a ফাইল যেখানে paste করা হয়েছিল ওই path copy করে দিলেই হবে।
    যেমনঃ "C:\Program Files (x86)\CodeBlocks\MinGW\lib\libbgi.a"
  7. ডানপাশে Other linker options এ "-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32" copy paste করতে হবে।
  8. Now hit Ok. :P

Monday, March 23, 2015

Square Root Decomposition

problem: একটি N size এর Array তে কিছু নাম্বার দেয়া হল। এখন প্রতিবার x থেকে y রেঞ্জ এর মধ্যে কুয়েরি করে বের করতে হবে minimum নাম্বার কত।
এখন একদম brute force উপায়ে যদি বের করি তাহলে complexity হবে প্রতি query তে x to y iterate করতে হবে. Array size যদি N হয় এবং query যদি N টা হয়। তাহলে worst case complexity হচ্ছে O(N²)। যা খুবই costly.

Square root decomposition:

এখন total Array কে square root size block এ ভাগ করতে হবে।
Array size যদি N হয় তাহলে পুরো Array কে √N size block এ ভাগ করে নিব। এবং প্রতি Block এ √N টা element এর result থাকবে। square root যদি perfect না হয়, তাহলে একদম শেষ Block এ square root থেকে কম element এর রেজাল্ট থাকবে।

s

এখন যদি 100 size এর একটা Array কে square root decompose করা হয় তাহলে, total block size হবে √100=10 এবং প্রতি Block এ থাকবে 10 টা element এর result.

Popular posts