首页 > 其他分享 >Day 2 - 分治与倍增

Day 2 - 分治与倍增

时间:2024-07-09 09:00:19浏览次数:16  
标签:frac text 复杂度 分治 mid 倍增 优化 Day

分治的延伸应用

应用场景

优化合并

假设将两个规模 \(\frac{n}{2}\) 的信息合并为 \(n\) 的时间复杂度为 \(f(n)\),用主定理分析时间复杂度 \(T(n) = 2 \times T(\frac{n}{2}) + f(n)\)。

能直观的看出优化程度还是很大的。

归并排序中 \(f(n) = O(n)\),则 \(T(n) = O(n \log n)\)。

特别的当 \(f(n) = O(n^k),k \ge 2\) 时,我们通常不会使用分治,因为无法优化时间复杂度。

优化合并通常应用于哈夫曼树、线段树。

优化计数

我们对长度为 \(n\) 的序列 \(\{a_n\}\) 统计有多少对 \((i,j)\),使得 \(i < j\) 且 \(a_i > a_j\)。

可以使用分治求解 \([l,r]\) 一段内逆序对数。

我们令 \(\text{mid} = \frac{l + r}{2}\),分别处理 \([l,\text{mid}]\) 和 \([\text{mid},r]\) 即可。

代码实现的注意事项:

  1. 特判分治的递归边界。

  2. 若用到临时数组,确保其得到清空,切勿盲目 \(\text{memset}\)。

标签:frac,text,复杂度,分治,mid,倍增,优化,Day
From: https://www.cnblogs.com/So-noSlack/p/18291034

相关文章

  • 代码随想录-DAY⑤-哈希表——leetcode 242 | 349 | 202
    242思路先遍历字符串1,记录每个字符的个数,然后遍历字符串2,挨个减去字符个数,出现小于零的个数说明字符总数不重合。时间复杂度:O(n)空间复杂度:O(1)代码classSolution{public:boolisAnagram(strings,stringt){if(s.length()!=t.length()){......
  • 代码随想录(day1)二分法
    if语句的基本语法if要判断的条件:条件成立的时候,要做的事举例:ifnums[middle]<target:left=middle+1while语句的基本语法:while判断条件(condition):'''执行语句(statements)'''举例:whileleft<=right:middle=left+(right-left)//2题目:代码:class......
  • 代码随想录刷题day 6 | 哈希表理论基础 242.有效的字母异位词 349. 两个数组的交
    242.有效的字母异位词383.赎金信classSolution{//这里只给出了242的代码,赎金信的解法可以说是基本相同的publicbooleanisAnagram(Strings,Stringt){int[]map=newint[26];for(charc:s.toCharArray())map[c-'a']++;for(char......
  • 蓝桥杯单片机学习总结(Day1 实现LED闪烁)
    标题一:通过SM74HC138译码器打开控制8个LED灯的寄存器标题二:编程思路标题三:总结 打开LED寄存器: 由开发板的原理图可知其8个LED灯的寄存器开关为SM74HC138译码器(以下用38译码器称代)的Y4口,该38译码器的输入端P25~P27,其分别对应P25->SM74HC138_A、P26->SM74HC138_B、P27->S......
  • 01day C++初入学习
    这里写目录标题1.C++区别于C的输入输出2.什么是命名空间3.namespace的定义namespace的使用(1)namespace嵌套使用(2)多⽂件中可以定义同名namespace(3)4.命名空间的使用5.C++输⼊&输出6.缺省参数7.函数重载8.引用8.1引用的特性8.3引用的使用1.C++区别于C的输入输出......
  • Studying-代码随想录训练营day31| 56.合并区间、738.单调递增的数字、968.监控二叉树
    第31天,贪心最后一节(ง•_•)ง......
  • Day32.学生注册
    1.学生注册_详细代码及执行流程2.学生注册_学生视图层(student.py)_学生注册register功能函数'''学生视图'''fromlibimportcommonfrominterfaceimportstudent_interface#todo全局记录用户登陆状态student_info={'user':None}#todo学生注册defregister(......
  • 递归 | 分治
    这两个算法有部分重合,所以一起讲。递归\(\sf\small\color{gray}Recursion\)递归是递归函数的灵活运用。说到底,它是一个\(\color{blue}\texttt{C++}\)的一个语言特性。在函数内部调用函数,会使得思路更加清晰明了。观察生活,很多事情随着规模或阶段的上升而变得越来越复杂。......
  • Day 41 | 322. 零钱兑换 、 279.完全平方数、139.单词拆分
    322.零钱兑换如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。这句话结合本题大家要好好理解。视频讲解:https://www.bilibili.com/video/BV14K411R7yvhttps://programmercarl.com/0322.零钱兑换.html给定不同......
  • python随笔day03
    python面试基础问题lambda表达式基本语法:变量=lambda[参数列表]:表达式(函数代码+返回值)#调用变量()例子如下:#加法求和函数a=lambdaa,b:a+bprint(a(1,2))#3#args元组类型b=lambda*args:argsprint(b('a','b','c','d',10))#('a','b&......