def random_difference(n, k, p, q): """ Returns a difference that has the same sum as the difference between p and q, but with a redistribution. """ diff = difference(n, k, p, q) print 'the original difference :', diff rootcount = 0 while(rootcount == 0): S = sum(diff) result = [] for i in range(k-1): if(S > n-k): r = randint(0, n-k) else: r = randint(0, S) result.append(r) S = S - r result.append(S) result.sort(reverse=True) print 'original:', diff, 'redistributed:', result ind = 0 while((ind < k-1) and (result[ind] > n-k)): d = result[ind] - n + k result[ind] = n-k result[ind+1] = result[ind+1] + d ind = ind + 1 result.sort(reverse=True) q.sort(reverse=True) bp = partition2bracket(n, k, p) bq = partition2bracket(n, k, q) br = partition2bracket(n, k, result) rootcount = resolve(n, k, [bp, bq, br], False) return result
def random_difference(n, k, p, q): """ Returns a difference that has the same sum as the difference between p and q, but with a redistribution. """ diff = difference(n, k, p, q) print 'the original difference :', diff rootcount = 0 while (rootcount == 0): S = sum(diff) result = [] for i in range(k - 1): if (S > n - k): r = randint(0, n - k) else: r = randint(0, S) result.append(r) S = S - r result.append(S) result.sort(reverse=True) print 'original:', diff, 'redistributed:', result ind = 0 while ((ind < k - 1) and (result[ind] > n - k)): d = result[ind] - n + k result[ind] = n - k result[ind + 1] = result[ind + 1] + d ind = ind + 1 result.sort(reverse=True) q.sort(reverse=True) bp = partition2bracket(n, k, p) bq = partition2bracket(n, k, q) br = partition2bracket(n, k, result) rootcount = resolve(n, k, [bp, bq, br], False) return result
def write_triplet(n, k, p, q): """ Given a partition p and its complement q, computes the difference, and checks the sum. """ r = difference(n, k, p, q) q.sort(reverse=True) r.sort(reverse=True) # print 'the triplet :', p, q, r bp = partition2bracket(n, k, p) bq = partition2bracket(n, k, q) br = partition2bracket(n, k, r) rc = resolve(n, k, [bp, bq, br], verbose=False) print 'the brackets :', bp, bq, br, 'root count :', rc
def main(): """ Prompts the user for n, k, and m. """ n = input('Give the ambient dimension : ') k = input('Give the dimension of the planes : ') m = 3 # input('Give the number of conditions : ') print '-> the parameters :', n, k, m ans = raw_input('generate all partitions ? (y/n) ') if(ans == 'y'): generate_all_partitions(n, k, write) else: p, q, r = random_triplet(n, k) bp = partition2bracket(n, k, p) bq = partition2bracket(n, k, q) br = partition2bracket(n, k, r) print 'the bracket representation :', bp, bq, br rc = resolve(n,k, [bp, bq, br], verbose=False) print 'the root count :', rc
def main(): """ Prompts the user for n, k, and m. """ n = input('Give the ambient dimension : ') k = input('Give the dimension of the planes : ') m = 3 # input('Give the number of conditions : ') print '-> the parameters :', n, k, m ans = raw_input('generate all partitions ? (y/n) ') if (ans == 'y'): generate_all_partitions(n, k, write) else: p, q, r = random_triplet(n, k) bp = partition2bracket(n, k, p) bq = partition2bracket(n, k, q) br = partition2bracket(n, k, r) print 'the bracket representation :', bp, bq, br rc = resolve(n, k, [bp, bq, br], verbose=False) print 'the root count :', rc
def generate_all_differences2(n, k, p, q, val, r, fun=None): """ Recursive enumerator for all differences, as called by generate_all_differences. """ if(len(r) == k): br = partition2bracket(n, k, r) rc = resolve(n, k, [p, q, br], False) if(rc > 2): if(fun != None): fun(p,q,br,rc) else: print 'brackets :', [p, q, br], 'root count :', rc elif(len(r) == k - 1): if(val <= r[k-2]): generate_all_differences2(n, k, p, q, 0, r+[val], fun) else: upper = min([val, n-k, r[len(r)-1]]) lower = val/(k - len(r)) for i in range(lower, upper+1): generate_all_differences2(n, k, p, q, val-i, r+[i], fun)
def generate_all_differences2(n, k, p, q, val, r, fun=None): """ Recursive enumerator for all differences, as called by generate_all_differences. """ if (len(r) == k): br = partition2bracket(n, k, r) rc = resolve(n, k, [p, q, br], False) if (rc > 2): if (fun != None): fun(p, q, br, rc) else: print 'brackets :', [p, q, br], 'root count :', rc elif (len(r) == k - 1): if (val <= r[k - 2]): generate_all_differences2(n, k, p, q, 0, r + [val], fun) else: upper = min([val, n - k, r[len(r) - 1]]) lower = val / (k - len(r)) for i in range(lower, upper + 1): generate_all_differences2(n, k, p, q, val - i, r + [i], fun)