在C++中,除了使用<cmath>中的loglog2函数求对数,也可以通过递推求出所有可能用到的⌊log⁡2i⌋,i∈[1,n]\lfloor \log_2i\rfloor, i\in[1, n]log2i,i[1,n]

证明:⌊log⁡2i⌋=⌊log⁡2⌊i2⌋⌋+1\lfloor \log_2i \rfloor=\lfloor \log_2 \lfloor \frac{i}{2} \rfloor \rfloor+1log2i=log22i⌋⌋+1
由于log⁡2i=log⁡2(i2⋅2)=log⁡2i2+log⁡22=log⁡2i2+1\log_2i=\log_2(\frac{i}{2}\cdot 2)=\log_2\frac{i}{2}+\log_22=\log_2\frac{i}{2}+1log2i=log2(2i2)=log22i+log22=log22i+1
等号两边都向下取整,得:
⌊log⁡2i⌋=⌊log⁡2i2⌋+1\lfloor \log_2i \rfloor =\lfloor \log_2\frac{i}{2} \rfloor+1log2i=log22i+1

  • 如果iii是偶数,则i2=⌊i2⌋\frac{i}{2}=\lfloor \frac{i}{2} \rfloor2i=2i,因此有
    ⌊log⁡2i⌋=⌊log⁡2i2⌋+1=⌊log⁡2⌊i2⌋⌋+1\lfloor \log_2i \rfloor =\lfloor \log_2\frac{i}{2} \rfloor+1 = \lfloor \log_2\lfloor \frac{i}{2} \rfloor \rfloor+1log2i=log22i+1=log22i⌋⌋+1
  • 如果iii是奇数,则i−12=⌊i2⌋\frac{i-1}{2}=\lfloor \frac{i}{2} \rfloor2i1=2i
    ⌊log⁡2i−12⌋=x\lfloor \log_2\frac{i-1}{2} \rfloor =xlog22i1=x
    那么x≤log⁡2i−12<x+1x\le \log_2\frac{i-1}{2}<x+1xlog22i1<x+1
    2x≤i−12<2x+12^x\le \frac{i-1}{2}<2^{x+1}2x2i1<2x+1
    由于i−12\frac{i-1}{2}2i1是整数,2x+12^{x+1}2x+1也是整数,较小的整数加上12\frac{1}{2}21后,一定小于较大的整数。
    因此有2x≤i−12<i−12+12=i2<2x+12^x\le \frac{i-1}{2}<\frac{i-1}{2}+\frac{1}{2}=\frac{i}{2}<2^{x+1}2x2i1<2i1+21=2i<2x+1
    所以x≤log⁡2i2<x+1x\le \log_2{\frac{i}{2}}<x+1xlog22i<x+1
    因此⌊log⁡2i2⌋=x=⌊log⁡2i−12⌋=⌊log⁡2⌊i2⌋⌋\lfloor \log_2{\frac{i}{2}} \rfloor =x= \lfloor \log_2\frac{i-1}{2} \rfloor= \lfloor \log_2\lfloor \frac{i}{2}\rfloor \rfloorlog22i=x=log22i1=log22i⌋⌋
    因此⌊log⁡2i⌋=⌊log⁡2i2⌋+1=⌊log⁡2⌊i2⌋⌋+1\lfloor \log_2i \rfloor =\lfloor \log_2\frac{i}{2} \rfloor+1 = \lfloor \log_2\lfloor \frac{i}{2} \rfloor \rfloor+1log2i=log22i+1=log22i⌋⌋+1
    证毕。

已知⌊log⁡21⌋=0\lfloor \log_21 \rfloor=0log21=0,结合递推式⌊log⁡2i⌋=⌊log⁡2⌊i2⌋⌋+1\lfloor \log_2i \rfloor=\lfloor \log_2 \lfloor \frac{i}{2} \rfloor \rfloor+1log2i=log22i⌋⌋+1即可递推得到所有可能用到的⌊log⁡2i⌋,i∈[1,n]\lfloor \log_2i\rfloor, i\in[1, n]log2i,i[1,n]

代码如下:

const int N = 1000005;//N设为n可能达到的最大值
int lg[N];//lg[i]:floor(log_2{i})
void initLg(int n)//生成lg[1]~lg[n]
{//全局变量初值为0,已经设好lg[1] = 0for(int i = 2; i <= n; ++i)lg[i] = lg[i/2]+1;
}

预处理lg数组的时间复杂度为O(n)O(n)O(n)

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

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

相关文章

【AI智能体】智能音视频-搭建可视化智能体

可视化智能体是语音小伴侣智能体的升级版&#xff0c;支持语音与视频的双模态交互。本文详细介绍了音视频交互的实现原理、智能体搭建方法及效果测试&#xff0c;帮助开发者快速构建支持音视频交互的智能体。 应用场景 可视化智能体适用于多种场景&#xff0c;举例如下&#…

Sensoglove推出新一代外骨骼力反馈手套:主动力反馈+亚毫米级手指追踪,助力机器人操控与虚拟仿真

在工业自动化、虚拟现实和医疗康复等领域&#xff0c;高精度手部交互设备的需求日益增长。Sensoglove推出的Rembrandt外骨骼力反馈手套&#xff0c;结合主动力反馈、触觉反馈与亚毫米级追踪技术&#xff0c;为用户提供更自然、更安全的操作体验。Sensoglove外骨骼力反馈手套核心…

AutoMapper入门

在 ASP.NET Core 开发中&#xff0c;我们经常需要在不同层之间传递数据&#xff1a;比如从数据库模型&#xff08;Entity&#xff09;转换到 DTO&#xff0c;再从 DTO 转换为前端视图模型。这些转换代码大量重复、冗长、容易出错。为了解决这个问题&#xff0c;AutoMapper 诞生…

PyTorch武侠演义 第一卷:初入江湖 第1章:武林新秀遇Tensor - 张量基础

第一卷&#xff1a;初入江湖 第1章&#xff1a;武林新秀遇Tensor - 张量基础晨起码农村 鸡鸣三声&#xff0c;林小码已经收拾好了行囊。他最后看了眼床头那本翻旧的《Python入门心法》&#xff0c;轻轻抚平卷起的书角。 "小码&#xff0c;路上小心。"父亲将一把青铜匕…

Python进阶(4):类与面向对象程序设计

面向对象OOPOOP:Object Oriented Programming,面向对象编程,面向对象中的对象(Obiect)&#xff0c;通常是指客观世界中存在的对象&#xff0c;这个对象具有唯一性&#xff0c;对象之间各不相同&#xff0c;各有各的特点&#xff0c;每个对象都有自己的运动规律和内部状态;对象与…

如何在 Shopify 中创建退货标签

退货是电商运营中不可避免的一环&#xff0c;而一个顺畅、透明的退货流程&#xff0c;不仅能减少客户投诉&#xff0c;也有助于提升顾客对品牌的信任与忠诚度。Shopify 虽然没有内建退货标签自动生成功能&#xff0c;但通过合理设置与外部工具整合&#xff0c;你完全可以打造一…

I2C设备寄存器读取调试方法

1、查看I2C挂载设备 2、读取i2C设备所有寄存器 3、读取i2c设备的某个寄存器 4、向i2C设备某个寄存器写入一个值1、查看

K8S的Helm包管理器

一、背景 官网: https://helm.sh/ 我们针对K8S环境中&#xff0c;部署对应的应用&#xff0c;无外乎就是编写一堆yaml资源清单文件. 资源清单、依赖性少的时候&#xff0c;可以直接手动维护。但是&#xff0c;随着资源清单越来越复杂&#xff0c;越来越多&#xff0c;不同的环…

多模态数据处理新趋势:阿里云ODPS技术栈深度解析与未来展望

多模态数据处理新趋势&#xff1a;阿里云ODPS技术栈深度解析与未来展望 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈…

AI数据分析仪设计原理图:RapidIO信号接入 平板AI数据分析仪

AI数据分析仪设计原理图&#xff1a;RapidIO信号接入 平板AI数据分析仪 1 、概述 本仪器是一款面向工业控制、新能源、震动测量等业务开发的平板AI数据分析仪。基于 Jetson Orin Nano&#xff08;AI边缘计算&#xff09;、实现RapidIO接口数据接入&#xff0c;进行AI分析。Rap…

人工智能正逐步商品化,而“理解力”才是开发者的真正超能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

玩转ClaudeCode:ClaudeCode安装教程(Windows+Linux+MacOS)

Windows 环境安装 Claude Code 一、安装 WSL 环境 1. 确认 Windows 功能已开启 打开 “控制面板 → 程序 → 启用或关闭 Windows 功能” 勾选 “适用于 Linux 的 Windows 子系统” 和 “虚拟机平台” 点“确定”后重启电脑。 开机后&#xff0c;管理员模式打开 Terminal…

PyTorch多层感知机(MLP)模型构建与MNIST分类训练

冲冲冲&#x1f60a; here&#x1f60a; 文章目录PyTorch多层感知机模型构建与MNIST分类训练笔记&#x1f3af; 1. 任务概述⚙️ 2. 环境设置2.1 导入必要库2.2 GPU配置&#x1f9e0; 3. 模型构建3.1 模型定义关键点3.2 损失函数选择3.3 模型初始化与设备选择&#x1f527; 4. …

android tabLayout 切换fragment fragment生命周期

1、TabLayout 与 Fragment 结合使用的常见方式 通常会使用 FragmentPagerAdapter 或 FragmentStatePagerAdapter 与 ViewPager 配合,再将 TabLayout 与 ViewPager 关联,实现通过 TabLayout 切换 Fragment。 以下是布局文件示例 activity_main.xml: <LinearLayout xmln…

马蹄集 BD202401补给

可怕的战争发生了&#xff0c;小度作为后勤保障工作人员&#xff0c;也要为了保卫国家而努力。现在有 N(1≤N≤)个堡垒需要补给&#xff0c;然而总的预算 B(1≤B≤)是有限的。现在已知第 i 个堡垒需要价值 P(i) 的补给&#xff0c;并且需要 S(i) 的运费。 鉴于小度与供应商之间…

《Llava:Visual Instruction Tuning》论文精读笔记

论文链接&#xff1a;arxiv.org/pdf/2304.08485 参考视频&#xff1a;LLAVA讲解_哔哩哔哩_bilibili [论文速览]LLaVA: Visual Instruction Tuning[2304.08485]_哔哩哔哩_bilibili 标题&#xff1a;Visual Instruction Tuning 视觉指令微调 背景引言 大模型的Instruction…

【DataWhale】快乐学习大模型 | 202507,Task01笔记

引言 我从2016年开始接触matlab看别人做语音识别&#xff0c;再接触tensorflow的神经网络&#xff0c;2017年接触语音合成&#xff0c;2020年做落地的医院手写数字识别。到2020年接触pytorch做了计算机视觉图像分类&#xff0c;到2021年做了目标检测&#xff0c;2022年做了文本…

机器学习中的朴素贝叶斯(Naive Bayes)模型

1. 用实例来理解朴素贝叶斯 下面用具体的数据来演示垃圾邮件 vs 正常邮件的概率计算假设我们有一个小型邮件数据集邮件内容类别&#xff08;垃圾/正常&#xff09;“免费 赢取 大奖”垃圾“免费 参加会议”正常“中奖 点击 链接”垃圾“明天 开会”正常“赢取 免费 礼品”垃圾 …

document.documentElement详解

核心概念定义 它始终指向当前文档的根元素&#xff0c;在 HTML 文档中对应 <html> 标签。与 document.body&#xff08;对应 <body>&#xff09;和 document.head&#xff08;对应 <head>&#xff09;形成层级关系。与 document.body 的区别 <html> &l…

c#进阶之数据结构(动态数组篇)----Queue

1、简介这个是c#封装的队列类型&#xff0c;同栈相反&#xff0c;这个是先进先出&#xff0c;一般用于事件注册&#xff0c;或者数据的按顺序处理&#xff0c;理解为需要排队处理的可以用队列来处理。注意&#xff0c;队列一定是有顺序的&#xff0c;先进确实是会先出&#xff…