M - 有效算法

Attachments - 2024 National Invitational of CCPC (Zhengzhou), 2024 CCPC Henan Provincial Collegiate Programming Contest - Codeforces

将公式转换:
∣ a i − x ∣ ≤ k × b i | a_i - x | \le k \times b_i aixk×bi

− k × b i + a i ≤ x ≤ k × b i + a i -k \times b_i + a_i \le x \le k \times b_i + a_i k×bi+aixk×bi+ai

二分答案 k k k。处理出所有的 ( l , r ) (l, r) (l,r),判断有无交集即可。

代码如下:

#include "bits/stdc++.h"
using namespace std;
using LL = long long;

int main()
{
    int _; cin>>_;
    while(_--) {
        LL n; cin>>n;
        vector<int> a(n), b(n);
        for(auto &t: a) cin>>t;
        for(auto &t: b) cin>>t;
        vector<pair<LL,LL>> seg(n);
        LL l = 0, r = 1e9 + 21;
        auto check = [&](LL mid) -> bool {
            for(int i = 0; i < n; ++i) {
                seg[i] = {a[i] - mid * b[i], mid * b[i] + a[i]};
            }
            LL nl = seg[0].first, nr = seg[0].second;
            for(int i = 1; i < n; ++i) {
                if(nr < seg[i].first || nl > seg[i].second) return false;
                nr = min(nr, seg[i].second);
                nl = max(nl, seg[i].first);
            }
            return nr >= nl;
        };
        while(l < r) {
            LL mid = (l + r) >> 1;
            if(check(mid)) r = mid;
            else l = mid + 1;
        }
        cout<<r<<"\n";
    }
}
  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: slope-bias算法是一种常用的机器学习算法,也称为线性回归算法。它主要用于拟合一条直线,以描述输入数据和对应的输出数据之间的关系。 在slope-bias算法中,假设我们有一组输入数据X和对应的输出数据Y,我们的目标是找到一条最佳的直线y = mx + b,使得该直线能够最好地拟合输入数据和输出数据之间的关系。 在算法中,m称为斜率,b称为偏移或截距。我们的目标是通过拟合来找到最佳的斜率m和截距b的值。 具体实现slope-bias算法的过程如下: 1. 初始化斜率m和截距b的值为0或者随机的初始值。 2. 计算预测值ŷ,即 y = mx + b。 3. 计算预测值ŷ与实际输出值Y之间的误差。 4. 更新斜率m和截距b的值,使得误差最小化。可以使用梯度下降法等优化算法来更新参数。 5. 重复步骤2-4,直到达到收敛条件或者达到最大迭代次数。 通过以上步骤,我们能够找到一条最佳的直线,使得该直线能够最好地拟合输入数据X和对应的输出数据Y之间的关系。 slope-bias算法在机器学习中有广泛的应用,特别是在回归问题中。它简单而有效,能够得到较好的拟合效果。然而,对于非线性关系的数据,slope-bias算法的效果可能不理想,需要使用其他更复杂的算法来处理。 ### 回答2: MATLAB斜率-偏差算法(slope-bias algorithm)是一种用于线性回归的方法。它通过在数据集上拟合一条直线来建立输入特征和输出目标之间的关系。 该算法的关键是找到最适合数据集的直线。这条直线的数学表达式根据斜率和偏差来确定。 斜率代表直线的倾斜程度,而偏差则表示直线与y轴的截距。通过调整这两个参数,我们可以得到一个最佳的拟合直线,从而使得预测值与实际值之间的误差最小。 斜率-偏差算法的目标是最小化预测值与实际值之间的平方误差和。为了达到这个目标,算法使用了最小二乘法。 在MATLAB中,我们可以使用线性回归函数(linreg)来执行斜率-偏差算法。此函数会使用最小二乘法来计算最佳的斜率和偏差值,并返回拟合直线的数学表达式。 使用斜率-偏差算法,我们可以在MATLAB中轻松地建立线性回归模型,并预测新的输出值。通过调整输入特征的值,我们可以用模型来预测不同情况下的输出。 总而言之,MATLAB斜率-偏差算法是一种用于线性回归的方法。它通过调整斜率和偏差来找到最适合数据集的直线,并用于预测新的输出值。 ### 回答3: Slope-Bias算法是一种在MATLAB中用于拟合线性模型的算法。它是基于最小二乘法的一种变种,通过调整斜率和截距来逼近数据的真实分布,以实现对数据进行线性拟合。 具体而言,Slope-Bias算法的步骤如下: 1. 首先,根据给定的数据集,我们需要创建一个线性模型(直线)。这个模型的表达式为:y = mx + c,其中m是斜率,c是截距,x和y是数据集中的变量。 2. 接下来,我们随机初始化斜率m和截距c的值。 3. 然后,我们通过计算每个数据点的预测值与实际值之间的误差(误差函数),来评估当前模型的性能。 4. 通过计算误差函数对斜率和截距的偏导数,我们可以获得它们对误差函数的梯度。这个梯度告诉我们在当前位置下,如何调整斜率和截距才能使误差函数最小化。 5. 使用梯度下降法,我们根据梯度的方向调整斜率和截距。梯度下降法是一种迭代的优化算法,通过重复执行该调整过程,不断接近误差函数的极小值点。 6. 重复步骤3-5,直到模型的性能不再显著改善或达到事先设定的迭代次数。 Slope-Bias算法是一种简化的线性回归算法,适用于处理大规模数据集。它通过不断优化斜率和截距来逼近真实分布,从而实现对数据的线性拟合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

golemon.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值