From 55b9080e546a5ee022bc183f831bfa2b11b7255d Mon Sep 17 00:00:00 2001 From: NISHITA97 Date: Sat, 30 Dec 2017 02:11:15 +0530 Subject: [PATCH] =?UTF-8?q?Brian=20Kernighan=E2=80=99s=20Algorithm=20added?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Others/BrianKernighanAlgorithm.java | 56 +++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Others/BrianKernighanAlgorithm.java diff --git a/Others/BrianKernighanAlgorithm.java b/Others/BrianKernighanAlgorithm.java new file mode 100644 index 000000000..361cdc05e --- /dev/null +++ b/Others/BrianKernighanAlgorithm.java @@ -0,0 +1,56 @@ +import java.util.Scanner; + +/** + * + * @author Nishita Aggarwal + * + * Brian Kernighan’s Algorithm + * algorithm to count the number of set bits in a given number + * Subtraction of 1 from a number toggles all the bits (from + * right to left) till the rightmost set bit(including the + * rightmost set bit). + * So if we subtract a number by 1 and do bitwise & with + * itself (n & (n-1)), we unset the rightmost set bit. + * If we do n & (n-1) in a loop and count the no of times loop + * executes we get the set bit count. + * Number of iterations of the loop is equal to the number of + * set bits in a given integer. + * + * Time Complexity: O(logn) + * + */ + + +public class BrianKernighanAlgorithm { + + /** + * @param num: number in which we count the set bits + * + * @return int: Number of set bits + * */ + static int countSetBits(int num) + { + int cnt = 0; + while(num != 0) + { + num = num & (num-1); + cnt++; + } + return cnt; + } + + + /** + * + * @param args : command line arguments + * + */ + public static void main(String args[]) + { + Scanner sc = new Scanner(System.in); + int num = sc.nextInt(); + int setBitCount = countSetBits(num); + System.out.println(setBitCount); + sc.close(); + } +}