Skip to content

Commit 3f9b9a9

Browse files
Tentativa de melhorar a eficiência do metodo construtor nas MRFTrees
1 parent a5a0898 commit 3f9b9a9

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

ProjetoAMC/src/MRFTree.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public MRFTree(Tree arvore, Dataset tfiber) { // arvore provem do MST do Weighte
3636
// adicionamos o primeiro no a fila
3737
q.add(e[0]);
3838

39-
// adicionamos as arestas segundo a direcao definida pelo no fixado
4039

40+
// adicionamos as arestas segundo a direcao definida pelo no fixado
4141
boolean[] visited = new boolean[n];
4242

4343
// usamos uma condicao para fazer um passo especial a primeira vez que encontra um filho ou pai deste no que foi fixado
@@ -67,6 +67,47 @@ public MRFTree(Tree arvore, Dataset tfiber) { // arvore provem do MST do Weighte
6767
}
6868
visited[o] = true;
6969
}
70+
71+
72+
// para melhorar
73+
// este algoritmo nao e mais eficiente pois implica o uso do remove num arraylist que nao sabe que o numero e limitado...
74+
// seria mais eficiente se a remocao fosse O(log(n))
75+
76+
77+
/*
78+
// adicionamos as arestas segundo a direcao definida pelo no fixado
79+
ArrayList<Integer> notvisited = new ArrayList<Integer>();
80+
81+
for (int i = 0; i < n; i++) notvisited.add(i);
82+
83+
// usamos uma condicao para fazer um passo especial a primeira vez que encontra um filho ou pai deste no que foi fixado
84+
boolean especial = true;
85+
while (!q.isEmpty()) {
86+
int o = q.remove();
87+
// TODO podemos aumentar a eficiencia ao nao ver os nos que ja foram vistos
88+
for (int i : notvisited) { // para cada no da arvore
89+
if (arvore.EdgeQ(i, o)) { // se o no i e filho do no o
90+
if (especial) {
91+
// fixa-se a aresta especial como a aresta que liga o no definido anteriormente ao no de menor ordem (que esteja ligado)
92+
e[1] = i;
93+
especial = false;
94+
}
95+
96+
// adiciona-se esta aresta a lista de arestas
97+
E.add(new int[] {o, i});
98+
99+
// e adiciona-se este no a queue
100+
q.add(i);
101+
102+
// calcula-se o phi para esta aresta
103+
// e guarda-se os resultados deste calculo numa matriz
104+
// com os diferentes valores de phi(xi,xj) nesta aresta da arvore
105+
markovtree.Add(o, i, phi(o,i));
106+
}
107+
}
108+
notvisited.remove(Integer.valueOf(o));
109+
}
110+
*/
70111
}
71112

72113

ProjetoAMC/src/Main.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ public static void main(String[] args) {
280280
System.out.println("------------------------------Teste------------------------------");
281281
System.out.println();
282282

283-
System.out.println(System.nanoTime() - tempo);
283+
284284
/*
285285
286286
Dataset ds1 = new Dataset(2);
@@ -329,6 +329,10 @@ public static void main(String[] args) {
329329
System.out.println(mrftreeTeste.prob(testV4));
330330
System.out.println(mrftreeTeste.prob(testV5));
331331

332+
System.out.println(System.nanoTime() - tempo);
333+
334+
// 100 000 000
335+
332336
/*
333337
* nossos:
334338
0.40241752812404996

0 commit comments

Comments
 (0)