91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java算法之BFS,DFS,動態規劃和貪心算法如何實現

發布時間:2023-04-07 09:49:42 來源:億速云 閱讀:124 作者:iii 欄目:開發技術

本篇內容主要講解“Java算法之BFS,DFS,動態規劃和貪心算法如何實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java算法之BFS,DFS,動態規劃和貪心算法如何實現”吧!

廣度優先搜索

廣度優先搜索算法是一種遍歷或搜索樹或圖的算法,它從根節點開始搜索并逐層向下擴展,直到找到目標狀態或所有節點都被遍歷。BFS通常使用隊列來實現,它每次將下一個節點放入隊列中,直到所有的節點都被訪問。

下面是一個Java實現:

public void bfs(Node start) {
    Queue<Node> queue = new LinkedList<>();
    Set<Node> visited = new HashSet<>();

    queue.offer(start);
    visited.add(start);

    while (!queue.isEmpty()) {
        Node node = queue.poll();
        System.out.print(node.val + " ");

        for (Node neighbor : node.neighbors) {
            if (!visited.contains(neighbor)) {
                visited.add(neighbor);
                queue.offer(neighbor);
            }
        }
    }
}

深度優先搜索

深度優先搜索算法是一種遍歷或搜索樹或圖的算法,它從根節點開始遞歸地遍歷所有子樹,直到找到目標狀態或所有節點都被遍歷。DFS通常使用棧來實現,它每次將下一個節點壓入棧中,直到所有的節點都被訪問。

下面是一個Java實現:

public void dfs(Node node, Set<Node> visited) {
    System.out.print(node.val + " ");
    visited.add(node);

    for (Node neighbor : node.neighbors) {
        if (!visited.contains(neighbor)) {
            dfs(neighbor, visited);
        }
    }
}

動態規劃

動態規劃算法(DP)是一種解決問題的方法,它用來解決重疊子問題和最優子結構問題。DP通常用來解決優化問題,例如最短路徑問題、背包問題等。

下面是一個Java實現:

public int knapsack(int[] weights, int[] values, int capacity) {
    int n = weights.length;
    int[][] dp = new int[n + 1][capacity + 1];

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= capacity; j++) {
            if (weights[i - 1] <= j) {
                dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1]);
            } else {
                dp[i][j] = dp[i - 1][j];
            }
        }
    }

    return dp[n][capacity];
}

貪心

貪心算法是一種解決優化問題的方法,它總是選擇當前最優解。與動態規劃不同,貪心算法并沒有考慮所有的子問題,而是只看當前的最優解。

下面是一個Java實現:

public int knapsack(int[] weights, int[] values, int capacity) {
    int n = weights.length;
    Item[] items = new Item[n];

    for (int i = 0; i < n; i++) {
        items[i] = new Item(weights[i], values[i]);
    }

    Arrays.sort(items, (a, b) -> b.valuePerWeight - a.valuePerWeight);

    int totalValue = 0;
    int remainingCapacity = capacity;

    for (Item item : items) {
        if (remainingCapacity >= item.weight) {
            totalValue += item.value;
            remainingCapacity -= item.weight;
        } else {
            totalValue += item.valuePerWeight * remainingCapacity;
            break;
        }
    }

    return totalValue;
}

class Item {
    int weight;
    int value;
    int valuePerWeight;

    public Item(int weight, int value) {
        this.weight = weight;
        this.value = value;
        this.valuePerWeight = value / weight;
    }
}

到此,相信大家對“Java算法之BFS,DFS,動態規劃和貪心算法如何實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

磐安县| 建湖县| 北宁市| 崇州市| 平遥县| 绥德县| 日照市| 桃园县| 临夏市| 象山县| 雅江县| 抚松县| 灌阳县| 顺义区| 杭锦后旗| 璧山县| 临洮县| 和顺县| 洞口县| 商洛市| 涿州市| 任丘市| 盱眙县| 塔河县| 平遥县| 乌鲁木齐县| 浦城县| 泗阳县| 鲜城| 青海省| 许昌市| 承德市| 壤塘县| 新安县| 绥芬河市| 宽甸| 海阳市| 阿城市| 什邡市| 苗栗市| 肇源县|