二分答案

【模板+讲解】二分答案 【模板+讲解】二分答案 !阅读须知||阅读本博文前笔者认为读者已经学会(或了解)了: 1.基础语言与算法 2.标准二分法(二分思想) 3.二分查找 定义二分答案与二分查找类似,即对有着单调性的答案进行二分,大多数情况下用于求解满足某种条件下的最大(小)值。答案单调性 答案的单调性大多数情况下可以转化为一个函数,其单调性证明多种多样,如下: 移动石头的个数越多,答案越大(NOI 阅读详情
0.定义

二分搜索法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。


1.查找值

在一个有序的数组中查找一个值。
因为有序,所以可以二分。
这里就找了自己十几天前打的一个求有序序列的上界的代码。
大致是这样的:取出中间的数,如果大于要查找的值,答案就在左边,否则在右边。这样每次查找都可以把范围缩小一半。所以时间复杂度就是O(log n)了。

int LB(int A[],int n,int x)
{
    int L=0,R=n;
    while(L<R)
    {
        int mid=(L+R)/2;
        if(A[mid]>=x) R=mid;
        else L=mid+1;
    }
    return L;
}

2.最大化最小值

顾名思义,就是通过二分答案让最小值最大。好吧我承认这是句废话
如果中间值满足题意,那么最小值大于等于中间值。否则小于中间值。

int BS()
{
    int lb=0,ub=l+1;
    while(lb+1<ub)
    {
        int mid=(lb+ub)/2;
        if(check(mid)) lb=mid;
        else ub=mid;
    }
    return lb;
}

3.最小化最大值

类似上文。

int BS()
{
    int lb=0,ub=INF;
    while(lb+1<ub)
    {
        int mid=(lb+ub)/2;
        if(check(mid)) ub=mid;
        else lb=mid;
    }
    return ub;
}

4.最大化平均值

给定n个物品,有自己的重量和价值。选出k个物品,使平均价值最大。
虽然有些并不一定是二分但有些也确实是二分。到时候再确定是不是二分。
这里就把用二分做的题目所用的方法推导一下好了。
定义C(x):=可以选择使得单位重量的价值不小于x。
若C(x)可行,则

∑ki=1v[i] ∑ki=1w[i] ≥x∑i=1kv[i] ∑i=1kw[i] ≥x

则
∑i=1kv[i] −x∗∑i=1kw[i] ≥0∑i=1kv[i] −x∗∑i=1kw[i] ≥0

∑i=1kv[i] −∑i=1kx∗w[i] ≥0∑i=1kv[i] −∑i=1kx∗w[i] ≥0

∑i=1kv[i]−k∗w[i] ≥0∑i=1kv[i]−k∗w[i] ≥0

所以就可以用这个思路来二分答案了。
bool cmp(node p,node q) { return p.t>q.t; }
bool check(double x)
{
    for(int i=1;i<=n;i++) a[i].t=a[i].a-a[i].b*x;
    sort(a+1,a+n+1,cmp);
    double ans=0;
    for(int i=1;i<=n-k;i++) ans+=a[i].t;
    return ans>=0;
}
double BS()
{
    double lb=0.0,ub=1.0;
    while(lb+eps<ub)
    {
        double mid=(lb+ub)/2;
        if(check(mid)) lb=mid;
        else ub=mid;
    }
    return lb;
}
5.其他的一些
  • 有可能二分的不是明显地表示上面的某个模型,这时候就要推导一发。(也有可能就不是上面的某个模型?)

  • 是不是二分要理智判断。似乎又是一句废话。问题的解一般要单调。

  • 有时候还会有一些恶心的二分套二分什么的。

pytorch实现手语识别 连续手语识别项目,中文数据集CSL 阅读详情

相关推荐

使用STC15F104W产生PWM脉冲

最近的小项目中使用到了STC15F104W产生PWM脉冲

yeats1989的专栏 1万+

算法提高——基础算法(二分答案)

文章目录前言一、什么是二分答案二、算法介绍1.使用条件和适用情况2.代码模板3.例题解析总结 前言 博主在这几天刷算法的时候,被一些二分答案的题目几尽折磨,在苦苦刷题的时候从yxc大佬那里学到了新的二分模板,在对这个模板深入实践后,愈发感觉这个模板运用好几乎万能,所以在此时记录下我的一些新的理解,并对之前的博客相互印证。(二分查找细节讲解~~~~阅读量好少支持一下吧 没看过的可以看下,相信对你有帮助) 一、什么是二分答案 比如说你要从一本英汉词典上查一个单词,你从头到尾一页一页的翻着找,这样找可以保证一定

leoyongyuan的博客 3774

【Qt笔记】1.VSCode搭建Qt运行环境

Qt6之后已经抛弃qmake,使用cmake。cmake相对qmake来说只有优点没有缺点。使用VSCode搭建完Qt的运行环境就能开开心心debug了.vscode需要使用的插件:2.Qt tools3.CMakec++插件可以不关注,缺啥都会提醒你.正常安装即可。

没有手牌的博客 2万+

二分答案算法笔记

二分答案算法笔记

m0_74099951的博客 722

CentOS 7下rsyslog日志服务器搭建全攻略:从安装到避坑

本文详细介绍了在CentOS 7系统上搭建rsyslog日志服务器的完整流程,从基础安装到高级配置,包括协议设置、日志模板设计、安全加固和性能优化。特别分享了生产环境中的实战技巧和常见问题解决方案,帮助用户高效构建可靠的日志管理系统。

happy2的博客 687

光耦CTR参数实战:如何避免误触发与功耗陷阱(附计算公式)

本文深入解析光耦CTR参数在电路设计中的关键作用,探讨如何平衡误触发风险与功耗表现。通过TLP521、PC817等常见型号的实测数据对比,提供不同工作状态下的选型策略和计算公式,帮助工程师优化设计,提升系统稳定性和能效。

2a4s6d8f0g的博客 323

二分答案法及例题

二分答案法以及例题

2301_80186482的博客 1559

车载通信技术原理-CAN通讯和代码配置:奥迪A6轿车总线拓扑图

CAN总线是一种用于汽车监测与控制系统的串行通信协议,由德国Bosch公司开发。它具有多主工作方式、优先级仲裁、高抗干扰等特点,支持点对点、广播等多种通信方式,传输距离可达10公里。CAN协议采用差分信号传输,物理层使用双绞线,数据链路层实现错误检测、位填充等功能。协议帧类型包括数据帧、遥控帧、错误帧等。CAN总线自1986年发布以来,已成为汽车电子系统的标准配置,广泛应用于车载网络。文章还提供了S32K144芯片的CAN驱动代码示例。

擎天柱工坊 1066

二分答案全攻略

<br />当直接求解答案比较困难时,可以枚举答案,再判断枚举得到的这个答案是否合法。<br />如果这个答案还具有单调性,就可以用二分加速枚举过程。<br />Kth Largest(http://acm.hrbeu.edu.cn/index.php?act=problem&id=1005&cid=14)(二次二分)<br />题意:<br /> A,B两个数组,求出两个数组互相乘以后生成的n*n个数中的第k大的数。<br />解法:<br />  对A,B从小到大排序。<br />  二分第k大的数的值

SwordHoly __传说中的圣剑,攻击力加250,ORZ!! 4055

3. NVIDIA GPU Xid 常见错误码全解析、故障定位与标准化处理方案

摘要: Xid是NVIDIA显卡驱动记录的硬件/软件异常日志,通过dmesg等工具可获取,包含PCI总线、GPU编号、故障码等信息,是诊断显卡问题的核心依据。Xid故障分为四类:应用程序类(如代码错误,Xid13/31)、显存ECC硬件类(如显存损坏,Xid48/63)、链路/供电温控类(如PCIe故障,Xid74/79)和GSP固件类(如静电干扰,Xid119/154)。排查流程包括日志采集、软件修复(如重启进程、升级驱动)、硬件检查(如PCIe链路状态)及断电复位(针对GSP故障)。预防措施包括监控EC

jundao1997的专栏 661

使用 MediaPipe 身体跟踪构建不良身体姿势检测和警报系统

详细介绍如何使用 MediaPipe 身体跟踪构建不良身体姿势检测和警报系统,并附实现的源码下载链接

DT程序员的博客 1813

【算法笔记】二分查找 && 二分答案 (超详细解析,一篇让你搞懂二分)

二分查找应该算是是很多人入门的第一个算法吧,无论是ACM还是蓝桥杯都是必学的算法,很多人都觉得其非常简单,但它真的那么简单吗?Knuth 大佬(发明 KMP 算法的那位)曾说过:(思路很简单,细节是魔鬼)本文将为大家详细讲解二分查找的原理和使用场景并且,我们就是要深入细节,我将从while循环中该不该带mid该不该+1等地方分析这些细节的差异及出现差异的原因,保证你能灵活准确的写出二分查找算法。二分查找,也称为折半查找(Binary Search),是一种在有序数组中查找特定元素的搜索算法。

2302_79577794的博客 2万+

STM32堆栈溢出问题及解决方法

堆栈是用于存储函数调用和局部变量的内存区域,它是一种先进后出的数据结构。如果函数嵌套层级过深或者局部变量占用的内存空间过大,堆栈的大小可能不足以容纳这些信息,从而导致堆栈溢出。在一些特殊情况下,可以使用堆内存替代堆栈,以避免堆栈溢出问题。在STM32的工程中,可以通过修改链接脚本文件(.ld文件)中的堆栈大小参数来增加堆栈空间。通常,堆栈大小设置为RAM的一小部分,但需要根据具体应用的需求进行调整。堆栈溢出是嵌入式系统开发中常见的问题之一,特别是在使用STM32微控制器时。3.3 使用堆内存替代堆栈。

ZwcCsharp的博客 2593

二分答案详解

二分答案详解,包含二分答案算法思想,例题实现思路及代码讲解。将二分答案问题抽象成:求满足条件的最大(小)值、最大值最小化问题、最小值最大化问题三类,并附带例题讲解。博文内包含例题:(P1873 [COCI 2011/2012 #5] EKO / 砍树)、(P2440 木材加工)、(P1182 数列分段 Section II)、(P1824 进击的奶牛)。

weixin_43100558的博客 5920

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

二分答案算法超详细教程

本文出自我的掘金博客, 欢迎大家访问传送门 20200202这么好的日子, 多么适合学习二分答案算法呀. 老规矩, 先上模板题传送门 首先, 二分答案与二分查找其实是不一样的 二分答案: 即对你要求的答案进行二分 二分查找: 对一个已知的有序数据集上进行二分的查找 可能我的归纳不太准确, 但至少可以看出来它们是不一样哒 敲重点, 这里需要特别注意一下二分答案法的使用范围 典型的使用场景: 要求我...

汪阿少的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

二分答案讲解教程

本篇文章将讲解作者对于二分答案的理解。提示:以下是本篇文章正文内容,下面案例可供参考。

2301_80892162的博客 1078

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

二分查找 & 二分答案 万字详解,超多例题,带你学透二分。

很多人对二分很困惑,可能二分的边界很难掌握,也许是判断条件难写... 很幸运,你找到了这篇文章,仔细看下去,这篇文章将带你**学透二分**!!!

Mr_dimple的博客 10万+

二分答案(超级详细)

二分答案,超级详细,小学学历就懂

lijingheng66的博客 5351

【算法学习】二分查找与二分答案

二分可以简单分为二分查找与二分答案。:在一个有序的数组中进行搜索,时间复杂度为O(nlogn)。:在答案的一个范围内进行二分搜索。

Delicacy__的博客 1872

[模板]二分答案

二分答案1.使用场景2.什么是二分答案3.求最小值4.求最大值5. check函数构思 1.使用场景 二分答案一般使用在求解符合条件的最小值或者最大值上面,当我们遇到这两个问题的时候,一般都可以使用二分答案来解决问题。 2.什么是二分答案 二分答案就是通过对所有可能的答案区间进行折半查找,不断缩减范围,最终确定答案的方法。 3.求最小值 //求最小值 int binary(int left, in...

szdytom的博客 1335

二分查找与二分答案

二分查找和二分答案是算法中常用的两种思想,它们的核心都是通过不断缩小搜索范围来高效解决问题,当题目所给的数据量较大时可以考虑使用二分,相比普通查找时间复杂度, 二分查找的时间复杂度通常为。

2301_79358165的博客 618

二分答案讲解

今天我们来学:二分答案。

u013701761的博客 2217

二分查找与二分答案(Acwing)

【代码】二分查找与二分答案(Acwing)

2301_81856985的博客 1528

C++ | 二分查找(重点二分答案)

常见的二分类型:1. 整数二分2. 小数二分(相对较少)3. 二分答案(最常见)最直接的就是用O(logn)的时间,枚举时间较慢O(n)。小数二分与整数二分的思想相一致,就不在赘述了。

lly18435759909的博客 2306

二分查找(二分答案)套路模板

本题就看sum是大于还是小于h了,本题是sum小于等于h,找的是左边界,只要mid满足条件,那么大于mid的肯定都满足条件,所以更新r,这是顺向的思维,你要非写成sum>h返回true的话也不是不行。更新l时,更新的是l=mid+1,但是满足条件的是mid,而不是mid+1,很有可能mid+1就不符合条件,如果mid+1符合条件,那么l和r一定会更新到这里并且循环不会结束的。:当答案增大或减小时,问题的可行性呈现单调变化(如更大的间隔可能导致更少的可行解),这个就是我举例的那道题的类型。

m0_74795952的博客 1674
上一篇: dp
下一篇: poj-3061-Subsequence & 尺取法
dogeding
博客等级 码龄10年 31粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值