165 if ( ProbThis < ProbLimit )
168 if ( zFunc == Cudd_ReadZero(dd) )
171 if ( zFunc == Cudd_ReadOne(dd) )
173 Vec_IntAddToEntry( vResult, 0, 1 );
174 Vec_IntAppend( vResult, vSubset );
175 Vec_IntPush( vResult, -1 );
181 Vec_IntPush( vSubset, Cudd_NodeReadIndex(zFunc) );
182 Extra_zddTruncate_rec( dd, cuddT(zFunc), pVarProbs, ProbLimit, ProbThis * pVarProbs[Cudd_NodeReadIndex(zFunc)], vSubset, vResult );
183 Vec_IntPop( vSubset );
192 int i, sizeZ = Cudd_ReadZddSize(dd);
195 assert( ProbLimit > 0 && ProbLimit <= 1 );
196 for ( i = 0; i < sizeZ; i++ )
197 assert( pVarProbs[i] > 0 && pVarProbs[i] <= 1 );
199 vSubset = Vec_IntAlloc( sizeZ );
200 vResult = Vec_IntAlloc( 10 * sizeZ );
201 Vec_IntPush( vResult, 0 );
203 Vec_IntFree( vSubset );
204 pResult = Vec_IntReleaseArray( vResult );
205 Vec_IntFree( vResult );
247 DdNode * zOne, * zVar, * zRes, * zTemp;
248 zRes = Cudd_ReadZero(dd); Cudd_Ref( zRes );
249 for ( i = 0; i < nSubsets; i++ )
251 zOne = Cudd_ReadOne(dd); Cudd_Ref( zOne );
252 for ( k = 0; pSubsets[i][k] != -1; k++ )
256 zOne = Cudd_zddUnateProduct( dd, zTemp = zOne, zVar ); Cudd_Ref( zOne );
257 Cudd_RecursiveDerefZdd( dd, zTemp );
259 zRes = Cudd_zddUnion( dd, zRes, zOne ); Cudd_Ref( zRes );
260 Cudd_RecursiveDerefZdd( dd, zOne );
306 int pSubsets[
TEST_SET_MAX][
TEST_VAR_MAX+1] = { {0, 3, 5, -1}, {1, 2, 3, 6, 9, -1}, {1, 5, 7, 8, -1}, {2, 4, -1}, {0, 5, 6, 9, -1} };
308 double pVarProbs[
TEST_VAR_MAX] = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
309 double ProbLimit = 0.001;
313 DdManager * dd = Cudd_Init( 0,
TEST_VAR_MAX, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS , 0 );
317 printf(
"The initial ZDD representing %d subsets:\n", nSubsets );
318 Cudd_zddPrintMinterm( dd, zFunc );
322 printf(
"The resulting ZDD representing %d subsets:\n", pOutput[0] );
327 Cudd_RecursiveDerefZdd( dd, zFunc );