Repository navigation
Expand file tree
/
Copy pathprobability.h
More file actions
43 lines (39 loc) · 1.61 KB
/
Copy pathprobability.h
File metadata and controls
43 lines (39 loc) · 1.61 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
#ifndef __PROBABILITY_H__
#define __PROBABILITY_H__
#include "node.h"
double getConditionalProbability(Link *links);
void updateLinksConditionalProbabilities(Link *links);
void updateLinksProbabilities(Link *links, unsigned int linksCount);
void updateConditionalProbabilities(Node *nodes);
void updateNodesProbabilities(Node *nodes, unsigned int totalWords);
Link *getMostLikelyLink(Link *links);
Link *getMostLikelyLink(Link *links){
if(links==NULL)
return NULL;
Link *next = getMostLikelyLink(links->next);
return next==NULL ? links : links->probability>next->probability ? links : next;
}
void updateConditionalProbabilities(Node *nodes){
updateNodesProbabilities(nodes, countWords(nodes));
for(; nodes!=NULL; nodes = nodes->next)
updateLinksConditionalProbabilities(nodes->links);
}
void updateNodesProbabilities(Node *nodes, unsigned int totalWords){
for(; nodes!=NULL; nodes = nodes->next){
nodes->probability = (double)nodes->count/totalWords;
updateLinksProbabilities(nodes->links, countWordLinks(nodes->links));
}
}
void updateLinksProbabilities(Link *links, unsigned int totalLinks){
for(; links!=NULL; links = links->next)
links->probability = (double)links->count/totalLinks;
}
void updateLinksConditionalProbabilities(Link *links){
double conditionalProbability = getConditionalProbability(links);
for(; links!=NULL; links = links->next)
links->probability *= links->node->probability/conditionalProbability;
}
double getConditionalProbability(Link *links){
return links==NULL ? 0.0 : links->probability*links->node->probability + getConditionalProbability(links->next);
}
#endif