Monthly Archives: June 2017

Not all programmers are nerd

https://www.quora.com/What-should-you-never-say-to-a-programmer/answer/Ohingsho-Jajabor

Heap Sort

Steps:
If we want to sort in ascending then we create a min heap
If we want to create in descending then we create in max heap

Once the heap is created we delete the root node from heap and put the last node in the root position and repeat the steps till we have covered all the elements.
For ascending order:
1. Build Heap
2. Transform the heap into min heap
3. Delete the root node

pseudocode:

source:
http://www.algorithmist.com/index.php/Heap_sort

Implemented code:

output:

Took help from these two links:
http://www.codingeek.com/algorithms/heap-sort-algorithm-explanation-and-implementation/
http://www.geeksforgeeks.org/heap-sort/

Complexity Analysis:
Time Complexity for MaxHeapify: O(logn)
Complexity for BuildHeap: O(n)
Complexity of heapSort:
Worst, Avergae, Base case: O(n*logn)
It is inplace algorithm.
Space Complexity: O(1)

Big Oh, Theta and Omega Notation confusion clearing

https://stackoverflow.com/questions/471199/what-is-the-difference-between-%CE%98n-and-on

Merge Sort

Algorithm Video:

Merge Sort Combines Two Sorted file in a large bigger sorted files:
This Merge sort happens in a two steps:

This sorting is a example of divide and conquer approach:
1. Selection: Splits a list into two lists (This process is recursive approach)
2. Merging: It joins two list in a one list (It follows the pesudocode in itertive manner)

Pseudocode:

 

Implementation:
code with extra malloc declaration:

code by me without  extra malloc:

output:

Analysis of Running Time Complexity:

Worst case, Best case, Avergae case: Theta(nlogn)
Space Complexity: Theta(n)

 

This link can help to solve problems:
https://gist.github.com/mycodeschool/9678029
https://www.hackerearth.com/practice/algorithms/sorting/merge-sort/tutorial/

http://www.sanfoundry.com/cpp-program-implement-merge-sort/

Bubble Sort

This video is good to help:

I have also taken help from DS Made Easy by Karumanchi book to find the algo pesudocode.

Pseudocode:

Implementation:

I need to improve this algorithm as it is not passing all the sizes of array so there will be some vacant position in array which increases the complexity in the running time so we need to out of the loop when it has nothing to swap, so our improvised algorithm will be:

Pseudocode:

 

Implementation:

This below video can help for better optimization that implemented in the above code:

Time Complexity in Running Time:

Worst Case: O(n^2)
BEst Case without improve: O(n^2)
Best Case(Improvised): O(n)
Average Case: O(n^2)
Space Complexity: O(1)
Simulation Tried to be drawn by me:

 

Software Development Life Cycle

Selection Sort

PSeudoCode:

Implemented Code:

output:

 

QuickSort

Youtube Video:

Analaysis though it seems little bit tough to me:

HackerRank video:

MIT video:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/lecture-4-quicksort-randomized-algorithms/

Pseudo Code from upper Youtube vid:

 

Implementation:

Slightly edited in *A to A[]:

Some change with before and after show:

Complete Quicksort Implementation and taking user input:

Output from the above code:

Geeks for geeks:
http://quiz.geeksforgeeks.org/quick-sort/
http://www.practice.geeksforgeeks.org/problem-page.php?pid=700151

From geeks for geeks but may be there might be some problems there

Another good one for understanding(I think it’s the best one):

Pseudocode available in the above video:

implemented code:

 

 


Quick Sorting in Process

Time and Space complexity: Best Case : omega(nlogn)
Worst case: O(n^2)

See this video to clear up the skills:

ideone example: http://ideone.com/oWbONR
Others Code:
http://www.cc.gatech.edu/classes/cs3158_98_fall/quicksort.html
Recursive:
http://www.algolist.net/Algorithms/Sorting/Quicksort
CLRS:
http://www.bowdoin.edu/~ltoma/teaching/cs231/fall09/Lectures/5-quicksort/quicksort.pdf

Google Search Terms:
https://www.google.com/webhp?sourceid=chrome-instant&rlz=1C1PRFC_enBD706BD706&ion=1&espv=2&ie=UTF-8#q=quick+sort+pseudocode&*

SOLID Concepts

Object Oriented Programming Concepts

Interview Experience: Software Engineering Interview Guideline for Freshers in Bangladesh

Today given an interview for intern position so, I think they asked me some questions that is related to other interview which was Full Time Software Engineering Job I have faced. I have found an pattern for interview purpose in software engineering position in Bangladesh:

Maximum of them ask:
OOP Concept Basic like, What is class, What is Overriding and Overloading(Must be good at it, why it is needed), Polymorphism, Interface, Inherit etc.
Object Oriented Design – Design Pattern, SOLID priniciple
Algorithm Basics – All Sorting but Bubble Sort, Merge Sort, QuickSort, Binary Search Tree(BST) Is must to see first
Software Development Life Cycle(SDLC) Phases, UML Actors, and Scrum/Agile methodology
Basic SQL, Join, Normalization

-> Basic OS/RAM Related Questions-> Stack/Heap where actually program runs that knowledge
What is call by value and What is call by reference

content included in this blog link below must be finished and  must be in head when needed anything: http://blog.devskill.com/%E0%A6%B8%E0%A6%AB%E0%A6%9F%E0%A6%93%E0%A7%9F%E0%A7%8D%E0%A6%AF%E0%A6%BE%E0%A6%B0-%E0%A6%A1%E0%A7%87%E0%A6%AD%E0%A7%87%E0%A6%B2%E0%A6%AA%E0%A6%BE%E0%A6%B0%E0%A6%A6%E0%A7%87%E0%A6%B0-%E0%A6%9C%E0%A6%A8/

Overriding vs. Overloading in Java

Overriding code:

output:

Overloading code:

 

Reference:
http://www.programcreek.com/2009/02/overriding-and-overloading-in-java-with-examples/

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং



অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং নিয়ে আলোচনার ক্ষেত্রে আমার এই পোস্টের অবতারণা….. প্রথমেই ধরে নেই এর উদ্দ্যেশ্য সম্পর্কে … আমরা সাধারণত ফাংশনাল প্রোগ্রামিং নিয়ে যেমনঃ সি তে একটা  সময় কাজ করি…কিন্তু বৃহৎ আকারের কিছু সফটওয়্যার বানাতে গেলে আমার লিখা কোড গুলো যেন  আরেকজনের কাছে যাতে বোধগম্য হয় এবং কোনো ঝামেলা ছাড়াই আরেকজন যেন সেটা নিয়ে কাজ করতে পারে(Resuability) এবং ছোটো ছোটো ভাগে ভাগ(Modularity) করা যায় সেটা দরকার…তাছাড়া ইচ্ছা হলেই যেন তাতে একদম নতুন কিছু বৈশিষ্ট্য (Extensibility) জুড়ে দেয়া যাবে সেই অপশন রাখাটাও জরুরী।

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

যাইহোক প্রথমেই আমি কোড করব না …আমি চেস্টা করব যে কনসেপ্ট আমি শিখছি তা আগে শেয়ার করতে…আমার ব্যক্তিগত অভিজ্ঞতা থেকে আমি দেখেছি আগে কনসেপ্ট ক্লিয়ার করে কোড করলে সেটা  পরবর্তিতে বেটার হয়…কিন্তু কনসেপ্ট না জেনে আগে ওওপি এর কোড করে ফেললে নিজের বুঝার ক্ষেত্রে একটু গ্যাপ থেকে যায় ।

তাহলে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কাকে বলে ?
অবজেক্ট কে আমরা একটা সুন্দর করে র‍্যাপিং পেপার দিয়ে মোড়ানো একটা গিফট বাক্সের মতন চিন্তা করতে পারি যার ভেতরের অবস্থা সম্পর্কে আমরা বাইরে থেকে অবগত নই…

কিন্তু অবজেক্ট গুলো একটার সাথে আরেকটা যোগাযোগ করতে পারবে মেসেজের মাধ্যমে…মেথড নামক একটা সিস্টেম মেসেজ গুলো নিয়ে কাজ করবে। আর প্রতিটা অবজেক্ট এরই কিছু ব্যাক্তিগত দায়িত্ব থাকবে.

তো যেই সফটওয়্যার আমরা বানাবো সেটা বানাতে গেলে যখন এই উপরোক্ত বৈশিষ্ট্যগুলো মেনে চলে তাকে আমরা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বলতে পারি।

 

অবজেক্ট = ডাটা(অবজেক্ট এর প্রপার্টি গুলা স্টোর করতে ) + মেথড(যোগাযোগ রক্ষা জাতীয় কিছু করা)

অবজেক্ট ওরিয়েন্টেড এর বেসিক টার্মিনোলোজি গুলা হতে পারে অনেকটা এরকম যেঃ

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

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

ইনহেরিট্যান্সঃ এটাকে বলা যায় অনেকটা উত্তরাধিকার বা জেনেটিকালি/পৈত্রিক সম্পত্তি পাওয়ার মতন.. যেমনঃ একজন চাইল্ড তার প্যারেন্টের সব সম্পত্তি অটোমেটিকালি পেয়ে যাবে…অর্থাত পাবলিক কিংবা প্রোটেক্টেড সব প্রপার্টি একজন চাইল্ড তার প্যারেন্টের থেকে পাবে(কিন্তু কেবল অটোমেটিকালি প্রাইভেট বা ব্যাক্তিগত জিনিস পাবে না)। এই ব্যাপারটাকে “is a” রিলেশানশিপ দিয়ে প্রকাশ করা হয়।
যেমনঃ
A car is a vehicle এখানে কার ভেহিকল কে ইনহেরিট করতেসে
A teacher is a person এখানে টিচার পারস ন কে ইনহেরিট করতেসে
A dog is an animal এখানে ডগ এনিমেল কে ইনহেরিট করবে

পলিমরফিজমঃ এটাকে বলা যায় বহুরূপী আচরণ, যেমন একজন ছেলে মানুষ পড়ালেখা শেষে হাসপাতালে একজন ডাক্তার আবার তিনি তাঁর নিজের বাসাতে তাঁর সন্তানের একজন বাবা/টিচার হিসেবে কাজ করেন। সুতরাং, এই যে একটা মানুষের বহুরুপ ভিন্ন ভিন্ন ক্ষেত্রে এই ব্যাপার টাকেই পলিমরফিজম বলে।

যেমনঃ উপরের কোড টায় person  ক্লাসে displayDetails() স্টুডেন্ট হিসেবে একধরনের মেসেজ দিভে আবার ডাক্তার হিসেবে আরেকধরনের মেসেজ দিবে যদিও দুজনেই person.

এগ্রিগেশনঃ একটা অবজেক্ট আরেকটা অবজেক্টের অংশ বিশেষ হলে তাকে বলে এগ্রিগেশান। এটাকে “has a” রিলেশনশীপ দিয়ে প্রকাশ করা যায়।
যেমনঃ A car has wheels এক্ষেত্রে একটা গাড়ীর অনেকগুলা চাকা আছে এটা composite aggregation
আবার অনেক গুলা চাকা অনেক গুলা গাড়ির অংশ হলে সেটাকে আমরা বলতাম shared aggregation অর্থাৎ একের চেয়ে বেশী অবজেক্ট এটা শেয়ার করতেসে

বিহেভিয়ার এবং মেসেজঃ একটা অবজেক্টে সাধারণত কাজ করে তাঁর মেথড এর মাধামে এবং ত থ্য আদান প্রদান করে। এবং এটা কি কাজ করে সেটা তাঁর বিহেভিয়ার।
যেমনঃ আমি যদি কাউকে জিজ্ঞেস করি How are you? সে যদি রিপ্লাইয়ে রিটার্ন করে “i am fine” ব্যাপার তা আসলে এমনই।

আমরা যখন অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং নিয়ে কাজ করব, তখন আমাদের মাথায় দুইটা জিনিস রাখতে হবে,

এক, ক্লাস তৈরিঃ আমাদের আগে তৈরী করে রাখা আবস্ট্রাক্ট ডাটা টাইপ গুলো ব্যবহার করে ক্লাস তৈরী করে ফেলতে হবে।
দুই, অবজেক্ট ইন্ট্যার‍্যকশনঃ আমাদের অবজেক্টগুলো তৈরী করতে হবে আবস্ট্রাক্ট ডাটা টাইপ গুলো থেকে এবং এরপর তাদের মধ্যে রিলেশনশীপ দেখায় দিতে হবে।

আমি যে লিংক থেকে এ বিষয় গুলো লিখার চেস্টা করেছি তা নিচে দিলামঃ
http://jompesh.com/videos/1/1143/oop-lesson-1-introduction-to-object-oriented-programming

OOP Clear

http://jompesh.com/videos/list/category/76

বাংলা



এখানে বাংলাতে লিখব