Так что это код для ранга страницы, где я должен заполнить матрицу и запустить формулу на нем.Функция по какой-то причине заполняет некоторые записи как nan, где это должно быть ноль.Вот вход, который вызывает нан.7 - номер строки, 100 - мощность.Веб-сайты от и до, так от google.com до gmail.com.
7 100
google.com gmail.com
google.com maps.com
facebook.com ufl.edu
ufl.edu google.com
ufl.edu gmail.com
maps.com facebook.com
maps.com quora.com
Делоимеет отношение к странице quora.com, не имеющей каких-либо исходящих страниц, поэтому все должны возвращать ноль, а не nan.
void AdjacencyListorMatrix::PopulateMatrix() {
set<string>::iterator it;
int i;
for (i = 1, it = pages.begin(); it != pages.end(); ++it, i++) {
vertexMaps[*it] = i;
}
vertices = pages.size();
matrix = new double*[vertices];
for (int i = 0; i < vertices; i++) {
matrix[i] = new double[vertices];
}
for (int i = 0; i < vertices; i++) {
for (int j = 0; j < vertices; j++) {
matrix[i][j] = 0.0;
}
}
multimap<string, string>::iterator mapIt;
for (mapIt = inputMaps.begin(); mapIt != inputMaps.end(); mapIt++) {
matrix[vertexMaps[mapIt->second] - 1][vertexMaps[mapIt->first] -1] = 1;
}
int columnAdds[vertices];
for (int i = 0; i < vertices; i++) {
columnAdds[i] = 0.0;
}
for (int i = 0; i < vertices; i++) {
for (int j = 0; j < vertices; j++) {
columnAdds[j] += matrix[i][j];
}
}
for (int i = 0; i < vertices; i++) {
for (int j = 0; j < vertices; j++) {
matrix[i][j] /= columnAdds[j];
}
}
result = new double[vertices];
for (int i = 0; i < vertices; i++) {
result[i] = 1.0 / (double) vertices;
}
}
Это информация о классе:
class AdjacencyListorMatrix {
private:
set<string> pages;
multimap<string, string> inputMaps;
map<string, long> vertexMaps;
double **matrix;
double *result;
int vertices;
public:
void PopulateVertices(string from, string to);
void PopulateMatrix();
void PageRank(int n);
~AdjacencyListorMatrix();
};
1 2 3 4 5 6
1 0 nan 0 0.5 nan 0
2 0 nan 0.5 0 nan 0.5
3 0 nan 0 0 nan 0.5
4 0 nan 0.5 0 nan 0
5 0 nan 0 0.5 nan 0
6 1 nan 0 0 nan 0
Как мне сделать эти наны быть 0 ??