当前位置: 首页 > wzjs >正文

泉州市住房和乡村建设网站app推广注册从哪里接单

泉州市住房和乡村建设网站,app推广注册从哪里接单,网站设计分析,常用的seo查询工具分治算法(Divide and Conquer)是一种解决复杂问题的非常实用的策略,广泛应用于计算机科学中的各个领域。它的核心思想是将一个复杂的问题分解成若干个相同或相似的子问题,递归地解决这些子问题,然后将子问题的解合并&a…

_20250223230836.jpg

分治算法(Divide and Conquer)是一种解决复杂问题的非常实用的策略,广泛应用于计算机科学中的各个领域。它的核心思想是将一个复杂的问题分解成若干个相同或相似的子问题,递归地解决这些子问题,然后将子问题的解合并,最终得到原问题的解。分治算法的典型应用包括归并排序、快速排序、二分查找等。

本文将详细介绍分治算法的基本思想以及如何在Java中实现分治算法。

基本思想

分治算法的基本思想可以概括为以下三个步骤:

  • 分解(Divide):将原问题分解成若干个规模较小的子问题,这些子问题与原问题相似,但规模更小。

  • 解决(Conquer):递归地解决这些子问题。如果子问题的规模足够小,则直接求解。

  • 合并(Combine):将子问题的解合并成原问题的解。

分治算法的关键在于如何将问题分解成子问题,以及如何将子问题的解合并。

适用场景

分治算法所能解决的问题一般具有以下几个特征:

  • 问题可分解:
    问题能够分解为多个相似的子问题,且子问题相互独立。

  • 子问题可解:
    分解后的子问题可以直接求解。

  • 子问题解可合并:
    子问题的解能够合并为原问题的解。

  • 效率提升:
    分解和合并的复杂度低于直接求解原问题。

典型应用场景

  • 排序算法:如归并排序、快速排序、求解逆序对。

  • 查找算法:如二分查找。

  • 数学计算:如大整数乘法、矩阵乘法(Strassen算法)。

  • 几何问题:如最近点对问题。

  • 图算法:如快速傅里叶变换(FFT)。

归并排序介绍及Java实现

我们本文中以归并排序来介绍及示例分治算法。

归并排序是一种分治策略的排序算法,它的核心思想是将数组分成两个子数组,递归地对子数组进行排序,然后将排序好的子数组合并起来,最终得到有序的数组。如下图所示:

_20250223220512.jpg

java 代码实现归并排序:

/*** 归并排序**/
public class MergeSort {// 归并排序的入口方法public static void mergeSort(int[] arr) {int[] temp = new int[arr.length];sort(arr, 0, arr.length - 1,temp);}// 归并排序的核心排序方法(递归调用的方法)public static void sort(int[] arr, int left, int right,int[] temp) {// 递归终止条件,直至单个元素if (left < right) {int mid = (left + right) / 2;//左边部分递归sort(arr, left, mid, temp);//右边部分递归sort(arr, mid + 1, right, temp);//归并merge(arr,left,mid,right, temp);}}//归并排序的核心归并方法public static void merge(int[] arr, int left, int mid, int right,int[] temp) {int i = left;int j = mid + 1;int k = left;// 比较左右两部分的元素,并将较小的元素放入临时数组([left,right]区间元素排序)while (i <= mid && j <= right) {if (arr[i] <= arr[j]) {temp[k++] = arr[i++];} else {temp[k++] = arr[j++];}}//如果右边元素先放完,则将左边剩余的元素逐个放入临时数组中while (i <= mid) {temp[k++] = arr[i++];}//如果左边元素先放完,则将右边剩余的元素逐个放入临时数组中while (j <= right) {temp[k++] = arr[j++];}// 将临时数组的结果复制回原数组for (int l = left; l <= right; l++) {arr[l] = temp[l];}}public static void main(String[] args) {int[] arr = new int[]{7,5,2,3,6,4};System.out.println("原始数组:"+ Arrays.toString(arr));mergeSort(arr);System.out.println("排序后的数组:"+ Arrays.toString(arr));}
}

数组中的逆序对

  • 题目描述:

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007

数据范围: 对于50%的数据,size <= 1 0 4 10^4 104

对于100%的数据,size <= 1 0 5 10^5 105

数组中所有数字的值满足 0<= val <= 1 0 9 10^9 109

要求:空间复杂度 O(n) ,时间复杂度 O( l o g log log n)

输入描述:
题目保证输入的数组中没有的相同的数字

  • 示例

示例1

输入:[1,2,3,4,5,6,7,0]
返回值:7

示例2

输入:[1,2,3]
返回值:0
  • 代码
public class InversePairs {//初始化逆序对的个数public static int ret = 0;// 归并排序的入口方法public static int mergeSort(int[] arr) {int[] temp = new int[arr.length];sort(arr, 0, arr.length - 1,temp);return  ret;}// 归并排序的核心排序方法(递归调用的方法)public static void sort(int[] arr, int left, int right,int[] temp) {// 递归终止条件,直至单个元素if (left < right) {int mid = (left + right) / 2;//左边部分递归sort(arr, left, mid, temp);//右边部分递归sort(arr, mid + 1, right, temp);//归并merge(arr,left,mid,right, temp);}}//归并排序的核心归并方法public static void merge(int[] arr, int left, int mid, int right,int[] temp) {int i = left;int j = mid + 1;int k = left;// 比较左右两部分的元素,并将较小的元素放入临时数组([left,right]区间元素排序)while (i <= mid && j <= right) {if (arr[i] <= arr[j]) {temp[k++] = arr[i++];} else {temp[k++] = arr[j++];// 奥妙之处,右边元素左移为逆序对,区间合并的时候每个区间都是有序的ret += (mid - i + 1);ret %= 1000000007;}}//如果右边元素先放完,则将左边剩余的元素逐个放入临时数组中while (i <= mid) {temp[k++] = arr[i++];}//如果左边元素先放完,则将右边剩余的元素逐个放入临时数组中while (j <= right) {temp[k++] = arr[j++];}// 将临时数组的结果复制回原数组for (int l = left; l <= right; l++) {arr[l] = temp[l];}}public static void main(String[] args) {int[] arr = new int[]{1,2,3,4,5,6,7,0};System.out.println("原始数组:"+ Arrays.toString(arr));int ret = mergeSort(arr);System.out.println("排序后的数组:"+ Arrays.toString(arr));System.out.println("统计的逆序对的个数:"+ ret);}}

总结

分治算法是一种非常强大的算法设计思想,能够有效地解决许多复杂的问题。通过将问题分解成更小的子问题,递归地解决这些子问题,然后将子问题的解合并,我们可以高效地解决许多实际问题。本文通过归并排序和逆序对两个经典例子,展示了分治算法的基本思想和Java实现。

http://www.dtcms.com/wzjs/496166.html

相关文章:

  • 营销型网站建设的五力原则能搜任何网站的浏览器
  • 网站团购报名怎么做网站推广策划思路的内容
  • 做网站用什么语音网站关键字优化价格
  • 滁州市建设工程协会网站公司网站建设需要多少钱
  • 怎么样让网站网址有图标济南百度推广代理商
  • 建设银行ETC的网站是哪个怎么做营销推广方案
  • 杭州网站推广方式北京互联网公司排名
  • 效果图网站模板搜索引擎营销的四种方式
  • 邯郸做网站的博客企业网站制作模板
  • 传奇手游新开网站手机营销软件
  • 北京保安公司咖啡seo是什么意思
  • 邢台信息港最新二手房出售信息西安网络优化哪家好
  • 四川建设人员数据网站广州现在有什么病毒感染
  • 连山建设局网站正规代运营公司排名
  • 上海做网站的创建属于自己的网站
  • 虚拟主机网站建设实训总结广州疫情最新数据
  • 重庆建设行政主管部门网站推广策略包括哪些内容
  • 手机投注网站建设单词优化和整站优化
  • 广告文案策划seo网络培训班
  • 神木自适应网站开发百度热议怎么上首页
  • 张家界做网站美工公司seo优化视频教程
  • wordpress 邮件函数湖南seo推广系统
  • 保险做的好的网站有哪些内容百度 搜索热度
  • 欧美免费1级做爰片在线观看网站关键词优化是什么
  • 石家庄java开发做网站太原关键词排名优化
  • 公司概况-环保公司网站模板整站seo排名外包
  • 网络基础培训windows优化大师官方免费下载
  • 网站建设合同标的怎么写上海有什么seo公司
  • 专业网站建设专家免费制作链接
  • 池州哪里做网站苏州seo安严博客