中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站怎么做qq客服seo搜索引擎招聘

網(wǎng)站怎么做qq客服,seo搜索引擎招聘,百度seo優(yōu)化網(wǎng)站,昌大建設(shè)和天元文章目錄 1. 概述2. 適用場景3. 設(shè)計步驟4. 優(yōu)缺點5. 典型應(yīng)用6. 題目和代碼示例6.1 簡單題目:歸并排序6.2 中等題目:最近點對問題6.3 困難題目:分?jǐn)?shù)背包問題 7. 題目和思路表格8. 總結(jié)References 1000.01.CS.AL.1.4-核心-DivedeToConquerAlg…

文章目錄

    • 1. 概述
    • 2. 適用場景
    • 3. 設(shè)計步驟
    • 4. 優(yōu)缺點
    • 5. 典型應(yīng)用
    • 6. 題目和代碼示例
      • 6.1 簡單題目:歸并排序
      • 6.2 中等題目:最近點對問題
      • 6.3 困難題目:分?jǐn)?shù)背包問題
    • 7. 題目和思路表格
    • 8. 總結(jié)
    • References

1000.01.CS.AL.1.4-核心-DivedeToConquerAlgorithm-Created: 2024-06-15.Saturday09:35
在這里插入圖片描述

1. 概述

分治算法(Divide and Conquer)是一種重要的算法設(shè)計思想,其核心思想是將一個復(fù)雜的問題分解為多個相對簡單的小問題,通過解決這些小問題再合并其結(jié)果,從而得到原問題的解。分治算法的典型特征是遞歸,常用于求解具有重復(fù)子問題性質(zhì)的問題。

2. 適用場景

分治算法適用于以下場景:

  • 問題可以分解為若干個規(guī)模較小且相互獨立的子問題。
  • 這些子問題的解可以合并得到原問題的解。
  • 具有最優(yōu)子結(jié)構(gòu)性質(zhì),即子問題的最優(yōu)解可以合成原問題的最優(yōu)解。

3. 設(shè)計步驟

  1. 分解(Divide):將原問題分解為若干個子問題,這些子問題的結(jié)構(gòu)與原問題相同但規(guī)模較小。
  2. 解決(Conquer):遞歸地解決這些子問題。當(dāng)子問題的規(guī)模足夠小時,直接解決。
  3. 合并(Combine):將子問題的解合并,得到原問題的解。

4. 優(yōu)缺點

  • 優(yōu)點:分治算法的遞歸思想使其在解決許多復(fù)雜問題時表現(xiàn)出色。具有良好的可擴展性和并行計算的潛力。
  • 缺點:對于某些問題,分治算法可能會引入額外的開銷,如遞歸調(diào)用棧和合并步驟的時間復(fù)雜度。

5. 典型應(yīng)用

  • 歸并排序(Merge Sort):一種高效的排序算法,利用分治思想將數(shù)組分為兩半,遞歸地排序并合并。
  • 快速排序(Quick Sort):另一種高效的排序算法,選擇一個基準(zhǔn)元素,將數(shù)組分為兩部分,遞歸排序。
  • 最近點對問題(Closest Pair Problem):在平面上找到距離最近的兩點,分治法可以將時間復(fù)雜度降至 O(nlog?n)O(n \log n)O(nlogn)。
  • 矩陣乘法(Strassen’s Algorithm):一種用于矩陣乘法的分治算法,降低了時間復(fù)雜度。

6. 題目和代碼示例

6.1 簡單題目:歸并排序

題目描述:實現(xiàn)歸并排序算法,對給定的數(shù)組進行排序。

代碼示例

#include <iostream>
#include <vector>// 函數(shù)聲明
void mergeSort(std::vector<int>& arr, int left, int right);
void merge(std::vector<int>& arr, int left, int mid, int right);int main() {std::vector<int> arr = {38, 27, 43, 3, 9, 82, 10};mergeSort(arr, 0, arr.size() - 1);for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;return 0;
}// 歸并排序:遞歸地將數(shù)組分成兩半進行排序
void mergeSort(std::vector<int>& arr, int left, int right) {if (left < right) {int mid = left + (right - left) / 2;mergeSort(arr, left, mid);mergeSort(arr, mid + 1, right);merge(arr, left, mid, right);}
}// 合并兩個已排序的子數(shù)組
void merge(std::vector<int>& arr, int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;std::vector<int> L(n1), R(n2);for (int i = 0; i < n1; ++i) {L[i] = arr[left + i];}for (int j = 0; j < n2; ++j) {R[j] = arr[mid + 1 + j];}int i = 0, j = 0, k = left;while (i < n1 && j < n2) {if (L[i] <= R[j]) {arr[k] = L[i++];} else {arr[k] = R[j++];}++k;}while (i < n1) {arr[k++] = L[i++];}while (j < n2) {arr[k++] = R[j++];}
}

Others.

def merge_sort(arr):if len(arr) > 1:mid = len(arr) // 2left_half = arr[:mid]right_half = arr[mid:]merge_sort(left_half)merge_sort(right_half)i = j = k = 0while i < len(left_half) and j < len(right_half):if left_half[i] < right_half[j]:arr[k] = left_half[i]i += 1else:arr[k] = right_half[j]j += 1k += 1while i < len(left_half):arr[k] = left_half[i]i += 1k += 1while j < len(right_half):arr[k] = right_half[j]j += 1k += 1# 示例
arr = [38, 27, 43, 3, 9, 82, 10]
merge_sort(arr)
print(arr)  # 輸出: [3, 9, 10, 27, 38, 43, 82]

6.2 中等題目:最近點對問題

題目描述:在平面上找到距離最近的兩點,時間復(fù)雜度為 O(nlog?n)。

代碼示例

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>struct Point {int x, y;
};double dist(const Point& p1, const Point& p2) {return std::sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
}double closestPair(std::vector<Point>& points, int left, int right) {if (right - left <= 3) {double minDist = std::numeric_limits<double>::infinity();for (int i = left; i < right; ++i) {for (int j = i + 1; j <= right; ++j) {minDist = std::min(minDist, dist(points[i], points[j]));}}return minDist;}int mid = left + (right - left) / 2;double d1 = closestPair(points, left, mid);double d2 = closestPair(points, mid + 1, right);double d = std::min(d1, d2);std::vector<Point> strip;for (int i = left; i <= right; ++i) {if (std::abs(points[i].x - points[mid].x) < d) {strip.push_back(points[i]);}}std::sort(strip.begin(), strip.end(), [](const Point& p1, const Point& p2) {return p1.y < p2.y;});double minDist = d;for (size_t i = 0; i < strip.size(); ++i) {for (size_t j = i + 1; j < strip.size() && (strip[j].y - strip[i].y) < minDist; ++j) {minDist = std::min(minDist, dist(strip[i], strip[j]));}}return minDist;
}int main() {std::vector<Point> points = {{2, 3}, {12, 30}, {40, 50}, {5, 1}, {12, 10}, {3, 4}};std::sort(points.begin(), points.end(), [](const Point& p1, const Point& p2) {return p1.x < p2.x;});std::cout << "最近點對距離: " << closestPair(points, 0, points.size() - 1) << std::endl;return 0;
}

Others.

import mathdef dist(p1, p2):return math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2)def closest_pair(points):def closest_pair_recursive(points):if len(points) <= 3:return min((dist(p1, p2), (p1, p2)) for i, p1 in enumerate(points) for p2 in points[i+1:])[1]mid = len(points) // 2left_half = points[:mid]right_half = points[mid:](d1, pair1) = closest_pair_recursive(left_half)(d2, pair2) = closest_pair_recursive(right_half)d = min(d1, d2)pair = pair1 if d1 < d2 else pair2strip = [p for p in points if abs(p[0] - points[mid][0]) < d]strip.sort(key=lambda p: p[1])for i in range(len(strip)):for j in range(i+1, len(strip)):if strip[j][1] - strip[i][1] >= d:breakd_new = dist(strip[i], strip[j])if d_new < d:d = d_newpair = (strip[i], strip[j])return d, pairpoints.sort(key=lambda p: p[0])return closest_pair_recursive(points)[1]# 示例
points = [(2, 3), (12, 30), (40, 50), (5, 1), (12, 10), (3, 4)]
print(closest_pair(points))  # 輸出: ((2, 3), (3, 4))

6.3 困難題目:分?jǐn)?shù)背包問題

題目描述:給定物品的重量和價值,求在背包容量限制下的最大價值,物品可以分割。

代碼示例

#include <iostream>
#include <vector>
#include <algorithm>struct Item {double value;double weight;
};double fractionalKnapsack(std::vector<Item>& items, double capacity) {std::sort(items.begin(), items.end(), [](const Item& a, const Item& b) {return (a.value / a.weight) > (b.value / b.weight);});double totalValue = 0;for (const auto& item : items) {if (capacity >= item.weight) {capacity -= item.weight;totalValue += item.value;} else {totalValue += item.value * (capacity / item.weight);break;}}return totalValue;
}int main() {std::vector<Item> items = {{60, 10}, {100, 20}, {120, 30}};double capacity = 50;std::cout << "背包的最大價值: " << fractionalKnapsack(items, capacity) << std::endl;return 0;
}

Others.

def fractional_knapsack(values, weights, capacity):items = list(zip(values, weights))items.sort(key=lambda x: x[0] / x[1], reverse=True)total_value = 0for value, weight in items:if capacity >= weight:capacity -= weighttotal_value += valueelse:total_value += value * (capacity / weight)breakreturn total_value# 示例
values = [60, 100, 120]
weights = [10, 20, 30]
capacity = 50
print(fractional_knapsack(values, weights, capacity))  # 輸出: 240.0

7. 題目和思路表格

序號題目題目描述分治策略代碼實現(xiàn)
1歸并排序對給定的數(shù)組進行排序遞歸地將數(shù)組分成兩半進行排序代碼
2最近點對問題找到距離最近的兩點將點集合遞歸地分成兩半代碼
3分?jǐn)?shù)背包問題求在背包容量限制下的最大價值每次選擇單位重量價值最高的物品代碼
4快速排序高效排序算法選擇一個基準(zhǔn)元素,將數(shù)組分為兩部分,遞歸排序代碼
5矩陣乘法用于矩陣乘法將矩陣分成更小的子矩陣,遞歸計算-
6求逆序?qū)?shù)量統(tǒng)計數(shù)組中的逆序?qū)€數(shù)使用分治法將數(shù)組分成兩半,遞歸統(tǒng)計逆序?qū)?/td>-
7最大子序和找出最大和的連續(xù)子序列將序列遞歸地分成兩半,合并子序列的結(jié)果-
8大整數(shù)乘法實現(xiàn)高效的大整數(shù)乘法使用Karatsuba算法,將大整數(shù)分成兩部分進行遞歸計算-
9二維平面上的最近點對在平面上找到距離最近的兩點將點集合遞歸地分成兩半,合并結(jié)果-
10棋盤覆蓋問題用L型骨牌覆蓋2^n * 2^n的棋盤將棋盤遞歸地分成四部分,覆蓋部分棋盤-

8. 總結(jié)

分治算法是一種強大的算法設(shè)計思想,能夠高效地解決許多復(fù)雜的問題。通過將問題分解為更小的子問題,分治算法不僅能夠降低時間復(fù)雜度,還具有良好的可擴展性。在實際應(yīng)用中,理解和掌握分治算法的思想和典型應(yīng)用,對于解決各種問題具有重要意義。通過本文的例子和思路,相信讀者能夠深入理解分治算法的關(guān)鍵概念,并靈活應(yīng)用于實際問題中。

References

http://www.risenshineclean.com/news/46210.html

相關(guān)文章:

  • 新疆網(wǎng)站建設(shè)大全今日軍事新聞視頻
  • 綏化市建設(shè)局網(wǎng)站app推廣平臺放單平臺
  • 網(wǎng)站做目錄交換友情鏈接的渠道
  • 建設(shè)商務(wù)網(wǎng)站品牌運營管理公司
  • 網(wǎng)站怎么做免費推廣企業(yè)培訓(xùn)權(quán)威機構(gòu)
  • 在線商城網(wǎng)站模板企業(yè)網(wǎng)站建設(shè)方案策劃書
  • 電商網(wǎng)站開發(fā)平臺哪個好愛站網(wǎng)seo
  • 網(wǎng)站建設(shè)來選宙斯站長百度關(guān)鍵詞seo
  • 剛做的網(wǎng)站適合做外鏈嗎需要推廣的app在哪里找
  • 個人簡歷模板免費可編輯seo咨詢
  • 網(wǎng)站建設(shè)云主機云服務(wù)器百度app下載
  • 免費咨詢刑事辯護在線律師廣西seo快速排名
  • 紹興市中等專業(yè)學(xué)校網(wǎng)站無線網(wǎng)絡(luò)優(yōu)化工程師
  • 移動端前端開發(fā)需要學(xué)什么山東seo多少錢
  • 我回了橙子建站的驗證碼上海疫情最新情況
  • 上海松江區(qū)網(wǎng)站建設(shè)鄭州seo外包平臺
  • 網(wǎng)站推廣服務(wù)合同模板2023年4月疫情恢復(fù)
  • 網(wǎng)站窗口建設(shè)活動營銷推廣方案
  • 怎么給網(wǎng)站做鏈接今日國際新聞?wù)畻l
  • 虎門仿做網(wǎng)站搜索引擎優(yōu)化方案
  • 簡單個人博客模板網(wǎng)站網(wǎng)站內(nèi)容管理系統(tǒng)
  • 京東網(wǎng)站建設(shè)步驟關(guān)鍵詞排名關(guān)鍵詞快速排名
  • 做網(wǎng)站獨立云服務(wù)器什么意思網(wǎng)址大全瀏覽器
  • 網(wǎng)站建設(shè)平臺漢龍網(wǎng)頁制作官方網(wǎng)站
  • 自己做的個人網(wǎng)站無法備案廣東東莞今日最新消息
  • 新手學(xué)做網(wǎng)站必備軟件seo技術(shù)培訓(xùn)課程
  • 網(wǎng)站支付功能怎么做全自動推廣引流軟件免費
  • 日本做暖網(wǎng)站推廣網(wǎng)站要注意什么
  • 寧德住房和城鄉(xiāng)建設(shè)部網(wǎng)站怎樣做網(wǎng)絡(luò)推廣營銷
  • 新網(wǎng)站怎么做權(quán)重國際新聞軍事最新消息