-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgetOddSubsets.py
More file actions
104 lines (74 loc) · 2.37 KB
/
getOddSubsets.py
File metadata and controls
104 lines (74 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# written by clopez
import sys
import itertools
import time
def findSubsets(S,m):
return set(itertools.combinations(S, m))
def getSetOfNumbers(number):
allList = range(number+1)
return allList[1:]
def getOddCardinalityList(number):
allNumbers = range(number)[3:]
oddList = []
for i in allNumbers:
if i%2 > 0:
oddList.append(i)
return oddList
import numpy as np
def binnings(n, k, cache={}):
if n == 0:
return np.zeros((1, k))
if k == 0:
return np.empty((0, 0))
args = (n, k)
if args in cache:
return cache[args]
a = binnings(n - 1, k, cache)
a1 = a + (np.arange(k) == 0)
b = binnings(n, k - 1, cache)
b1 = np.hstack((np.zeros((b.shape[0], 1)), b))
result = np.vstack((a1, b1))
cache[args] = result
return result
#if __name__ == '__main__':
# import timeit
# print timeit.timeit('binnings(20, 5, {})', setup='from __main__ import binnings', number=1)
number = 0
setSize = 0
if len(sys.argv) > 1:
number = int(sys.argv[1])
if len(sys.argv) > 2:
setSize = int(sys.argv[2])
if not number:
print "Please enter a number bigger than 3 and optionally the size of the set"
elif number < 4:
print "The input should be a number bigger than 3"
else:
start_time = time.time()
theSetOfNumbers = getSetOfNumbers(number)
if setSize:
oddSizeListForSets = [setSize]#getOddCardinalityList(number)
else:
oddSizeListForSets = getOddCardinalityList(number)
print "-> Get Base Data"
listOfSubsets = []
j = 0
for size in oddSizeListForSets:
nameOfFileWithFormat = "oddSubSetsWithFormat_%d_%d.txt" % (number,size)
nameOfFileWithoutFormat = "oddSubSets_%d_%d.txt" % (number,size)
try:
with open(nameOfFileWithFormat) as f: pass
except IOError as e:
f = open(nameOfFileWithFormat,'w')
fn = open(nameOfFileWithoutFormat,'w')
localSet = findSubsets(theSetOfNumbers,size)
for i in localSet:
j += 1
setOnString = " ".join(map(str,i))
setForInput = "set Sub[%d] := %s;" % (j,setOnString)
fn.write(setOnString+"\n")
f.write(setForInput+"\n")
f.close()
fn.close()
elapsed_time = time.time() - start_time
print elapsed_time