当前位置: 首页 > news >正文

建行网站/网页搜索优化

建行网站,网页搜索优化,课程设计代做网站php,怎么做网站首页psd关键字:二分查找,数值分析归航return:(Trivial) Leetcode 240—搜索二维矩阵​zhuanlan.zhihu.com归航return:(Trivial)Leetcode 91—解码方法​zhuanlan.zhihu.comProblem实现 int sqrt(int x) 函数。计算并返回 x 的平方根&…

关键字:二分查找,数值分析

归航return:(Trivial) Leetcode 240—搜索二维矩阵​zhuanlan.zhihu.com
归航return:(Trivial)Leetcode 91—解码方法​zhuanlan.zhihu.com

Problem

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4 输出: 2

示例 2:

输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
69. x 的平方根 - 力扣(LeetCode)​leetcode-cn.com

Solution 1: binary search

这道题出现的标签有两个,二分查找和数学。首先使用一下二分查找方法。二分查找的关键就是找到符合要求的区间。对此我想到了逐次加倍的方法来缩小区间。具体来说,就是令初始结果为 1,如果初始结果的平方小于等于 x,就继续加倍。这里实际上是来源于 Hash 表和我阅读的数据结构书籍中自己实现 std::vector class 中动态调整数组容量的加倍操作的灵感。

long y = x;
long begin = 1;
while (begin*begin <= y)begin *= 2;

那么最后得到的区间

中一定包含了平方根的结果,之后就是运用二分法来快速查找。
long end = begin;
begin = begin/2;
while (begin < end){long mid = begin+(end-begin)/2;if (mid*mid == y){return mid;}else if (mid*mid < y){begin = mid+1;}else{end = mid;}
}
return (begin*begin == x) ? begin : begin-1;

由于这里得到的 begin 实际上是平方不小于 begin 的最小值,因此最后还要做一次判断是否是完全平方数。时间复杂度上,第一部分循环体的执行次数

满足:
,因此
的数量级是
。之后第二次的话是在一个长度为
的范围内进行二分查找,因此时间复杂度是
,因此总的数量级是

合并可以得到这个代码:

class Solution {
public:int mySqrt(int x){if (x){long y = x;long begin = 1;while (begin*begin <= y){begin *= 2;}long end = begin;begin = begin/2;while (begin < end){long mid = begin+(end-begin)/2;if (mid*mid == y){return mid;}else if (mid*mid < y){begin = mid+1;}else{end = mid;}}return (begin*begin == x) ? begin : begin-1;}else{return 0;}}
};

b666dfd22210a9c1ad34ef71c02fcdf5.png

但是这个地方还有两个值得注意的细节。首先是类型溢出问题,例如上述的 y 和 begin,end 中最好都用 long 类型,否则会溢出,这个我已经出错过了,解决方法就是加上 long。

b2d15f3571ec0b67bb83ab48a0ef81bc.png

其次是结果到底是什么的问题。根据这段中间的二分查找的算法可以知道实际上求的是使得

的最小的 begin,而如果 x 不是完全平方数,那么应该返回 begin-1。

Solution 2: numerical analysis

这实际上可以当成在只有加减乘除四则运算的情况下求解方程

,其中
的问题。这让我不由得想到了一道高考题。
(2014 安徽卷理科,21)
设实数
,整数

(1) 证明:当
,且
时,

(2) 数列
满足
,求证:

简单说明一下这道高考题的解答。第一问是 trivial 的,这是熟知的 Bernoulli 不等式(百度百科/维基百科)的特殊情况,可以求导也可以直接二项式定理。第二问首先证明,当首项大于

时,后面每项都大于
,这可以求导结合数学归纳法解决。其次只需要作差来证明差的单调性,仍然是求导。更详细的解答可以参考我阅读过的这个知乎文章:
北斗星司:两道源自数学分析习题的高考数学题​zhuanlan.zhihu.com

回到原题。本题就是

的特殊情况,只需要照这个算法去做就行了。问题的关键在于找到一个合适的
出来。容易想到,
,那么就直接令
就行了,然后恭喜我迎来了又一个 runtime error:

63437667c5782cc32eeef7705e7fb5bc.png

那么不妨换个思路。注意到熟知的基本不等式:

,如果令
,容易注意到这个时候
肯定是不超过范围的,下面我们来证明:

注意到:

,因此
时是成立的,显然
也成立,那么就证完了。

另外,由于我们要的条件只需要正整数,那么终止条件可以写的更随意一些,就是迭代前后的整数部分不变。因此我们可以写出以下代码:

class Solution {
public:int mySqrt(int x){double y = x/2+1;while ( int(y) - int(0.5*y + x/(2*y)) > 0){y = 0.5*y+x/(2*y);}return y;}
};

a27c8a2170bbfd93e439dd9709b6f78c.png

根据数值分析理论,这个迭代过程是二阶收敛的,意味着比线性收敛要快很多,具体证明参考上述高考题分析链接。

EOF。

http://www.lbrq.cn/news/1238329.html

相关文章:

  • 北京网站制作公司招聘信息/全球搜官网
  • 如何用css做网站/工厂管理培训课程
  • wordpress 蓝色主题/百度seo发帖推广
  • 奉化建设网站/推广普通话演讲稿
  • 深圳建设网站上市/营销推广工作内容
  • 网站建设与管理的现状/百度首页排名优化平台
  • 网站开发参考文献期刊/google广告投放
  • wordpress add_action/武汉排名seo公司
  • 大型集团网站建设/企业网站设计规范
  • 许昌做网站公司报价/域名ip查询入口
  • 青岛做网站建网站/站长统计幸福宝2022年排行榜
  • 网站建设及维护业务服务合同/搜索词分析
  • 安宁网站建设 熊掌/怎么理解搜索引擎优化
  • 河北网络推广/大连seo外包平台
  • 建设淘宝网站需要多少钱/百度营销中心
  • 南京做网站多少钱/有效获客的六大渠道
  • 海口网站运营托管咨询/软文投放平台有哪些
  • 罗岗网站建设公司/长沙靠谱的关键词优化
  • 网站开发类毕业设计/seoapp推广
  • 网站制作学校找哪家/有利于seo优化的是
  • 做建材哪个网站平台好/百度大数据
  • java社交网站开发/网站收录查询爱站
  • 网站开发培训流程/网站建设费用明细表
  • wordpress导航仿制/安卓系统优化app
  • 广东省高水平建设专业网站/关键词指数查询工具
  • 企业年金的作用及意义/试分析网站推广和优化的原因
  • 网站建设需要多钱/网站流量分析
  • 互动网站欣赏/百度怎么投放自己的广告
  • 国内优秀设计网站/网站建设的推广渠道
  • 网站推广应该怎么做/什么叫口碑营销
  • 2025年EAAI SCI1区TOP,森林救援调度与路径规划:一种新型蚁群优化算法应用,深度解析+性能实测
  • 使用DrissionPage实现xhs笔记自动翻页并爬取笔记视频、图片
  • ubuntu24.04安装selenium、chrome、chromedriver
  • ADB 查看 CPU 信息、查看内存信息、查看硬盘信息
  • Day25-对称二叉树-
  • Qt 槽函数被执行多次,并且使用Qt::UniqueConnection无效【已解决】