My Project
debian-1:4.1.2-p1+ds-2
Singular
dyn_modules
subsets
subsets.cc
Go to the documentation of this file.
1
#include "
Singular/libsingular.h
"
2
3
#include <vector>
4
5
void
subset
(std::vector<int> &arr,
int
size
,
int
left,
int
index
, std::vector<int> &
l
, std::vector<std::vector<int> > &L)
6
{
7
if
(left==0)
8
{
9
L.push_back(
l
);
10
return
;
11
}
12
13
for
(
int
i
=
index
;
i
<
size
;
i
++)
14
{
15
l
.push_back(arr[
i
]);
16
subset
(arr,
size
,left-1,
i
+1,
l
,L);
17
l
.pop_back();
18
}
19
}
20
21
// USAGE: subsets(n,k) n int, k int
22
// RETURN: list, a list of lists,
23
// representing subsets of {1,...,n} of cardinality k
24
// NOTE: the lists will be sorted lexicographically
25
// and the elements in each of the lists are sorted naturally
26
BOOLEAN
subsets
(
leftv
res
,
leftv
args)
27
{
28
leftv
u = args;
29
if
((u!=
NULL
) && (u->
Typ
()==
INT_CMD
))
30
{
31
leftv
v
= u->
next
;
32
if
((
v
!=
NULL
) && (
v
->Typ()==
INT_CMD
) && (
v
->
next
==
NULL
))
33
{
34
int
n = (int)(
long
) u->
Data
();
35
int
k
= (int)(
long
)
v
->Data();
36
std::vector<int> array(n);
37
for
(
int
i
=0;
i
<n;
i
++)
38
array[
i
]=
i
+1;
39
std::vector<int> ltemp;
40
std::vector<std::vector<int> > lt;
41
subset
(array,n,
k
,0,ltemp,lt);
42
43
lists
Lt = (
lists
)
omAllocBin
(
slists_bin
);
44
Lt->
Init
(lt.size());
45
for
(
unsigned
i
=0;
i
<lt.size();
i
++)
46
{
47
std::vector<int> lti = lt[
i
];
48
lists
Lti = (
lists
)
omAllocBin
(
slists_bin
);
49
Lti->
Init
(
k
);
50
for
(
unsigned
j
=0;
j
<lti.size();
j
++)
51
{
52
Lti->
m
[
j
].
rtyp
=
INT_CMD
;
53
Lti->
m
[
j
].
data
= (
void
*)(
long
)lti[
j
];
54
}
55
Lt->
m
[
i
].
rtyp
=
LIST_CMD
;
56
Lt->
m
[
i
].
data
= (
void
*) Lti;
57
}
58
59
res
->rtyp =
LIST_CMD
;
60
res
->data = (
void
*) Lt;
61
return
FALSE
;
62
}
63
}
64
WerrorS
(
"subsets: unexpected parameter"
);
65
return
TRUE
;
66
}
67
68
//------------------------------------------------------------------------
69
// initialisation of the module
70
extern
"C"
int
SI_MOD_INIT(
subsets
)(
SModulFunctions
*
p
)
71
{
72
p
->iiAddCproc(
"subsets.so"
,
"subsets"
,
FALSE
,
subsets
);
73
return
(
MAX_TOK
);
74
}
FALSE
#define FALSE
Definition:
auxiliary.h:96
sleftv::Data
void * Data()
Definition:
subexpr.cc:1175
j
int j
Definition:
facHensel.cc:105
k
int k
Definition:
cfEzgcd.cc:92
LIST_CMD
Definition:
tok.h:117
subsets
BOOLEAN subsets(leftv res, leftv args)
Definition:
subsets.cc:26
MAX_TOK
Definition:
tok.h:216
omAllocBin
#define omAllocBin(bin)
Definition:
omAllocDecl.h:203
Variable::next
Variable next() const
Definition:
factory.h:137
sleftv
Class used for (list of) interpreter objects.
Definition:
subexpr.h:81
subset
void subset(std::vector< int > &arr, int size, int left, int index, std::vector< int > &l, std::vector< std::vector< int > > &L)
Definition:
subsets.cc:5
TRUE
#define TRUE
Definition:
auxiliary.h:100
i
int i
Definition:
cfEzgcd.cc:125
res
CanonicalForm res
Definition:
facAbsFact.cc:64
INT_CMD
Definition:
tok.h:95
BOOLEAN
int BOOLEAN
Definition:
auxiliary.h:87
size
int size(const CanonicalForm &f, const Variable &v)
int size ( const CanonicalForm & f, const Variable & v )
Definition:
cf_ops.cc:600
sleftv::data
void * data
Definition:
subexpr.h:87
slists::m
sleftv * m
Definition:
lists.h:45
slists
Definition:
lists.h:22
libsingular.h
slists_bin
VAR omBin slists_bin
Definition:
lists.cc:22
WerrorS
void WerrorS(const char *s)
Definition:
feFopen.cc:24
sleftv::Typ
int Typ()
Definition:
subexpr.cc:1032
SModulFunctions
Definition:
ipid.h:66
sleftv::rtyp
int rtyp
Definition:
subexpr.h:90
NULL
#define NULL
Definition:
omList.c:11
lists
slists * lists
Definition:
mpr_numeric.h:145
l
int l
Definition:
cfEzgcd.cc:93
v
const Variable & v
< [in] a sqrfree bivariate poly
Definition:
facBivar.h:37
slists::Init
INLINE_THIS void Init(int l=0)
p
int p
Definition:
cfModGcd.cc:4019
index
static int index(p_Length length, p_Ord ord)
Definition:
p_Procs_Impl.h:585
sleftv::next
leftv next
Definition:
subexpr.h:85
Generated on Thu Jan 9 2020 20:32:43 for My Project by
doxygen 1.8.16
for
Singular debian-1:4.1.2-p1+ds-2