Combinations of 0 and 1 for a given number of digits in C++

Please support our C++ advertiser: Intel Parallel Studio Home
Reply

Join Date: Jan 2009
Posts: 4
Reputation: dparas is an unknown quantity at this point 
Solved Threads: 0
dparas dparas is offline Offline
Newbie Poster

Combinations of 0 and 1 for a given number of digits in C++

 
0
  #1
Jan 12th, 2009
Hello guys,

I ve been searching for a long time for an algorithm (in c++) that would take the number of digits and give all the possible combinations between 0 and 1. For example for number of digits 3 will give

100
010
001
110
101
011
111

The funny thing is, that i think it is simple and well used BUT i cannot find it for days now. Please if anyone could help me in this i would appreciate.

Have a nice day!

Dimitris
Reply With Quote Quick reply to this message  
Join Date: Nov 2008
Posts: 949
Reputation: MosaicFuneral is just really nice MosaicFuneral is just really nice MosaicFuneral is just really nice MosaicFuneral is just really nice MosaicFuneral is just really nice 
Solved Threads: 92
MosaicFuneral's Avatar
MosaicFuneral MosaicFuneral is offline Offline
Posting Shark

Re: Combinations of 0 and 1 for a given number of digits in C++

 
0
  #2
Jan 12th, 2009
http://en.wikipedia.org/wiki/Permutation
http://regentsprep.org/regents/Math/permut/Lperm.htm

One way, start at zero and increase(i.e. ++variable; ), till you reaching the target.
Last edited by MosaicFuneral; Jan 12th, 2009 at 7:51 pm.
"Jedenfalls bin ich überzeugt, daß der Alte nicht würfelt."
"I became very sensitive to what will happen to all this and all of us." -Two geniuses named Albert
Reply With Quote Quick reply to this message  
Join Date: Aug 2008
Posts: 206
Reputation: grumpier has a spectacular aura about grumpier has a spectacular aura about 
Solved Threads: 31
grumpier grumpier is offline Offline
Posting Whiz in Training

Re: Combinations of 0 and 1 for a given number of digits in C++

 
0
  #3
Jan 12th, 2009
If n is 1, then the set is {0, 1}.

If you have a set for n, the set for n+1 can be generated by appending a 0 and then a 1 to all elements of the set n.

For example, the set for n = 2 will be 0 + {0, 1} and 1 + {0, 1} which becomes {00, 01} and {10, 11} or (more simply) {00, 01, 10, 11}.

An easy method to implement that would involve recursion.
Last edited by grumpier; Jan 12th, 2009 at 7:58 pm.
Reply With Quote Quick reply to this message  
Join Date: Jan 2009
Posts: 4
Reputation: dparas is an unknown quantity at this point 
Solved Threads: 0
dparas dparas is offline Offline
Newbie Poster

Re: Combinations of 0 and 1 for a given number of digits in C++

 
0
  #4
Jan 12th, 2009
Originally Posted by MosaicFuneral View Post
http://en.wikipedia.org/wiki/Permutation
http://regentsprep.org/regents/Math/permut/Lperm.htm

One way, start at zero and increase(i.e. ++variable; ), till you reaching the target.
Thank you for your response!
Can you give me an example of what do you mean? Is there any writen code for this?

Thank you again!
Reply With Quote Quick reply to this message  
Join Date: Jan 2009
Posts: 4
Reputation: dparas is an unknown quantity at this point 
Solved Threads: 0
dparas dparas is offline Offline
Newbie Poster

Re: Combinations of 0 and 1 for a given number of digits in C++

 
0
  #5
Jan 12th, 2009
Originally Posted by grumpier View Post
If n is 1, then the set is {0, 1}.

If you have a set for n, the set for n+1 can be generated by appending a 0 and then a 1 to all elements of the set n.

For example, the set for n = 2 will be 0 + {0, 1} and 1 + {0, 1} which becomes {00, 01} and {10, 11} or (more simply) {00, 01, 10, 11}.

An easy method to implement that would involve recursion.
Thank you for replying, thats a good approach, i will try to implement it. Do you have a code for this approach btw?

Dimitris
Reply With Quote Quick reply to this message  
Join Date: Jan 2008
Posts: 3,813
Reputation: VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute VernonDozier has a reputation beyond repute 
Solved Threads: 501
Featured Poster
VernonDozier VernonDozier is offline Offline
Senior Poster

Re: Combinations of 0 and 1 for a given number of digits in C++

 
0
  #6
Jan 12th, 2009
Originally Posted by dparas View Post
Thank you for replying, thats a good approach, i will try to implement it. Do you have a code for this approach btw?

Dimitris
We can't give you the full code. One thing you need to decide when you use this approach is what you intend to store and how. Both Grumpier and Mosaic Funeral have approaches that will work, but I think they are different approaches, so I would pick one of them and stick with it rather than take a little from each. That's my take on it.

My understanding of Mosaic Funeral's approach is that you would need some helper function that would convert an integer to a string (isolate each binary digit and convert it to a char, then append it to the string). Thus under Mosaic Funeral's approach, there would be no need to store the strings. A helper function could be this:

  1. string BinaryString (int number, int numDigits)
  2. // if passed (14, 4), it would return "1110"

I think Grumpier's approach requires you to take a collection of permutations from n-digits and create all the permutations from n+1 digits from those. So you'd pick whatever storage type you'd want, let's say vector (might not be the best choice, but it could work). A helper function could be this:

  1. vector <string> permutations (vector <string> nPermutations)

So your function could be passed all eight permutations of 3 digits stored as strings and would return all 16 permutations of 4 digits stored as string, for example.

Anyway, that's my sense of it. I'm not sure whether I correctly discerned their ideas, but hopefully I did. Decide which approach you are more comfortable with and go for it. There are other methods too.
Reply With Quote Quick reply to this message  
Join Date: Jan 2009
Posts: 4
Reputation: dparas is an unknown quantity at this point 
Solved Threads: 0
dparas dparas is offline Offline
Newbie Poster

Re: Combinations of 0 and 1 for a given number of digits in C++

 
0
  #7
Jan 12th, 2009
Originally Posted by VernonDozier View Post
We can't give you the full code. One thing you need to decide when you use this approach is what you intend to store and how. Both Grumpier and Mosaic Funeral have approaches that will work, but I think they are different approaches, so I would pick one of them and stick with it rather than take a little from each. That's my take on it.

My understanding of Mosaic Funeral's approach is that you would need some helper function that would convert an integer to a string (isolate each binary digit and convert it to a char, then append it to the string). Thus under Mosaic Funeral's approach, there would be no need to store the strings. A helper function could be this:

  1. string BinaryString (int number, int numDigits)
  2. // if passed (14, 4), it would return "1110"

I think Grumpier's approach requires you to take a collection of permutations from n-digits and create all the permutations from n+1 digits from those. So you'd pick whatever storage type you'd want, let's say vector (might not be the best choice, but it could work). A helper function could be this:

  1. vector <string> permutations (vector <string> nPermutations)

So your function could be passed all eight permutations of 3 digits stored as strings and would return all 16 permutations of 4 digits stored as string, for example.

Anyway, that's my sense of it. I'm not sure whether I correctly discerned their ideas, but hopefully I did. Decide which approach you are more comfortable with and go for it. There are other methods too.
I tried to edit my last post but the time had expired. I made it actually with the first directions of Grumpier's.

Thank you all guys for your help.

Dimitris
Reply With Quote Quick reply to this message  
Join Date: Jul 2008
Posts: 2,001
Reputation: ArkM has much to be proud of ArkM has much to be proud of ArkM has much to be proud of ArkM has much to be proud of ArkM has much to be proud of ArkM has much to be proud of ArkM has much to be proud of ArkM has much to be proud of ArkM has much to be proud of 
Solved Threads: 343
ArkM's Avatar
ArkM ArkM is offline Offline
Postaholic

Re: Combinations of 0 and 1 for a given number of digits in C++

 
0
  #8
Jan 13th, 2009
The true funny thing is that it's a VERY simple "algorithm": make a loop from 0 to 2^n-1 and print the binary representation of the loop counter (a very simple thing too).
Don't worry about n > 32: you can't print (or store) more than all 4 billion combinations for n = 32 in practice. If you want to do it, get 64-bit long long counter (in VC++, for example) and buy disk array with more than 10^21 bytes capacity just before ...
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:



Similar Threads
Other Threads in the C++ Forum
Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC