码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 分治算法(divide and conquer)


    目录

    简介

    流程

    例题

    循环比赛日程


    预计阅读时间:10分钟

    简介

            分治(divide and conquer),字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在计算机科学中,分治法就是运用分治思想的一种很重要的算法。分治法是很多高效算法的基础,如排序算法(快速排序,归并排序)等等。

     

    流程

    ✓分解
    将原问题分解为若干规模较小,相互独立,与原问题相同的子问题。
    ✓解决
    若干子问题较小而容易被解决则直接解决,否则再继续分解为更小的子问题,直到容易解决。
    ✓合并
    将已求解的各个子问题的解,逐步合并为原问题的解。

    例题

    循环比赛日程

    题目描述

    设有 n 位选手的循环比赛,其中 n = 2^m,m 为正整数。要求每位选手要与其他 n-1 位选手都赛一次。每名选手每天比赛一次,循环赛共进行 n-1 天,要求每天没有选手轮空。下面是 8 位选手时(m = 3)的循环比赛表,表中第一行为 8 位选手的编号,下面 7 行,依次是每位选手每天的对手。

     

    输入INPUT:

    输入格式

    输入共 1 行。 第一行 一个整数 n,表示有 n 名运动员参加循环赛 。(n≤64)

    输入样例

    4

    输出OUTPUT:

    输出格式

    输出一个 n * n 表格,表示 n 名运动员及其每天比赛的日程。为使表格清晰,请采用 %4d 的输出格式。

    输出样例

    1 2 3 4 2 1 4 3 3 4 1 2 4 3 2 1

    题目分析

    这样,8位选手的循环比赛表可以有四名选手的循环比赛表根据对称性“生成出来”。

    同理,4位选手的循环比赛表可以由2位选手的循环比赛表根据对称性生成出来。

    所以,本题的“分治”思想很明显,即不断地把一个规模为n的构造问题分成4个规模为n/2的子问题,然后,从这些子问题的解构造出整个问题的解

    参考代码

    1. #include
    2. using namespace std;
    3. int n,a[71][71];
    4. int main()
    5. {
    6. cin>>n;
    7. a[1][1]=1;
    8. for(int s=1; s2)
    9. {
    10. for(int i=1; i<=s; i++)
    11. {
    12. for(int j=1; j<=s; j++)
    13. {
    14. a[i+s][j+s]=a[i][j];
    15. a[i][j+s]=a[i][j]+s;
    16. a[i+s][j]=a[i][j]+s;
    17. }
    18. }
    19. }
    20. for(int i=1; i<=n; i++)
    21. {
    22. for(int j=1; j<=n; j++)
    23. {
    24. printf("%4d",a[i][j]);
    25. }
    26. cout<
    27. }
    28. return 0;
    29. }
  • 相关阅读:
    以气象行业为例,浅谈在ToB/ToG行业中如何做好UI设计
    衣康酸/马来酸酐/腰果酚接枝聚苯乙烯多元共聚阳离子树脂微球/聚苯乙烯负载阳离子聚电解质微球合成方法
    k8s client-go源码分析 informer源码分析(1)-概要分析
    如何在互联网上赚到人生的第一桶金?
    UDP协议
    Day11:二叉树---->满~、完全~、堆
    CentOS7 Soft RoCE v2
    3D 生成重建008-zero123让扩散模型了解空间信息zero-shot 单图生3d
    vue__组件自定义事件绑定、解绑、触发自定义事件、父子组件之间通信
    「TCP 重要机制」滑动窗口 & 粘包问题 & 异常情况处理
  • 原文地址:https://blog.csdn.net/weixin_46522531/article/details/126356373
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号