1.算法说明

在设计算法之分治法的博客中,笔者已经写出了一个分治算法,不过那个算法笔者用了个哨兵,L[n1 + 1] = ∞ 和R[n2 + 1]= ∞。现在,我们想要实现的是,不用这个哨兵,那么这个算法该么写呢?本次博文将会给出。

2.不用哨兵的分治算法

MERGE2(A,p,q,r)n1 = q – p + 1n2 = r – qLet[1…n1+1] and R[1…n2+1] be new arraysfor i = 1 to n1
L[i] = A[p + i - 1]for j = 1 to n2
R[j] = A[q + j]i = 1j = 1for k = p to r
if i < n1 and j < n2if L[i] <= R[j]A[k] = L[i]i = i + 1continueelse A[k] = R[j]j = j + 1continue
if i >= n1 and j < n2A[k] = R[j]j = j + 1continue
if i < n1 and j >= n2A[k] = L[i]i = i + 1
continue

3. java实现分治算法

public int[] merge2(int[] array, int p, int q, int r){int n1 = q - p + 1;int n2 = r - q;Integer [] lArray = new Integer[n1];Integer [] rArray = new Integer[n2];for(int i = 0; i < n1; i++){lArray[i] = array[p + i ];}for(int j = 0; j < n2; j++){rArray[j] = array[q + j +1];}int i = 0;int j =0;for(int k = p; k <= r; k++){if (i < n1 && j < n2){if (lArray[i] <= rArray[j]){array[k] = lArray[i];i = i + 1;continue;}else {array[k] = rArray[j];j = j + 1;continue;}}if (i >= n1 && j < n2){array[k] = rArray[j];j = j + 1;continue;}if (i < n1 && j >= n2){array[k] = lArray[i];i = i + 1;continue;}}return array;}

使用Junit测试

 @Testpublic void testMerge2(){DivideAndConquer dac = new DivideAndConquer();int[] a = {2, 4, 5, 7, 1, 2, 3, 6};int[] resultA  = {1, 2, 2, 3, 4, 5, 6, 7 };assertArrayEquals(dac.merge2(a,0,3,7), resultA );}

设计算法之分治法(补充)相关推荐

  1. 趣学算法系列-分治法

    趣学算法系列-分治法 声明:本系列为趣学算法一书学习总结内容,在此推荐大家看这本算法书籍作为算法入门, 原作者博客链接,本书暂无免费电子版资源,请大家支持正版,更多实例分析请查看原书内容 第三章 分治 ...

  2. 算法设计与分析——分治法

    主要思想 (其实有这个思想也想不出来): 1.划分:整个问题划分成多个子问题 2.求解:求解各子问题的解 3.合并:合并子问题的解 (手说:"我会了",脑子:"不会&qu ...

  3. 算法设计与分析:分治法输出数字旋转方阵

    分治法输出数字旋转方阵 数字旋转方阵如下图所示: 从下图可以看出,从左上角开始,逆时针放置每次增加1的数字,直到"旋转"到最里层终止. 分治:将这个矩阵填数之时一层一层地填进去,也 ...

  4. 从合并排序算法看“分治法”

    本文内容 分治策略 分治步骤 从合并排序看"分治策略" 分治策略 分治法(divide-and-conquer),"分治法策略"是一种很重要的算法.顾名思义,& ...

  5. python分治算法_Python算法:分治法

    本节主要介绍分治法策略,提到了树形问题的平衡性以及基于分治策略的排序算法 本节的标题写全了就是:divide the problem instance, solve subproblems recur ...

  6. chatGPT教你算法(4)——分治法

    0. 引言 在计算机科学中,分治法是一种用于解决复杂问题的常用方法.它的核心思想是将大问题分解为若干个规模较小的子问题,递归地解决这些子问题,最后再将它们的结果组合起来得到原问题的解. 本博客将向大家 ...

  7. python分治算法_python算法实现-分治法

    分治法概念将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题----"分" 将最后子问题可以简单的直接求解----"治" 将所有子问 ...

  8. python分治算法_分治法及其python实现例子

    在前面的排序算法学习中,归并排序和快速排序就是用的分治法,分治法作为三大算法之一的,有非常多的应用例子. 分治法概念 将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题-- ...

  9. 算法复习——分治法重点问题

    一.众数问题 问题描述:给定含有n 个元素的多重集合S,每个元素在S 中出现的次数称为该元素的重数.多重集S 中重数最大的元素称为众数.例如,S={1,2,2,2,3,5}.多重集S 的众数是2,其重 ...

  10. python矩阵乘法分治算法_矩阵乘法的Strassen算法详解 --(算法导论分治法求矩阵)...

    1 题目描述 2 思路分析 3 解法 4 小结 1 题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 2 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数 ...

最新文章

  1. 基于形态学操作提取水平和垂直线条(五线谱中音符和乐谱线的分离)
  2. 4服务器内存和普通内存_关于服务器内存的选择
  3. ADAS(1) 概述整理及自动驾驶实例
  4. 读《可复制的领导力》
  5. CF1547F Array Stabilization (GCD version) st表 + 尺取/二分
  6. 作者:武永卫(1974-),男,清华大学计算机科学与技术系教授
  7. 2020-5-13从0在mac上搭载SSM新闻网站项目
  8. 关于echarts的疑问
  9. IntelliJ IDEA多屏后窗口不显示问题解决(用工具一键解决)
  10. 四方聚合支付系统+新增USDT提现+全新UI+安全升级修复XSS漏洞补单漏洞 附安装教程
  11. 常用代码国家标准 目录列表
  12. 基于FPGA三大串行通信接口简单概述
  13. 程序员之路:Gmail邮箱客户端配置_彭世瑜_新浪博客
  14. Rap2 模拟接口 常见规则示例
  15. Linux != Windows( Linux 不是 Windows)
  16. Ubuntu 设置静态IP
  17. windows日志查看与清理
  18. Ubuntu rar 解压乱码问题解决
  19. Brave Game ——巴什博奕
  20. dxf geojson 转换,如何将CAD(DWG)文件转换为GeoJSON?

热门文章

  1. Java集合(Collection)综述
  2. JQuery------jQuery.parseHTML()的使用方法
  3. web安全day42:使用BurpSuite理解Web工作机制
  4. LNMP详解(十)——Nginx负载分担实战
  5. Bugku-Web-速度要快-WriteUp
  6. HDOJ--1864--最大报销额
  7. 从 Vue 的视角学 React(二)—— 基本语法
  8. ansible自动化运维必备工具详解
  9. $.type 怎么精确判断对象类型的 --(源码学习2)
  10. centos6 与 7 其中的一些区别