算法设计与分析 note

news/2025/3/4 20:36:09/文章来源:https://www.cnblogs.com/cwhfy/p/18751354

\(f(n)=O(g(n))\) 代表存在常数 \(c,n_0\) 使得 \(\forall n>n_0,f(n)\le c*g(n)\)

\(f(n)=\Omega(g(n))\) 代表存在常数 \(c,n_0\) 使得 \(\forall n>n_0,f(n)\geq c*g(n)\)

\(f(n)=\Theta(g(n))\) 代表存在常数 \(c_1,c_2,n_0\) 使得 \(\forall n>n_0,c_1g(n)\le f(n)\le c_2g(n)\)

\(f(n)=o(g(n))\) 代表 \(\lim\limits_{n\rightarrow +\infty} \frac{f(n)}{g(n)}=0\)

\(f(n)=\omega(g(n))\) 代表 \(\lim\limits_{n\rightarrow +\infty}\frac{f(n)}{g(n)}=+\infty\)

主定理:

形如 \(T(n)=aT(\frac{n}{b})+f(n)\)\(T(1)=1\)

\(f(n)>n^{\log_ba}\)\(T(n)=\Theta(f(n))\)

\(f(n)=n^{\log_ba}\)\(T(n)=\Theta(n^{log_ba}\log n)\)

\(f(n)<n^{\log_ba}\)\(T(n)=\Theta(n^{\log_ba})\)

分治。

一个题目:有 \(n\) 个物品分为 \(A,B\) 两种满足 \(A\) 物品多于 \(B\) 物品 ,你不知道物品的种类。你需要通过交互找出来一个 \(A\) 物品。只能进行 \(O(n)\) 次查询,每次可以丢给交互库两个不同的物品,交互库会给你返回 \(0\)\(1\) 满足:如果两个物品都是 A ,那只会返回 \(1\) ;如果两个物品 1A1B 只会返回 \(0\) ;否则返回 01 皆有可能。

做法:

如果 \(n\) 是偶数则把物品分为两两一组,对每一组分别查询,若返回 1 则丢掉其中一个;否则都丢掉。不难发现丢完了之后还是满足 A 多于 B ,递归做下去就好了。

如果 \(n\) 是奇数:取出任意一个物品,将它和其他每个物品分别比较一次。如果返回 \(1\) 的次数 \(\geq \frac{n-1}{2}\) 则为 A;否则为 B。如果是 A 就直接输出了,否则把 B 给丢掉。

更好的做法:其实 \(n\) 是奇数的时候不需要通过 \(n-1\) 次判断一个物品的好坏。还是两两分组,做偶数时干的事情。设此时保留的物品个数为 \(C\) ,如果 \(C\) 是偶数就直接把这个多出的保留;否则将其丢掉。

更 ez 的做法:随机一个物品做 \(n-1\) 次比较判断 AB,期望 \(2\) 次就能随到 A 物品。

kth_element 随机做法:

随机一个数 \(w\) ,计算序列中 \(<w\) 的个数 \(s_1\)\(>w\) 的个数 \(s_2\) 。如果 \(s_1<k\le n-s_2\) 那直接得到答案为 \(w\) 了;否则,如果 \(k\le s_1\) 就能只保留前 \(s_1\) 个数,递归做下去;否则只保留后 \(s_2\) 个数,递归做下去。

考虑每次至多保留 \(\max(s_1,s_2)\) 个数。由于 \(w\) 是随的所以这个期望是 \(\frac{2}{3}n\)\(T(n)=T(\frac{2n}{3})+\Theta(n)\)

确定性做法:

考虑将物品分为 \(5\) 个一组,求出每一组的中位数,再把找出的 \(\frac{n}{5}\) 个数的中位数递归的求出来,设之为 \(w\) ,对 \(w\) 做上面的事情,递归的做下去。由于 \(s_1,s_2\le \frac{7}{10}n\) ,我们有 \(T(n)=T(\frac{1}{5}n)+T(\frac{7}{10}n)+\Theta(n)\) ,这个解出来是 \(\Theta(n)\) 的。

卷积:

对于 \(F(x)\)\(F_0(x)\)\(F\) 保留偶数项系数后的多项式,\(F_1(x)\) 是保留奇数项,我们有 \(F(x)=F_0(x)+xF_1(x)\)

发现 \(F(W_{2n}^x)=F_0(W_{n}^x)+W_{2n}^xF_1(W_{n}^x)\)

递归计算即可。

大整数乘法:设 \(A=2^{m}a+b,B=2^mc+d\) ,可以得到 \(AB=2^{2m}ac+2^m(ad+bc)+bd\)

考虑 \(ad+bc=(a+b)(c+d)-ac-bd\) 。递归计算 \(ac,bd,(a+b)(c+d)\) 即可。

复杂度 \(T(n)=3T(\frac{n}{2})+O(n)\) ,即 \(O(n^{log_23})\) 。(Karatsuba)

当然可以更优。最新的结果已经做到 \(O(n\log n)\) 了。

矩阵乘法:类似的,对矩阵分块,8 次转 7 次,有 \(T(n)=7T(\frac{n}{2})+O(n^2)\)

\(O(n^{\log_27})\) 。(Strassen)

当然可以更优。最新结果 \(w\) 约为 \(2.371\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/893616.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WEB攻防-机制验证篇重定向发送响应状态码跳过步骤验证码回传枚举

笔记: 验证码突破:回传的时候泄露了发送的验证码导致不需要知道目标的验证码是多少直接使用数据包里面的队列 规律爆破:就是常见的数字四位或者六位 10000 种可能在规定时间内爆破或者多次验证后网站不会出现新的验证码没有次数限制可以尝试爆破或者是汉字进行 重定向用户:通过…

Docker 安装 Redis 容器

1、下载Redis镜像下载指定版本的Redis镜像 (xxx指具体版本号) docker pull redis:xxx docker pull redis 下载最新版Redis镜像 (其实此命令就等同于 : docker pull redis:latest ),我用5.0.5版本。docker pull redis:5.0.52、 检查当前所有Docker下载的镜像docker images

Script-Server:用Web UI轻松管理你的脚本执行

# 监控 # 运维人员 在现代软件开发和运维中,脚本的使用频繁而广泛。然而,如何让非技术人员轻松、安全地运行这些脚本成为了一个挑战。 幸运的是,Script-Server应运而生,它是一个为脚本提供的Web用户界面,可以让用户通过一个直观的界面执行各种脚本,而无需编写代码。本文…

nuxtjs + scss + unocss + pinia 新建项目

1、通过命令行报错的,直接下载压缩包 pnpm dlx nuxi init <project-name>压缩包地址:https://codeload.github.com/nuxt/starter/tar.gz/refs/heads/v3 2、安装插件 1、安装unocss pnpm install --save-dev @unocss/nuxt unocss# nuxt.config.jsmodules: [@unocss/nuxt…

【Azure 环境】执行 az ad user show –id 报错 Insufficient privileges to complete the operation

执行 az ad user show –id 报错 Insufficient privileges to complete the operation问题描述 本地环境中,执行 az ad user show -id 时候,报错 insufficient privileges to complete the operation !问题解答 此报错说明,登录Azure (az login) 时,所使用的账号权限不足所…

VMware ESXi 8.0U3d macOS Unlocker OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:…

VMware Fusion 13.6.3 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式

VMware Fusion 13.6.3 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式VMware Fusion 13.6.3 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式 VMware Fusion 13 原版 App 中集成 OEM BIOS 请访问原文链接:https://sysin.org/blog/vmware-fusion-13-oem/ …

VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途

VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途 VMware Workstation 17.6.3 Pro for Windows & Linux - 领先的免费桌面虚拟化软件 基于 x86 的 Windows、Linux 桌面虚拟化软…

[51Nod 1558] 树中的配对

前言 这能不会, 这能不会, 这能不会??? 做了一会之后, 感觉确实可以不会 思路题意 带权树求一组排列 ppp 使得 dis(i,pi)→max⁡\textrm{dis} (i, p_i) \to \maxdis(i,pi​)→max结论 一条边最多的经过次数就是其连接的两部分中较小的那一个证明方法 \(1\) 调整法 首先点对初…

微信小程序快递代理新手必看:3种方法轻松上手

很多朋友都在问我,如何开始快递代理业务。其实,这个兼职工作门槛很低,只要你有空闲时间,就能开始赚钱。下面我给大家分享一下具体的操作方法。 首先可以让客服帮你搭建小程序,这样推广就可以自助让客户下单,是需要推广!以后客户用了就能一直下单获取持续收益了。 快递代…

2025.03.04 CW 模拟赛 A. 树

题面 A. 树 思路 先说结论, 每条边的贡献次数等于其左右两侧子树大小的最小值. 证明#include "iostream" #include "vector"using namespace std;typedef pair<int, int> pii; typedef long long ll;constexpr int N = 2e5 + 10;int n, sz[N]; ll an…

【python免杀】CS免杀+浅谈Python静态免杀

本文我们再来看看利用python进行静态免杀吧! 先用CS生成 shellcode 把shellcode进行加密放在里面并存放到服务器。 python BS64 shellcode.txt这里为了方便,我们直接放到了kali的apache目录下。 并启动Apache service apache2 start修改加载器的服务器地址后进行一次BS64加密…