From a8f2e33b075a9aaf41b41d94b0f1722e04946a7b Mon Sep 17 00:00:00 2001 From: Mathis LEBEL <145991354+mathislebel@users.noreply.github.com> Date: Thu, 23 Jan 2025 10:34:51 +0100 Subject: [PATCH] fixe main --- .vscode/settings.json | 61 ++++++++++++- src/api.cpp | 2 +- src/graph.cpp | 5 ++ src/includes/graph.hpp | 11 ++- src/includes/preprocessing.hpp | 57 ++++--------- src/main.cpp | 152 ++++++++------------------------- src/preprocessing.cpp | 89 +++++-------------- src/shortest_path | Bin 251904 -> 220464 bytes 8 files changed, 146 insertions(+), 231 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 2b30aa7..f5d93e9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,6 +9,65 @@ "unordered_map": "cpp", "queue": "cpp", "iostream": "cpp", - "stack": "cpp" + "stack": "cpp", + "__bit_reference": "cpp", + "__hash_table": "cpp", + "__node_handle": "cpp", + "__split_buffer": "cpp", + "__threading_support": "cpp", + "__tree": "cpp", + "__verbose_abort": "cpp", + "any": "cpp", + "array": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "charconv": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "codecvt": "cpp", + "complex": "cpp", + "condition_variable": "cpp", + "csignal": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "execution": "cpp", + "memory": "cpp", + "forward_list": "cpp", + "future": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "ios": "cpp", + "iosfwd": "cpp", + "list": "cpp", + "locale": "cpp", + "map": "cpp", + "mutex": "cpp", + "new": "cpp", + "optional": "cpp", + "ostream": "cpp", + "print": "cpp", + "ratio": "cpp", + "regex": "cpp", + "set": "cpp", + "shared_mutex": "cpp", + "span": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string": "cpp", + "string_view": "cpp", + "tuple": "cpp", + "typeinfo": "cpp", + "valarray": "cpp", + "variant": "cpp", + "algorithm": "cpp" } } \ No newline at end of file diff --git a/src/api.cpp b/src/api.cpp index 636c1a8..b28b04f 100644 --- a/src/api.cpp +++ b/src/api.cpp @@ -1,3 +1,3 @@ -#include "crow_all.h" + diff --git a/src/graph.cpp b/src/graph.cpp index 923a956..11d319e 100644 --- a/src/graph.cpp +++ b/src/graph.cpp @@ -5,6 +5,10 @@ #include #include +// Constructeur par défaut +Graph::Graph() : adjList() {} + +// Ajouter une arête au graphe void Graph::add_edge(int source, int target, int weight) { if (source >= static_cast(adjList.size()) || target >= static_cast(adjList.size())) { adjList.resize(std::max(source, target) + 1); @@ -13,6 +17,7 @@ void Graph::add_edge(int source, int target, int weight) { adjList[target].emplace_back(source, weight); } +// Trouver le chemin le plus court entre deux nœuds std::vector Graph::shortest_path(int source, int target, int& totalTime) { constexpr int INF = std::numeric_limits::max(); diff --git a/src/includes/graph.hpp b/src/includes/graph.hpp index 2be20dd..de29157 100644 --- a/src/includes/graph.hpp +++ b/src/includes/graph.hpp @@ -5,18 +5,23 @@ struct Edge { int target; - int weight; + int weight; Edge(int target, int weight) : target(target), weight(weight) {} }; class Graph { public: + Graph(); + void add_edge(int source, int target, int weight); std::vector shortest_path(int source, int target, int& totalTime); + + private: - std::vector> adjList; +std::vector> adjList; }; -#endif +#endif // GRAPH_HPP + diff --git a/src/includes/preprocessing.hpp b/src/includes/preprocessing.hpp index 20ef471..3a4f6f4 100644 --- a/src/includes/preprocessing.hpp +++ b/src/includes/preprocessing.hpp @@ -1,44 +1,19 @@ -#pragma once +#ifndef PREPROCESSING_HPP +#define PREPROCESSING_HPP + +#include "graph.hpp" #include -#include -#include -#include +#include #include -#include -#include -#include -#include -#include -#include "graph.hpp" - -typedef struct s_Connection { - int landmarkA; - int landmarkB; - int time; -} s_Connection; - -typedef struct s_Result { - int maxId; - std::vector errorReport; -} s_Result; - -typedef std::unordered_map> TPDF_GRAPH; -typedef std::unordered_set TPDF_CONNECTIONS; -typedef std::vector TPDF_CONNECTIONS_WITH_TIME; // - -s_Result analyze_file(const std::string& filePath, int maxLines); - -bool preprocess_data(const std::string& filePath, int maxLines); - -//json file -void write_json_to_file(const TPDF_CONNECTIONS_WITH_TIME& connectionsWithTime, const std::string& outputJsonFile); - -bool preprocess_data(const std::string& filePath, int maxLines, const std::string& outputJsonFile); -void process_chunk( - const std::vector& lines, // Remarque : Utilisez std::string et std::vector - Graph& graph, - TPDF_CONNECTIONS& seenConnections, - std::atomic& maxId, // Remarque : Utilisez std::atomic - TPDF_CONNECTIONS_WITH_TIME& connectionsWithTime -); \ No newline at end of file +/** + * @brief Prétraite les données d'un fichier CSV et les stocke dans un graphe. + * + * @param filePath Chemin du fichier CSV. + * @param maxLines Nombre maximum de lignes à traiter (0 = toutes les lignes). + * @param graph Référence au graphe dans lequel les données sont stockées. + * @return true si le prétraitement est réussi, false sinon. + */ +bool preprocess_data(const std::string& filePath, int maxLines, Graph& graph); + +#endif // PREPROCESSING_HPP diff --git a/src/main.cpp b/src/main.cpp index 7a4bba3..ab0bc08 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,138 +1,56 @@ #include "includes/graph.hpp" +#include "includes/preprocessing.hpp" #include +#include #include -#include -#include #include +#include // Pour mesurer le temps d'exécution -using namespace std; -using namespace chrono; - -// Fonction pour afficher le logo -void display_logo(const string& file_path) { - ifstream logo_file(file_path); - if (logo_file.is_open()) { - string line; - while (getline(logo_file, line)) { - cout << line << endl; - } - logo_file.close(); - } else { - cerr << "Error: Unable to open logo file." << endl; - } -} - -// Fonction pour afficher une barre de progression -void display_progress_bar(size_t current, size_t total) { - const int barWidth = 50; - float progress = static_cast(current) / total; - int position = static_cast(progress * barWidth); - - cout << "\r["; - for (int i = 0; i < barWidth; ++i) { - if (i < position) cout << "="; - else if (i == position) cout << ">"; - else cout << " "; - } - cout << "] " << int(progress * 100.0) << "% (" << current << "/" << total << ")"; - cout.flush(); -} - -// Prétraitement des données -bool preprocess_data_with_progress(const string& filePath, int maxLines, Graph& graph, size_t& totalLinesProcessed) { - ifstream inputFile(filePath); - if (!inputFile.is_open()) { - throw runtime_error("Error: Unable to find the CSV file!" + filePath); - } - - // Compter les lignes dans le fichier - size_t totalLines = 0; - string line; - while (getline(inputFile, line)) { - ++totalLines; - if (maxLines > 0 && totalLines >= static_cast(maxLines)) break; - } - inputFile.clear(); - inputFile.seekg(0, ios::beg); - - // Charger les données dans le graphe - size_t currentLine = 0; - while (getline(inputFile, line) && (maxLines <= 0 || currentLine < static_cast(maxLines))) { - ++currentLine; - - int source, target, weight; - if (sscanf(line.c_str(), "%d,%d,%d", &source, &target, &weight) == 3) { - graph.add_edge(source, target, weight); - } - - display_progress_bar(currentLine, totalLines); +int main(int argc, char* argv[]) { + if (argc != 4) { + std::cerr << "Usage: " << argv[0] << " \n"; + return 1; } - inputFile.close(); - cout << endl; - - totalLinesProcessed = currentLine; - return true; -} - -int main() { - string logoFilePath = "logo/Logo QPS.txt"; // Chemin du fichier contenant le logo - display_logo(logoFilePath); - - string inputFilePath = "data/usa_roads.csv"; // Remplacez par le chemin de votre fichier CSV - int maxLines = 28854314; // Nombre maximal de lignes à traiter (ou -1 pour tout charger) + std::string inputFilePath = argv[1]; + int source = std::stoi(argv[2]); + int target = std::stoi(argv[3]); Graph graph; - size_t totalLinesProcessed = 0; try { - cout << "Prétraitement des données en cours..." << endl; - auto startTime = high_resolution_clock::now(); - - preprocess_data_with_progress(inputFilePath, maxLines, graph, totalLinesProcessed); - - auto endTime = high_resolution_clock::now(); - duration elapsed = endTime - startTime; - - cout << "Prétraitement terminé avec succès !" << endl; - cout << "Nombre total de lignes traitées : " << totalLinesProcessed << endl; - cout << "Temps écoulé : " << elapsed.count() << " secondes." << endl; - } catch (const exception& e) { - cerr << "Erreur: " << e.what() << endl; - return 1; - } - - // Boucle principale pour entrer les requêtes de chemin le plus court - while (true) { - int source, target; - cout << "Entrez le point de départ (ou -1 pour quitter) : "; - cin >> source; - if (source == -1) break; - - cout << "Entrez le point d'arrivée : "; - cin >> target; - - cout << "Recherche du chemin le plus court..." << endl; - auto startTime = high_resolution_clock::now(); - - int totalTime = 0; - auto path = graph.shortest_path(source, target, totalTime); - - auto endTime = high_resolution_clock::now(); - duration elapsed = endTime - startTime; + // Mesurer le temps de prétraitement + auto preprocessingStart = std::chrono::high_resolution_clock::now(); + preprocess_data(inputFilePath, 0, graph); + auto preprocessingEnd = std::chrono::high_resolution_clock::now(); + std::chrono::duration preprocessingTime = preprocessingEnd - preprocessingStart; + + std::cout << "Prétraitement terminé. Données chargées en mémoire.\n"; + std::cout << "Temps de prétraitement : " << preprocessingTime.count() << " secondes.\n"; + + // Mesurer le temps de calcul du chemin le plus court + auto pathCalculationStart = std::chrono::high_resolution_clock::now(); + int totalTime; + std::vector path = graph.shortest_path(source, target, totalTime); + auto pathCalculationEnd = std::chrono::high_resolution_clock::now(); + std::chrono::duration pathCalculationTime = pathCalculationEnd - pathCalculationStart; if (path.empty()) { - cout << "Aucun chemin trouvé entre " << source << " et " << target << "." << endl; + std::cout << "Aucun chemin trouvé entre " << source << " et " << target << ".\n"; } else { - cout << "Chemin le plus court de " << source << " à " << target << " : "; + std::cout << "Chemin le plus court : "; for (int node : path) { - cout << node << " "; + std::cout << node << " "; } - cout << "\nTemps total : " << totalTime << " unités." << endl; - cout << "Recherche terminée en " << elapsed.count() << " secondes." << endl; + std::cout << "\nTemps total : " << totalTime << "\n"; } + + std::cout << "Temps de calcul du chemin : " << pathCalculationTime.count() << " secondes.\n"; + + } catch (const std::exception& e) { + std::cerr << "Erreur : " << e.what() << "\n"; + return 1; } - cout << "Programme terminé. Merci d'avoir utilisé notre service !" << endl; return 0; } diff --git a/src/preprocessing.cpp b/src/preprocessing.cpp index 683bb71..5fcd2cc 100644 --- a/src/preprocessing.cpp +++ b/src/preprocessing.cpp @@ -1,118 +1,71 @@ #include "includes/preprocessing.hpp" -#include "includes/graph.hpp" -#include -#include -#include #include -#include -#include #include #include +#include #include #define SECRET_DELIMITER "," -using namespace std; +// Alias pour les connexions +using TPDF_CONNECTIONS = std::unordered_set; -// Alias types for graph and connections -using TPDF_GRAPH = unordered_map>; -using TPDF_CONNECTIONS = unordered_set; -using TPDF_CONNECTIONS_WITH_TIME = vector; - -// Generate JSON file manually (if needed) -void write_json_to_file(const TPDF_CONNECTIONS_WITH_TIME& connectionsWithTime, const string& outputJsonFile) { - if (outputJsonFile.empty()) { - return; // Skip writing if no file path is specified - } - - ofstream jsonFile(outputJsonFile); - if (!jsonFile.is_open()) { - throw runtime_error("Error: Unable to open output file " + outputJsonFile); - } - - jsonFile << "{\n \"connections\": [\n"; - for (size_t i = 0; i < connectionsWithTime.size(); ++i) { - const auto& conn = connectionsWithTime[i]; - jsonFile << " {\n" - << " \"ID1\": " << conn.landmarkA << ",\n" - << " \"ID2\": " << conn.landmarkB << ",\n" - << " \"weight\": " << conn.time << "\n" - << " }"; - if (i < connectionsWithTime.size() - 1) { - jsonFile << ","; - } - jsonFile << "\n"; - } - jsonFile << " ]\n}\n"; -} - -// Process a chunk of lines to populate the graph and store connections with time +// Processus de traitement des données pour peupler le graphe void process_chunk( - ifstream& inputFile, // pass the file stream directly for more efficient reading + std::ifstream& inputFile, Graph& graph, TPDF_CONNECTIONS& seenConnections, - std::atomic& maxId, // Utilisez std::atomic - TPDF_CONNECTIONS_WITH_TIME& connectionsWithTime, - int maxLines // Limit number of lines processed + std::atomic& maxId, + int maxLines ) { - string line; + std::string line; int lineCount = 0; - while (getline(inputFile, line) && (maxLines <= 0 || lineCount < maxLines)) { + while (std::getline(inputFile, line) && (maxLines <= 0 || lineCount < maxLines)) { lineCount++; std::istringstream ss(line); int landmarkA, landmarkB, time; char delimiter; - // Extract data (landmarkA, landmarkB, time) if (!(ss >> landmarkA >> delimiter >> landmarkB >> delimiter >> time) || delimiter != ',') { - continue; // Skip invalid lines + continue; // Ignorer les lignes invalides } if (landmarkA <= 0 || landmarkB <= 0 || time <= 0 || landmarkA == landmarkB) { - continue; // Skip invalid or self-loop connections + continue; // Ignorer les connexions invalides ou boucles } std::string connection = std::to_string(landmarkA) + SECRET_DELIMITER + std::to_string(landmarkB); std::string reverseConnection = std::to_string(landmarkB) + SECRET_DELIMITER + std::to_string(landmarkA); if (seenConnections.count(connection) > 0 || seenConnections.count(reverseConnection) > 0) { - continue; // Skip duplicate connections + continue; // Ignorer les connexions dupliquées } - // Store connection with time in the vector - s_Connection conn = {landmarkA, landmarkB, time}; - connectionsWithTime.push_back(conn); - - // Add the connection to the weighted graph + // Ajouter au graphe graph.add_edge(landmarkA, landmarkB, time); - // Add to the seen connections set + // Marquer les connexions comme vues seenConnections.insert(connection); seenConnections.insert(reverseConnection); - // Update maxId + // Mettre à jour maxId maxId.store(std::max(maxId.load(), std::max(landmarkA, landmarkB))); } } -// Preprocess the road connections data by storing it in a graph and loading connections with time -bool preprocess_data(const string& filePath, int maxLines, const string& outputJsonFile, Graph& graph) { +// Prétraiter les données pour les stocker dans un graphe +bool preprocess_data(const std::string& filePath, int maxLines, Graph& graph) { TPDF_CONNECTIONS seenConnections; - atomic maxId(0); - TPDF_CONNECTIONS_WITH_TIME connectionsWithTime; + std::atomic maxId(0); - ifstream inputFile(filePath); + std::ifstream inputFile(filePath); if (!inputFile.is_open()) { - throw runtime_error("Error: Unable to find the CSV file!" + filePath); + throw std::runtime_error("Erreur : Impossible d'ouvrir le fichier CSV : " + filePath); } - // Process data in chunks directly from the file stream to avoid large memory usage - process_chunk(inputFile, graph, seenConnections, maxId, connectionsWithTime, maxLines); - - // Generate the JSON file if a path is provided - write_json_to_file(connectionsWithTime, outputJsonFile); + process_chunk(inputFile, graph, seenConnections, maxId, maxLines); inputFile.close(); return true; diff --git a/src/shortest_path b/src/shortest_path index c5826a68e001277e053a8d64e7a28d0a9dd2899e..0bd923649ed47f023f4bd7a5a69a74b1993023f1 100755 GIT binary patch delta 36941 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 Pd9|kjWk~=400000ImpW^ delta 49331 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 O!Ep!I!jdTAcKJV!h1yyG