Алгоритм кратчайшего пути для URL

0

У меня возникли проблемы с поиском кратчайшего пути между двумя URL-адресами. A.csv, который мы предоставили, содержит список веб-сайтов, разделенных запятыми. Каждый веб-сайт может получить доступ к следующему веб-сайту в гиперссылке на этой странице. Например, если файл читает espn.com, espn.com/nba, espn.com/nbaschedules, вы можете перейти с espn.com на страницу nba и с страницы nba в расписания nba. Моя задача - найти наименьшее количество кликов, чтобы перейти с одного сайта на другой. Вот как я сохранил файл до сих пор. Я использую STL unordered_map для хранения.

ifstream inFile;
ofstream outFile;
inFile.open("urls.csv");
string line;
unordered_map<string, vector<string>> urlAdjList;
while(getline(inFile, line))  //Reads each line one at a time.
{
    int firstWord = 0;
    istringstream iss(line);
    string firstURL, url;
    while(iss >> url)
    {
        if(firstWord == 0 && url != "|")
        {
            firstURL = url;
            urlAdjList[firstURL];
            firstWord = 1;
                outFile << firstURL << endl;
        }
        else
            urlAdjList[firstURL].push_back(url);
    }
}
//Find the shortest path between mURL and nURL?

Мой вопрос: правильно ли я хранил его? Должен ли я использовать алгоритм Дейкстры или поиск по ширине?

Теги:
algorithm

2 ответа

1

Dijkstra algo эффективен только в том случае, если стоимость переключения между гиперссылками различна.

Поэтому предпочитайте BFS.

O (V) лучше, чем O ((V + E) log (V + E)) {V-вершины, E-ребра}

Лучше хранить граф в списке смежности идентификаторов с помощью vector <vector <int>>, а не хранить его в векторе <vector <string>>. Используйте массив для идентификации URL-адреса идентификатора.

0

Для этого вам, вероятно, нужно использовать алгоритм Дейкстры. Вам также нужно будет хранить все ваши данные в какой-либо структуре графика, например.

struct graph_node {
    vector<graph_node*> neighbours;
    string url;
}

Вы также можете использовать карту, чтобы затем сохранить все указатели value-> graph_node. Затем используйте алгоритм Дейкстры, чтобы найти кратчайший путь после создания графика.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню