首頁 > 後端開發 > C++ > 主體

圖表的應用、優點和缺點

WBOY
發布: 2023-08-29 18:13:06
轉載
969 人瀏覽過

圖表的應用、優點和缺點

圖表在不同學科中被使用。它們被用於生物學中表示基因交互作用,用於交通運輸中的路線優化,以及用於社交網路中的使用者連接分析。圖表的視覺表示複雜關係和觀察模式和趨勢的能力是其兩個優點。然而,處理大型資料集可能會使圖表變得笨重且難以理解。此外,建立圖表可能需要時間和知識。儘管有這些缺點,圖表仍然是跨學科數據分析和決策的有效工具。

使用的方法

  • 設定表示

  • 連結表示

  • 順序表示

設定表示

圖中的每個頂點都與一個包含其周圍頂點的集合相關聯,該集合表示圖。在這種方法中,圖的邊儲存在包含集合的鄰接集或雜湊表中。每個頂點的集合確保沒有重複的相鄰頂點,並且它有效地管理稀疏圖。與其他表示方法相比,新增和刪除邊更容易,且記憶體利用率降低。在處理具有不同連接程度的網路時,這種技術非常有幫助,因為它可以有效地執行諸如檢查邊緣和迭代附近頂點等操作。

  • 鄰接集:在圖表的集合表示中,鄰接集合使用集合記錄每個頂點的鄰居,防止重複,並便於有效處理邊緣。

  • 雜湊表:雜湊表在圖的集合表示的上下文中使用,將每個頂點與包含其相鄰頂點的集合連接。

演算法

  • 圖的頂點應該由一個類別或資料結構表示。每個頂點物件需要有一個集合來包含其相鄰的頂點,同時還需要有一個ID或標籤。

  • 建立一個空的儲存空間來保存圖的頂點(例如陣列、向量或雜湊表)。

  • 對於圖中的每個頂點:

    為圖中的每個頂點建立一個具有指定ID或標籤的新頂點物件。

    將與其相鄰的頂點新增至鄰接集中。

  • 使用下列技術在頂點之間新增邊:

    收集來源頂點和目標頂點的頂點物件。

    將目標頂點包含在來源頂點的鄰接集合中。

  • 實現下列邊緣移除技術:

    收集來源頂點和目標頂點的頂點物件。

    從來源頂點的鄰接集中刪除目標頂點。

  • 實作圖操作所需的其他技術,例如確定邊是否存在以及取得頂點的鄰居。

範例

#include <iostream>
#include <unordered_map>
#include <unordered_set>

class Graph {
private:
    std::unordered_map<int, std::unordered_set<int>> adjacencySets;

public:
    void addEdge(int source, int destination) {
        adjacencySets[source].insert(destination);
        adjacencySets[destination].insert(source); // If the graph is undirected, add both edges
    }

    void removeEdge(int source, int destination) {
        adjacencySets[source].erase(destination);
        adjacencySets[destination].erase(source); // If the graph is undirected, remove both edges
    }

    void printNeighbors(int vertex) {
        std::cout << "Neighbors of vertex " << vertex << ": ";
        for (int neighbor : adjacencySets[vertex]) {
            std::cout << neighbor << " ";
        }
        std::cout << std::endl;
    }
};

int main() {
    Graph graph;

    graph.addEdge(1, 2);
    graph.addEdge(1, 3);
    graph.addEdge(2, 3);
    graph.addEdge(3, 4);
    graph.addEdge(4, 5);

    graph.printNeighbors(1);
    graph.printNeighbors(3);

    graph.removeEdge(2, 3);

    graph.printNeighbors(1);
    graph.printNeighbors(3);

    return 0;
}
登入後複製

輸出

Neighbors of vertex 1: 3 2 
Neighbors of vertex 3: 4 2 1 
Neighbors of vertex 1: 3 2 
Neighbors of vertex 3: 4 1
登入後複製

鍊錶表示

每個頂點在圖的連結表示中都被表示為一個鍊錶中的節點。圖的結構由這些節點形成,它們透過指標或引用相互連接,並保存有關頂點的資料。每個節點還具有一個鍊錶或其他動態資料結構,用於儲存邊的相鄰頂點。這種方法有效地描繪了具有不同連接水平的稀疏圖。它支援動態圖架構,並允許簡單地添加和刪除邊。然而,與其他表示相比,它可能具有稍大的記憶體負擔。在記憶體靈活性和效率是首要考慮因素時,使用連結表示是有優勢的。

演算法

  • 在樹中找到與頂點1對應的圖節點。

  • 如果無法找到節點,則為vertex1建立一個新的節點並將其新增至圖中。

  • 在圖中,找到對應頂點2的節點。

  • 如果無法找到節點,則為vertex2建立一個新節點並將其新增至圖中。

  • 要表示邊緣,請將vertex2加入到與vertex1對應的節點的連結清單中。

  • 在無向圖中,將vertex1連結到vertex2的鍊錶中。

範例

#include <iostream>
#include <unordered_map>
#include <list>

void AddEdge(std::unordered_map<int, std::list<int>>& graph, int vertex1, int vertex2) {
    graph[vertex1].push_back(vertex2);
    graph[vertex2].push_back(vertex1);
}

int main() {
    std::unordered_map<int, std::list<int>> graph;

    AddEdge(graph, 1, 2);
    AddEdge(graph, 1, 3);
    AddEdge(graph, 2, 3);

    for (const auto& entry : graph) {
        std::cout << "Vertex " << entry.first << " is connected to: ";
        for (int neighbor : entry.second) {
            std::cout << neighbor << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}
登入後複製

輸出

Vertex 3 is connected to: 1 2 
Vertex 2 is connected to: 1 3 
Vertex 1 is connected to: 2 3 
登入後複製

應用程式

  • 圖表用於模擬社交媒體平台上的用戶連接,從而可以研究社交互動並識別社區。

  • 圖表在路徑優化、最短路徑計算和設計有效的交通網絡方面非常有用。

  • 網路的拓樸結構由圖形表示,這對於網路設計、分析和故障排除非常有幫助。

  • 圖表模擬代謝途徑、蛋白質交互作用和基因連接,以幫助研究生物系統。

  • 圖表在推薦引擎中被用於根據使用者偏好和物品關係為商品、電影或其他材料提供推薦。

  • 他們透過結構化和連接訊息,使智慧搜尋和問答系統成為可能。

  • 詐欺偵測、風險評估和投資組合最佳化都使用圖形。

  • 基於圖的技術用於包括連結預測、分類和分組等問題。

  • 圖表使得更容易理解物聯網設備和資料流之間的鏈接,從而促進物聯網應用中的分析。

  • 透過圖表支持藥物交互作用、病患監測和疾病建模的醫學研究,提高了醫療洞察力。

優勢

  • 圖表提供了一種簡單易懂的資料視覺化表示,使複雜的關聯和關係更易於理解。

  • 透過圖表,可以實現模式識別、趨勢分析和異常檢測,從而提高決策能力和問題解決能力。

  • 為了有效率地處理和解釋數據,圖表展示了各種數據結構,準確模擬複雜的現實世界情況。

  • 在與資料庫中的互聯資料一起工作時,基於圖形的拓撲結構使得資料的檢索和遍歷成為可能。

  • 圖表經常在社交網路分析中使用,以理解社交互動,並確定突出的節點或使用者。

  • 圖表在交通運輸和物流中確定最快或最有效的路線方面非常有用。

  • 圖表驅動推薦引擎,根據使用者行為和偏好為商品、服務或資訊提供推薦。

  • 圖表可以以層次結構的方式表示知識和訊息,這使得它們在人工智慧和語義網路的應用中非常有用。

  • 在結構化資料中,使用基於圖的機器學習技術執行聚類、分類和連結預測等任務。

  • 尋找最佳匹配或有效安排工作只是圖演算法可以幫助解決的眾多挑戰中的兩個例子。

缺點

  • 當處理龐大的資料集或存在大量節點和邊時,圖形可能變得難以管理和複雜。由於這種複雜性,可能難以充分分析和理解數據。

  • 儲存圖形可能會消耗大量內存,特別是對於具有許多節點和邊的密集圖形而言。隨著圖形變得更大,記憶體使用可能成為一個問題。

  • 在一個龐大的圖中尋找最短路徑,例如,可能是一個耗時且計算密集的任務。這可能導致效能問題,特別是在即時應用中。

  • 圖表可以有各種結構,其中一些節點的連接明顯多於其他節點。由於這種不均勻性,使用常見技術或從數據中得出有用的推論可能會很困難。

  • 當處理高維度圖形時,將複雜的圖形視覺化可能具有挑戰性,並且可能無法清晰地表示底層資料。

  • 缺失或不正確的資料可能導致圖表中的不一致性,進而影響分析的品質和可靠性。

結論

圖表在各個學科中都是靈活且經常被使用的工具,例如生物學、交通運輸和社交網絡。它們是數據分析的有用工具,因為它們可以視覺化複雜的關係並找到模式。然而,處理大型資料集可能會變得複雜,並且需要更多的記憶體。此外,建立圖表需要時間和知識。儘管有這些缺點,但圖表仍然是解決問題和決策的有用工具。透過使用適當的表示形式(例如集合和連結表示)和實施高效的演算法,圖表可以在多個學科的各種應用中繼續提供有益的見解和支持。

以上是圖表的應用、優點和缺點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板