<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Md. Mohiuddin</title>
    <description>The latest articles on DEV Community by Md. Mohiuddin (@mohiuddinru).</description>
    <link>https://dev.to/mohiuddinru</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F873832%2Fd7092450-2595-4747-9b6a-1c137e7d469b.jpeg</url>
      <title>DEV Community: Md. Mohiuddin</title>
      <link>https://dev.to/mohiuddinru</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mohiuddinru"/>
    <language>en</language>
    <item>
      <title>0 থেকে n পর্যন্ত সংখ্যার প্রতিটিতে 1 bit কতবার আছে বের করা</title>
      <dc:creator>Md. Mohiuddin</dc:creator>
      <pubDate>Fri, 24 Feb 2023 08:56:34 +0000</pubDate>
      <link>https://dev.to/mohiuddinru/0-theke-n-prynt-snkhyaar-prtittite-1-bit-ktbaar-aache-ber-kraa-3jdk</link>
      <guid>https://dev.to/mohiuddinru/0-theke-n-prynt-snkhyaar-prtittite-1-bit-ktbaar-aache-ber-kraa-3jdk</guid>
      <description>&lt;p&gt;আমরা recursion and dynamic programming ব্যবহার করে সহজেই এটার সমাধান O(nlogn) complexity তে বের করতে পারি। এক্ষেত্রে আমরা যেভাবে স্বাভাবিকভাবে bit সংখ্যা বের করি সেভাবেই চিন্তা করতে পারি। অর্থাৎ প্রতিবার ভাগ করতে থাকব এবং ভাগশেষ টাকে count করব। যেমনঃ &lt;/p&gt;

&lt;p&gt;&lt;code&gt;25 % 2 = 1   25 / 2 = 12&lt;br&gt;
12 % 2 = 0   12/ 2 =  6&lt;br&gt;
6 % 2  = 0   3/2 = 1&lt;br&gt;
1 % 2 = 1    1/2 = 0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;এখানে আমরা যদি আমরা set bit পাই তাহলে বিট সংখ্যা 1 বৃদ্ধি পাবে। অন্যথায় তার সেট বিট সংখ্যা তার অর্ধেক সংখ্যার সমান।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;char bit[(int)1e5 + 1];

int getBit(int n) {
    if (n == 0)
        return 0;

    if (bit[n] == 0) {
        return bit[n] = (n &amp;amp; 1) + getBit(n / 2);
    }

    return bit[n];
}

vector&amp;lt;int&amp;gt; countBits(int n) {
    vector&amp;lt;int&amp;gt; x;
    for (int i = 0; i &amp;lt;= n; i++) {
        x.push_back(getBit(i));
    }
    return x;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু আমরা আরেকটু চিন্তা করতে চাই। &lt;/p&gt;

&lt;p&gt;জোড় সংখ্যা মানে হচ্ছে তার শেষে বাইনারিতে 0 থাকবে। যেমন,&lt;/p&gt;

&lt;p&gt;&lt;code&gt;0 : 0000&lt;br&gt;
2 : 0010&lt;br&gt;
4 : 0100&lt;br&gt;
6 : 0110&lt;br&gt;
8 : 1000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;আবার কোন সংখ্যাকে আমরা দ্বিগুণ করতে চাই তখন আমরা কী করি? তার শেষে একটা 0 লাগিয়ে দেই। যেমন,&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
1:     0&lt;br&gt;
2:    10&lt;br&gt;
5:   101&lt;br&gt;
10: 1010&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;তার মানে কোন সংখ্যাকে ২ দিয়ে ভাগ করার অর্থ হল তার থেকে একটা 0 কমিয়ে দেওয়া। যেমন,&lt;/p&gt;

&lt;p&gt;&lt;code&gt;12: 1100&lt;br&gt;
6:   110&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;আসলে এক্ষেত্রে 1 এর সংখ্যা কিন্তু কমছেও না বাড়ছেও না।&lt;/p&gt;

&lt;p&gt;কিন্তু আমরা যদি জোড় সংখ্যার সাথে একটা 1 যুক্ত করি তার মানে নতুন সংখ্যায় আগেরটার চেয়ে একটা 1 বেড়ে গেল। এটাই হচ্ছে এই প্রবলেমের সবচেয়ে মজার দিক। যেমন, &lt;br&gt;
&lt;code&gt;&lt;br&gt;
10: 1010 (2 set bit)&lt;br&gt;
11: 1011 (3 set bit)&lt;br&gt;
12: 1100 (2 set bit)&lt;br&gt;
13: 1101 (1 set bit)&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;তাহলে আমাদের এবার আর logn extra complexity লাগছে না। আমাদের প্রবলেমটা এখন O(n) (প্রতিটি element আমরা একবার access করব)  complexity তেই সমাধান করা যাচ্ছে। Function টা এখন আমরা এভাবে লিখতে পারি-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int getBit(int n) {
    if (n == 0)
        return bit[0] = 0;

    if (n &amp;amp; 1) { // ood number
        return bit[n] = bit[n - 1] + 1;
    }
    return bit[n] = bit[n / 2];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ জোড় হলে সে যার দ্বিগুণ তার bit সংখ্যার সমান। আর যদি বেজোড় সংখ্যা হয় তাহলে আগের জোড় সংখ্যার সাথে শুধু ১ যোগ হবে শেষে। তার মানে একটা 1 বিট বেড়ে গেল। &lt;/p&gt;

&lt;p&gt;&lt;a href="https://leetcode.com/problems/counting-bits/description/"&gt;LeetCode Problem Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>algorithms</category>
      <category>bits</category>
    </item>
    <item>
      <title>Hello world</title>
      <dc:creator>Md. Mohiuddin</dc:creator>
      <pubDate>Tue, 07 Jun 2022 16:02:30 +0000</pubDate>
      <link>https://dev.to/mohiuddinru/hello-world-5eic</link>
      <guid>https://dev.to/mohiuddinru/hello-world-5eic</guid>
      <description>&lt;p&gt;Hello&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;cstdio&amp;gt;

using namespace std;

int main() {
   cout &amp;lt;&amp;lt; "Hello world." &amp;lt;&amp;lt;endl;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
  </channel>
</rss>
