Skip to content

Conversation

@ErdemT09
Copy link
Collaborator

@ErdemT09 ErdemT09 commented Jul 20, 2021

Resolves: #216

Algorithm:

What happens here is that each hand shake divides the group into 2 distinct groups. The total number of handshakes for this division would then be handshakes for the one group times the handshakes for the other group, by the multiplication principle. To count the number of such divisions, we can choose a person like person 1 to be the pivot. This person can shake hands with person 2, 4, 6, ..., n-2, n. Shaking hands with person k would seperate the group into the groups of size k-2 and n-k. This also equivalent to calling the handshake function with values 0, 2, 4, ..., n-4, n-2. We can derive a recurrence relation from this:

The recursive formula should look something like this:

handshakes(n) := hs(n)
hs(0) := 1
hs(2) := 1
hs(n) := sum( hs(2*a)*hs(n-2*(a+1)), 0≤a≤(n/2-1) ) 
= hs(0)*hs(n-2) + hs(2)*hs(n-4) + hs(4)*hs(n-6) ... + hs(n-2)*hs(0)
From this, we can check:
hs(4) = hs(0)*hs(2)+hs(2)*hs(0) = 2 (true)
hs(6) = hs(0)*hs(4)+hs(2)*hs(2)+hs(4)*hs(0) = 5 (true)
where hs(n) ≡ Catalan(n/2)

We can implement this using recursion with memoization as well as dynamic programming.

@ErdemT09 ErdemT09 marked this pull request as ready for review July 21, 2021 10:26
Copy link
Collaborator

@altay9 altay9 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you, Erdem. A wonderful application of Catalan Numbers.

@ErdemT09 ErdemT09 merged commit 3c76afb into master Jul 22, 2021
@ErdemT09 ErdemT09 deleted the 1259.-Handshakes-That-Don't-Cross branch July 22, 2021 03:15
@altay9
Copy link
Collaborator

altay9 commented Aug 4, 2021

IMG-1713

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1259. Handshakes That Don't Cross

3 participants