Codage DFSR (Deep First Search for RDF)

 
 

La jointure de deux codes d1 et d2 de taille s − 1(s > 2) qui partagent un même noyau (s − 2 arcs) est effectuée pour obtenir un code de taille s. Avant de garder le code résultant et lui attribuer un identifiant nous vérifions (i) qu’il n’est pas redondant dans l’index (ii) et que le motif auquel il correspond est instancié dans la source. Comme dans la phase précédente les codes joints sont marqués. La sous

procédure join suivante génére un ou deux codes et la procédure DFSRNedges vérifie si un code est instancié dans la source RDF et n’est pas redondant dans l’index.

procedure DFSRNEdges (P: set of code previous level)

  1. 1.  var  levelN = {} identifier = 0       

  2. 2. for all DFSR codes d1 in P do       

  3. 3.  for all DFSR codes d2 in P do       

  4. 4.    if(kernel(d1,d2)) then {       

  5. 5.      d = join(d1,d2,kernel)        

  6. 6.      for each DFSR code di in d       

  7. 7.       if(di not in levelN) {       

  8. 8.        if(di is frequent) then {        

  9. 9.         di.kernel=concat(d1.identifier, d2.identifier)

  10. 10.         d.identifier=identifier+1       

  11. 11.        identifier =identifier+1       

  12. 12.        levelN = levelN U di       

  13. 13.        marked(d1)        

  14. 14.        marked(d2) } }       

  15. 15.      else { //di already in levelN        

  16. 16.        marked(d1)        

  17. 17.        marked(d2) } }


subProcedure join (dG, dH, k)        

  1. 1.  eG = edgeNotInKernel(dG,k) ; eH = edgeNotInKernel(dH,k)

  2. 2.  dG = dG – eG ; dH = dH – eH

  3. 3.  tG = linkToKernel(dG, eG)  ; tH = linkToKernel(dH, eH)

  4. 4.  tH1 = uniquEdgeThrougth(dG,dH,tG)

  5. 5.  if tH1 < 0 then {//no unique time

  6. 6.  times = timesPossible()

  7. 7.  tH1 = chooseOne(times, dG, dH)

  8. 8.  } 

  9. 9. tH2=secondTime(eH,eG,tG,tH)

  10. 10. dH.setKernel(concat(dG.id,dH.id))

  11. 11.  eG.setKernel(dG.id)

  12. 12. eH.setKernel(dH.id)

  13. 13. for all time t in tH2 do {

  14. 14.  eG.setDiscoveries(tH1,t)

  15. 15.  dH.addEdge(eG)

  16. 16.  dH.sort()

  17. 17.  res.add(dH)

  18. 18. }

  19. 19. return res

Algorithme

  1. PucePrésentation

Procédures principales

  1. PuceDFSROneEdge

  2. PuceDFSRTwoEdges

  3. PuceDFSNEdges

Procédure DFSRTwoEdges