大数据机器学习算法与计算机视觉应用04:多项式

The Algorithm Magic of Polynomial

  • Polynomials
  • The Root of Polynomial
  • A Delete Channel
  • Polynomials for Finding Maximum Matchings

Polynomials 多项式

一个 d d d 次多项式可以用一个 d + 1 d+1 d+1 元组 c i {c_i} ci 表达。在这种情况下,两个多项式相加的时间复杂度是 O ( d ) O(d) O(d) ,而两个多项式相乘的实践复杂度是 O ( d log ⁡ d ) O(d \log d) O(dlogd)

快速地估计一个多项式的值的方法:对应给定值b,循环执行将当前式子乘b,加下一项。这个方法叫做霍纳规则。流程如下:
c d c d × b + c d − 1 ( c d × b + c d − 1 ) × b + c d − 2 c_d c_d \times b + c_{d-1} (c_d \times b + c_{d-1}) \times b +c_{d-2} cdcd×b+cd1(cd×b+cd1)×b+cd2
该算法的时间复杂度是 O ( d ) O(d) O(d)

多项式的根

对于一个多项式 P ( x ) P(x) P(x),令 P ( x ) = 0 P(x)=0 P(x)=0 的值 x ′ x' x 被称作多项式的根。

根据代数基本定理,一个d次多项式一定有d个根。

Unique Reconstruction Theorem 唯一重构定理

唯一重构定理告诉我们,给定d个点 ( x 1 , y 1 ) , ( x 2 , y 2 ) ⋱ , ( x d , y d ) (x_1,y_1),(x_2,y_2) \ddots, (x_d,y_d) (x1,y1),(x2,y2),(xd,yd), 总有一个多项式 P ( x ) P(x) P(x) 使得这些点都在多项式上。

事实上,唯一重构定理告诉我们如何构造这样一个多项式满足条件。
首先我们构造这样一组多项式 R i ( x ) R_i(x) Ri(x) 满足:
R i ( x i ) = 1 R i ( x j ) = 0 , j ≠ i R_i(x_i) = 1 R_i(x_j) = 0, j \neq i Ri(xi)=1Ri(xj)=0,j=i
结果如下:
Π j ≠ i ( x − x j ) Π j ≠ i ( x i − x j ) \quad{\Pi _{j\neq i}(x-x_j)}\over{\Pi _{j\neq i}(x_i-x_j)} Πj=i(xixj)Πj=i(xxj)
那么
P ( x ) = y 0 R 0 ( x ) + y 1 R 1 ( x ) + ⋯ + y d R d ( x ) P(x) = y_0 R_0(x) + y_1 R_1(x) + \cdots +y_d R_d(x) P(x)=y0R0(x)+y1R1(x)++ydRd(x)

举个例子:有三个点 ( 5 , 1 ) , ( 6 , 2 ) , ( 7 , 9 ) (5,1),(6,2),(7,9) (5,1),(6,2),(7,9),现在找出经过这三个点的多项式。
R 1 ( x ) = ( x − 6 ) ( x − 7 ) ( 5 − 6 ) ( 5 − 7 ) = 1 2 ( x 2 − 13 x + 42 ) R 2 ( x ) = ( x − 5 ) ( x − 7 ) ( 6 − 5 ) ( 6 − 7 ) = − 1 2 ( x 2 − 12 x + 35 ) R 3 ( x ) = ( x − 5 ) ( x − 6 ) ( 7 − 6 ) ( 7 − 5 ) = 1 2 ( x 2 − 11 x + 30 ) P ( x ) = R 1 ( x ) + 2 R 2 ( X ) + 9 R 3 ( x ) = 4 x 2 − 50 x + R_1(x) = \frac{(x-6)(x-7)}{(5-6)(5-7)} = \frac{1}{2} (x^2 -13x +42) R_2(x) = \frac{(x-5)(x-7)}{(6-5)(6-7)} = -\frac{1}{2} (x^2 -12x +35) R_3(x) = \frac{(x-5)(x-6)}{(7-6)(7-5)} = \frac{1}{2} (x^2 -11x +30) P(x) = R_1(x) + 2R_2(X) + 9R_3(x) = 4x^2-50x + R1(x)=(56)(57)(x6)(x7)=21(x213x+42)R2(x)=(65)(67)(x5)(x7)=21(x212x+35)R3(x)=(76)(75)(x5)(x6)=21(x211x+30)P(x)=R1(x)+2R2(X)+9R3(x)=4x250x+

A Deletion Channel 丢失频道

下面是另一个问题,假设在上面构造多项式的情景中,Alice要向Bob传d+1个数,但是在传输的过程中总会有k个数丢失,那么怎么才能保证Bob一定收的到这d+1个数呢?

一种很笨的方法是,将每个数据发送k+1次就可以了。但是这需要发送 d × ( k + 1 ) d\times (k+1) d×(k+1) 个数据,有没有更好的方法呢?

一种好方法是构造一个多项式 P ( x ) = Σ c i x i P(x) =\Sigma c_i x_i P(x)=Σcixi,然后发送 P ( 0 ) , P ( 1 ) , ⋱ , P ( d + k ) P(0),P(1),\ddots,P(d+k) P(0),P(1),,P(d+k),这样Bob至少可以收到d+1个多项式的值,根据唯一重构定理,Bob可以计算出这个多项式从而得出所有的c。
这种做法的时间复杂度是 O ( d + k + 1 ) O(d+k+1) O(d+k+1),比上面的做法少传输很多数据。(注意,不用担心乱序的问题,因为是一个一个传的,而如果出错会传乱码而不是什么也不做)。

General Error Correction 误码纠错

假设现在不是传输丢失,而是传输一个错误的数字,那么在同样的背景下,需要进行怎样的传输呢?

很明显,答案是需要传输 d + 2 k + 1 d+2k+1 d+2k+1个数字,其中 d + k + 1 d+k+1 d+k+1是正确的多项式的值。因为 k + 1 > k k+1>k k+1>k,所以我们从理论上确认了Bob可以通过这种方式找到正确的多项式。

那么实际上应该怎么找到那个正确的多项式呢?

假设Bob收到的数据是 r 0 , r 1 , ⋱ , r d + 2 k r_0,r_1,\ddots,r_{d+2k} r0,r1,,rd+2k,Z是其中错误信息的集合,那么我们声明一个错误项多项式
E ( x ) = Π i ∈ Z ( x − i ) E(x) = \Pi_{i\in Z}(x-i) E(x)=ΠiZ(xi)
那么对于Bob收到的所有项都满足以下等式,因为要么 E ( x ) = 0 E(x)=0 E(x)=0,要么 P ( x ) = r x P(x) = r_x P(x)=rx
P ( x ) ⋅ E ( x ) = r x ⋅ E ( x ) P(x)\cdot E(x) = r_x \cdot E(x) P(x)E(x)=rxE(x)

Berlekamp-Welch Algorithm BW算法

BW算法是一种用于误码纠错的算法,其运行规律基于上文所述,我们假设
E ( x ) = x k + e k − 1 x k − 1 + ⋯ + e 0 ( i f d e g r e e ( E ( x ) ) i s k ) P ( x ) ⋅ E ( x ) = f d + k x d + k + f d + k − 1 x d + k − 1 + ⋯ + f 0 E(x) = x^k +e_{k-1}x^{k-1} + \cdots + e_0 (if degree(E(x)) is k) P(x) \cdot E(x) = f_{d+k}x^{d+k} + f_{d+k-1}x^{d+k-1} + \cdots + f_0 E(x)=xk+ek1xk1++e0(ifdegree(E(x))isk)P(x)E(x)=fd+kxd+k+fd+k1xd+k1++f0
这种情况下,我们分别将 x = 0 , 1 , ⋯   , d + 2 k x = 0,1,\cdots, d+2k x=0,1,,d+2k带入方程
P ( x ) ⋅ E ( x ) = r x ⋅ E ( x ) P(x) \cdot E(x) = r_x \cdot E(x) P(x)E(x)=rxE(x)
左边是一堆参数f相加,右边是一堆e相加,f和e未知数的总和是d+2k+1个,而带入d+2k+1个x的值对应d+2k+1个方程,而且方程必定有解,因此就可以解出所有的e和f。

已知 P ( x ) ⋅ E ( x ) P(x) \cdot E(x) P(x)E(x) E ( x ) E(x) E(x) ,相除就可以求出 P ( x ) P(x) P(x)

Polynomials for Finding Maximum Matching 多项式在最大匹配中的应用

Schwarz-Zippel Lemma Schwarz-Zippel 引理

这个引理的内容是:假设 P P P是一个非零 m m m d d d次多项式,假设 S S S是有限域 F F F的一个子集。如果从 S S S中随机抽取 m m m个数 x 1 , x 2 , ⋯   , x m {x_1,x_2,\cdots,x_m} x1,x2,,xm,那么
P r [ P ( x 1 , ⋯   , x m ) = 0 ] ≤ d ∣ S ∣ Pr[P(x_1,\cdots,x_m)=0] \leq \frac{d}{|S|} Pr[P(x1,,xm)=0]Sd
健全性检查:当 m = 1 m=1 m=1时,因为d次多项式最多有 d d d个根,因此概率很明显就是 d ∣ S ∣ \frac{d}{|S|} Sd

这个引理可以用来解决下文提到的图的匹配问题。

Tutte Matrix

每个顶点数 v v v的简单无向图都对应一个Tutte Matrix M ( G ) M(G) M(G),简单来说如图所示:
Tutte Matrix

Tutte Determinant Theorem Tutte行列式定理

一个图有完美匹配当且仅当 M ( G ) M(G) M(G)的行列式不是零多项式。
(注:匹配指的找到图中一组边集,其中任意两条边都没有公共点。如果这组边集包括了图中所有的顶点,那么就说该匹配是完美匹配。)

那么剩下的就是选取 F F F的大小了, F F F的基数越大,这张图有完美匹配的概率就越高。

Finding a Perfect Matching

上面我们知道了有完美匹配的概率,但是我们如何找到一个完美匹配呢?下面是一个方法:

对于每个边,将图中的该边删去,判断剩下的图中是否还存在完美匹配。如果没有完美匹配,那么将该边加回来;否则丢弃该边。
最后一定剩下 V 2 \frac{V}{2} 2V条边,这些边就是一个完美匹配。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Vue】Vue3.0(十九)Vue 3.0 中一种组件间通信方式-自定义事件

文章目录 一、自定义事件概念及使用场景二、代码解释三、新的示例 一、自定义事件概念及使用场景 概念 在 Vue 3.0 中,自定义事件是一种组件间通信的机制,允许子组件向父组件传递数据或触发父组件中的操作。子组件通过defineEmits函数定义可以触发的事件…

单片机入门知识

1单片机系统的int是16位 计算机系统的int是32位(数据总线) 2的16次方是65536 所以在单片机中,如果表示一个正整数,这个数字的范围是0~65535,总共有65536种可能 2内存条用于存储计算机运行时的数据,是连接…

【高等数学】6向量与空间几何

1. 向量及其运算 1.1. 单向量的计算 向量的模的计算 单位向量的计算 1. 计算模: 2. 向量除以它的模: 1.2. 向量的点乘 点乘的计算 点乘:算出来的是一个数,所以点乘又称为向量的数量积。 向量点乘的计算公式: 向量的夹角计算 向量的夹角公式: 向量间平行垂直的…

Linux进程信号(信号的产生)

目录 什么是信号? 信号的产生 信号产生方式1:键盘 前台进程 后台进程 查看信号 signal系统调用 案例 理解进程记录信号 软件层面 硬件层面 信号产生方式2:指令 信号产生方式3:系统调用 kill系统调用 案例 其他产生信号的函数调用 1.rais…

7.qsqlquerymodel 与 qtableview使用

目录 qtableview 委托QStyledItemDelegateQAbstractItemDelegateCheckBoxItemDelegate使用qtableview控制列宽,行高,隐藏拖拽行列 qtableview 委托 //设置单元格委托 void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *it…

利用 Avalonia UI 构建 Blazor 混合应用程序

Blazor 是一个 .NET 前端框架,用于仅使用 .NET 技术构建 Web 应用程序。2021 年,Blazor 扩展到桌面端,推出了 Blazor Hybrid(混合),使开发者可以在桌面平台上使用已有的技能。 Blazor 混合应用程序是传统的…

MFC中Excel的导入以及使用步骤

参考地址 在需要对EXCEL表进行操作的类中添加以下头文件:若出现大量错误将其放入stdafx.h中 #include "resource.h" // 主符号 #include "CWorkbook.h" //单个工作簿 #include "CRange.h" //区域类,对Excel大…

【深入浅出】Linux进程(三)

📃博客主页: 小镇敲码人 💚代码仓库,欢迎访问 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧…

2024 第五次周赛

A: 直接遍历即可 #include<bits/stdc.h> using namespace std;typedef long long ll; typedef pair<ll, ll>PII; const int N 2e6 10; const int MOD 998244353; const int INF 0X3F3F3F3F;int n, m; int main() {cin >> n;int cnt 0;for(int i 0; i …

gitlab无法创建合并请求是所有分支都不显示

点击Merge Requests ------> New merge request 创建新的合并请求时&#xff0c;在Source branch和Target branch中一个分支都不显示 排查思路&#xff1a; 1.怀疑是权限问题。 发现只有我的一个账号出现&#xff0c;检查了账号的权限&#xff0c;尝试了master、develop角色…

Linux中给普通账户一次性提权

我在以前文章中Linux常见指令大全&#xff08;必要知识点&#xff09;-CSDN博客 写过sudo的概念与用法。其实本质就是提权用的但是在某些场景下就算提权了也不能使用。 例如&#xff1a;打开主工作目录 他不相信你这个用户&#xff0c;虽然你是erman 解决方法 使用root账号打开…

【C++】—掌握STL string类:string的模拟实现

文章目录 &#x1f49e;1.浅拷贝&#x1f49e;2.深拷贝&#x1f49e;3. string类的模拟实现&#x1f49e;3.1 string的构造函数&#x1f49e;3.2 string的析构函数&#x1f49e;3.3 string的拷贝构造&#x1f49e;3.4 string的size&#x1f49e;3.5 string的operator[]&#x1…

详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送

在C#中&#xff0c;SendMessage方法是一个强大的工具&#xff0c;它允许我们与Windows API交互&#xff0c;模拟键盘和鼠标事件。本文将详细介绍如何使用SendMessage方法来发送鼠标和键盘消息。 1. SendMessage方法概述 SendMessage是Windows API中的一个函数&#xff0c;它用…

15.UE5等级、经验、血条,魔法恢复和消耗制作

2-17 等级、经验、血条、魔法消耗_哔哩哔哩_bilibili 目录 1.制作UI&#xff0c;等级&#xff0c;经验&#xff0c;血条 ​2.为属性面板绑定角色真实的属性&#xff0c;实现动态更新 3.魔法的消耗和恢复 1.制作UI&#xff0c;等级&#xff0c;经验&#xff0c;血条 创建控…

<项目代码>YOLOv8 玉米地杂草识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

现场工程师日记-MSYS2迅速部署PostgreSQL主从备份数据库

文章目录 一、概要二、整体架构流程1. 安装 MSYS2 环境2. 安装postgresql 三、技术名词解释1.MSYS22.postgresql 四、技术细节1. 创建主数据库2.添加从数据库复制权限3. 按需修改参数&#xff08;1&#xff09;WAL保留空间&#xff08;2&#xff09;监听地址 4. 启动主服务器5.…

堆排序与链式二叉树:数据结构与排序算法的双重探索

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 引言 一.堆排序 1.1 版本一 核心概念 堆排序过程 1.2 版本二 堆排序函数 HeapSort 向下调整算法 AdjustDown 向上调整算法 AdjustUp 二.链式二叉树 2.1 前中后序遍历 链式二叉树的结构 创建链式二叉树 前序遍历…

【LinuxC编程】06 - 守护进程,线程

进程组和会话 概念和特性 进程组&#xff0c;也称之为作业。BSD于1980年前后向Unix中增加的一个新特性。代表一个或多个进程的集合。每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念&#xff0c;是为了简化对多个进程的管…

【MongoDB】MongoDB的聚合(Aggregate、Map Reduce)与管道(Pipline) 及索引详解(附详细案例)

文章目录 MongoDB的聚合操作&#xff08;Aggregate&#xff09;MongoDB的管道&#xff08;Pipline操作&#xff09;MongoDB的聚合&#xff08;Map Reduce&#xff09;MongoDB的索引 更多相关内容可查看 MongoDB的聚合操作&#xff08;Aggregate&#xff09; 简单理解&#xff…

Python的函数(补充浅拷贝和深拷贝)

一、定义 函数的定义&#xff1a;实现【特定功能】的代码块。 形参&#xff1a;函数定义时的参数&#xff0c;没有实际意义 实参&#xff1a;函数调用/使用时的参数&#xff0c;有实际意义 函数的作用&#xff1a; 简化代码提高代码重用性便于维护和修改提高代码的可扩展性…