কম্পিউটার বিজ্ঞানের ভিত্তি/অ্যালগরিদম ও প্রোগ্রাম

অ্যালগরিদম ও প্রোগ্রাম

সম্পাদনা

একটি অ্যালগরিদমকে একটি নির্দিষ্ট সমস্যা সমাধানের জন্য ব্যবহৃত পদক্ষেপের একটি সেট হিসাবে সংজ্ঞায়িত করা যেতে পারে। উদাহরণস্বরূপ, একজন রাঁধুনি একটি নির্দিষ্ট ধরনের খাবার প্রস্তুত করার সময় একটি রেসিপি ব্যবহার করতে পারেন। একইভাবে, কম্পিউটার বিজ্ঞানে, অ্যালগরিদম হল প্রোগ্রাম তৈরি করতে ব্যবহৃত ধারণাগত সমাধান। একটি অ্যালগরিদমকে একটি প্রোগ্রাম থেকে আলাদা করা গুরুত্বপূর্ণ। একটি অ্যালগরিদমের বাস্তবায়ন একটি প্রোগ্রাম হিসাবে পরিচিত।

তথ্য প্রক্রিয়াগুলির সংজ্ঞা

সম্পাদনা

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

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

অ্যালগরিদম কি?

সম্পাদনা

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

অ্যালগরিদম কেন অধ্যয়ন করবেন?

সম্পাদনা

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

একটি অ্যালগরিদম কার্যকর হওয়ার জন্য, এটি অবশ্যই সঠিক হতে হবে-মেশিনগুলি সম্পাদনের জন্য পদক্ষেপগুলি অবশ্যই যৌক্তিক এবং নির্দিষ্ট হতে হবে-এবং দক্ষ-এটি অবশ্যই যুক্তিসঙ্গত সময়ের মধ্যে শেষ করতে হবে। অ্যালগরিদমের সঠিকতা এবং দক্ষতা হল অ্যালগরিদম অধ্যয়নের দুটি মূল বিষয়।

প্রোগ্রামগুলি প্রয়োগ করা হয় অ্যালগরিদম

সম্পাদনা

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

অ্যালগরিদমের আনুষ্ঠানিক সংজ্ঞা

সম্পাদনা

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

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

অ্যালগরিদম সংজ্ঞায়িত করুন

সম্পাদনা

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

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

 
এই চিত্রটি দেখায় যে একই অ্যালগরিদম বিভিন্ন প্রোগ্রামিং ভাষায় প্রয়োগ করা যেতে পারে এবং তারপরে ফলাফল প্রোগ্রামগুলি বিভিন্ন মেশিন মডেলে চালানো যেতে পারে।

এখানে সাধারণ ক্রিয়াকলাপ এবং নিয়ন্ত্রণ কাঠামো রয়েছে যা আমরা ধরে নিতে পারি যে সমস্ত উচ্চ স্তরের ভাষা সমর্থন করেঃ

  • ডেটা স্ট্রাকচারঃ একক মানের ভেরিয়েবল এবং মানগুলির তালিকা।
  • ক্রিয়াকলাপঃ গাণিতিক ক্রিয়াকলাপ, তুলনা এবং সম্পর্কিত ক্রিয়াকলাপ (এবং, বা, এবং না)
  • নিয়ন্ত্রণ কাঠামোঃ ক্রমিক (একের পর এক) শর্তাধীন (একটি শর্তে নির্বাচনী) এবং পুনরাবৃত্তি

এখানে ছদ্ম কোডে সংজ্ঞায়িত একটি অ্যালগরিদম রয়েছে (প্রাকৃতিক ভাষা). এই অ্যালগরিদমটি নিম্নলিখিত ধাপগুলির সাথে সংখ্যার তালিকায় বৃহত্তম সংখ্যাটি খুঁজে পায়ঃ 1.তালিকার প্রথম সংখ্যার মান অনুযায়ী সর্বোচ্চ (একটি পরিবর্তনশীল) নির্ধারণ করুন (মান সংরক্ষণ করুন এবং পুনরুদ্ধার করুন).
2.প্রতিটি সংখ্যার সাথে সর্বোচ্চ সংখ্যার তুলনা করে একবারে একটি সংখ্যার তালিকা দেখুন, যদি সংখ্যাটি সর্বোচ্চের চেয়ে বড় হয় তবে সংখ্যাটি দিয়ে সর্বোচ্চ প্রতিস্থাপন করুন (শর্তসাপেক্ষ এবং পুনরাবৃত্তি).
3.সর্বোচ্চে সংরক্ষিত মান হল উত্তর।

 
এই ফ্লো-চার্টটি সংখ্যার তালিকায় বৃহত্তম সংখ্যা খুঁজে বের করার সাথে জড়িত পদক্ষেপগুলি দেখায়।

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

একই অ্যালগরিদম প্রকাশ করার আরেকটি উপায় হল ফ্লো-চার্ট নামে একটি গ্রাফিকাল নোটেশন ব্যবহার করা।


দুটি শর্ত রয়েছে-একটি শর্ত পরীক্ষা করা এবং ফলস্বরূপ সংশ্লিষ্ট পদক্ষেপ নেওয়া। শীর্ষ-সর্বাধিক শর্তাধীন একটি পুনরাবৃত্তি (লুপ) সংজ্ঞায়িত করে কারণ তাদের একটি শর্তহীন শাখা শর্তাধীন দিকে ফিরে যায় যা কোনও লেবেল ছাড়াই তীরের মধ্যে প্রকাশ করা হয়।

ছদ্ম কোড এবং ফ্লো চার্ট উভয়ই একই সমস্যার একই সমাধান বর্ণনা করে। এগুলি একই ধারণার বিভিন্ন উপস্থাপনা। নিম্নলিখিত চিত্রটি স্ক্র্যাচ-এ অ্যালগরিদমের বাস্তবায়ন দেখায়।

 
ব্লকের স্ক্র্যাচগুলির এই স্ট্যাকটি সংখ্যার তালিকায় বৃহত্তম সংখ্যা খুঁজে পায়।

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

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

প্রোগ্রাম প্রতিটি সফ্টওয়্যার প্রোগ্রাম দুটি উপাদানে বিভক্ত-ডেটা (কাঠামো) এবং অ্যালগরিদম। আমরা কম্পিউটার বিজ্ঞানের কিছু মৌলিক অ্যালগরিদম এবং ডেটা স্ট্রাকচার অধ্যয়ন করব।

অ্যালগরিদমের উদাহরণ

সম্পাদনা

ছবি এনকন্ডিং/উপস্থাপনা
এইটা অনুসরণ করুন http://csunplugd.org/sites/default/files/activity_pdfs_full/unplugd-02-image_ representation.pdf ইমেজ উপস্থাপনা কার্যকলাপ দেখুন কিভাবে ছবি এনকোড করা হয়, প্রেরিত, এবং ফ্যাক্স মেশিনে পুনরুত্পাদন।
ত্রুটি সনাক্তকরণ
অ্যালগরিদমটি একক বিট ত্রুটিগুলি সনাক্ত করতে এবং সংশোধন করতে কাজ করে তা দেখতে এই http://0csunplugd.org/sites/default/files/activity_pdfs_full/unplugd-04-error_detection.pdf ত্রুটি সনাক্তকরণ ক্রিয়াকলাপটি অনুসরণ করুন। একটি অনুরূপ অ্যালগরিদম, লুহন অ্যালগরিদম, ক্রেডিট কার্ড নম্বর যাচাই করতে ব্যবহৃত হয়।
পাঠ্য সংকোচন
কম্পিউটিং-এ টেক্সট কম্প্রেশন আরেকটি গুরুত্বপূর্ণ কাজ। নিম্নলিখিত ক্রিয়াকলাপটি একটি কম্প্রেশন অ্যালগরিদম কীভাবে কাজ করে তা দেখায়ঃ http://csunplugd.org/sites/default/files/activity_pdfs_full/unplugd-03-text_compression.pdf

অনুসন্ধান করা

সম্পাদনা

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

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

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

সামাজিক প্রভাব

সম্পাদনা

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