|
Legofit
infers population history from nucleotide site patterns.
|
Partitions of an integer into a given number of summands. More...
#include "intpart.h"#include "misc.h"#include "u64u64map.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h>Functions | |
| static uint64_t | numIntPart_r (int32_t n, int32_t k) |
| Called by numIntPart. | |
| uint64_t | numIntPart (int32_t n, int32_t k) |
| Number of ways to partition a positive integer n into k parts. | |
| int | traverseIntPartitions (int n, int k, int(*visit)(int kk, int a[kk], void *data), void *data) |
| Partition a positive integer n into a sum of k positive integers. | |
| void | numIntPart_free (void) |
| Free static variable. | |
Variables | |
| static pthread_mutex_t | map_lock = PTHREAD_MUTEX_INITIALIZER |
| static U64U64Map * | map =NULL |
Partitions of an integer into a given number of summands.
| uint64_t numIntPart | ( | int32_t | n, |
| int32_t | k ) |
Number of ways to partition a positive integer n into k parts.
The public-facing function just locks the map and calls the static recursive function, numIntPart_r.
References numIntPart_r().
|
static |
Called by numIntPart.
This assumes that the map is locked and does the real work of calculating the number of ways to partition a positive integer n into k parts.
References numIntPart_r().
Referenced by numIntPart(), and numIntPart_r().
| int traverseIntPartitions | ( | int | n, |
| int | k, | ||
| int(* | visit )(int kk, int a[kk], void *data), | ||
| void * | data ) |
Partition a positive integer n into a sum of k positive integers.
Algorithm H, p 392 of Knuth, Donald E. 2011. The art of computer programming, volume 4A.