寻找最接近的斐波那契数列

2024-04-16

我正在尝试解决一个更大的问题,并且我认为该程序的重​​要部分花费在低效的计算上。

我需要计算给定数字 N 的区间 [P, Q],其中 P 是 = 到 N 的最小斐波那契数。

目前,我正在使用地图来记录斐波那契数的值。 查询通常涉及搜索最多 N 的所有斐波那契数,并且它的时间效率不是很高,因为它涉及大量的比较。

这种类型的查询在我的程序中会经常出现,我对改进查找的方法很感兴趣,最好是具有亚线性复杂度。


斐波那契数列由比奈公式给出

F(n) = ( phi^n - (1-phi)^n ) / \sqrt{5}

where phi是黄金比例,

phi = (1 + \sqrt{5}) / 2. 

这可以直接实现(Python 示例):

<<fibonacci_binet.py>>=
phi = (1 + 5**0.5) / 2

def fib(n):
    return int(round((phi**n - (1-phi)**n) / 5**0.5))

然而,由于浮点舍入误差,这只会给出正确的结果n < 70.

比奈公式可以通过忽略来反转(1-phi)^n项,对于大范围消失n。因此,我们可以定义逆斐波那契函数,当给定F(n),返回n(忽略这一点F(1) = F(2)):

<<fibonacci_binet.py>>=
from math import log

def fibinv(f):
    if f < 2:
        return f
    return int(round(log(f * 5**0.5) / log(phi)))

这里使用舍入对我们有利:它消除了我们对比奈公式的修改所引入的误差。事实上,当给出任何可以作为精确整数存储在计算机内存中的斐波那契数时,该函数将返回正确的答案。另一方面,它并不验证给定的数字实际上是斐波那契数;输入一个大的斐波那契数或任何接近它的数都会得到相同的结果。因此,您可以使用这个想法来找到最接近给定数字的斐波那契数。

这个想法是应用逆斐波那契图来找到N and M,两边最接近的两个斐波那契数,然后使用直接斐波那契图来计算P = F(N) and Q = F(M)。这涉及更多的计算,但更少的搜索。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻找最接近的斐波那契数列 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 核心数据对多关系在将对象添加到父实体时创建重复项

    我是 Core Data 和 Objective c 的新手 我正在开发一个项目 从 Web 服务获取 JSON 数据并将其与核心数据同步 我成功地遵循了这个tutorial http www raywenderlich com 15916
  • 用 Java JNA 编写的关键监听器。防止多次回调

    我使用以下代码来监听全局按键事件 Win32HookManager java import com sun jna Pointer import com sun jna platform win32 Kernel32 import com
  • 使用地图计算文本文件中出现的次数

    下面的代码将计算每个字符的出现次数 如果我在文本文件中有 abc 输出将是 a 1 b 1 c 1 我在许多网站上读到 for 循环将花费大量时间 最好使用哈希映射来实现相同的效果 你们中的任何人都可以帮我如何转换这个实现哈希映射的程序吗
  • 对c#的async/await控制流程感到困惑

    我正在学习 async await 并且对 wait 的解释感到困惑MSDN https learn microsoft com en us dotnet csharp language reference keywords await w
  • SSH 连接超时

    我正在尝试使用以下命令建立 SSH 连接golang org x crypto ssh我有点惊讶我似乎不知道如何超时NewSession函数 实际上我没有看到任何超时的方法 当我尝试连接到有问题的服务器时 它会挂起很长时间 我写了一些可以使
  • 您没有浏览服务器的权限?

    我将 kcfinder 与 ckeditor 一起使用 改变的同时disabled to false在 kcfinder 的配置文件中没有问题 但是用以下命令覆盖它 SESSION KCFINDER array disabled gt fa
  • EF Core 中的 AddRange 和 AddRangeAsync 有什么区别

    我正在使用 EF Core 插入条目 我注意到当我调试这行代码时context MyEntityDbSet AddRangeAsync records 加载需要一秒钟 而不是context MyEntityDbset AddRange re
  • 列族 ID 不匹配(发现为 cebcc380-72d4-11e7-9a6b-bd620b945799;预期为 c05d6970-72d4-11e7-9a6b-bd620b945799)

    我该如何解决这个错误列族 ID 不匹配 发现为 cebcc380 72d4 11e7 9a6b bd620b945799 预期为 c05d6970 72d4 11e7 9a6b bd620b945799 Caused by java uti
  • 按多个单词的主题标签拆分术语

    我正在尝试拆分包含多个单词的主题标签的术语 例如 I am great 或 awesome dayofmylife 那么我正在寻找的输出是 I am great awesome day of my life 我所能实现的就是 gt gt g
  • 如何使用java访问SVN中的文件

    我需要你的帮助 我想使用 java 代码从 SVN 打开一个文件 任何人都可以告诉我访问文件的流程 或者任何人都可以向我发送该文件的示例代码 任何人都可以向我发送使用java通过HTML访问svn的示例代码吗 你需要看看SVNKIT Jav
  • CancellationToken 不会在 Azure Functions 中触发

    我有这个简单的 Azure 函数 public static class MyCounter public static int timerRound 0 public static bool isFirst true FunctionNa
  • 如何将我的 app.yaml 迁移到 2.7?

    我正在将我的 gae 应用程序迁移到 python 2 7 这是我的新 app yaml application webfaze version main runtime python27 api version 1 threadsafe
  • 如何修复 ReactforwardRef(Menu) Material UI?

    我创建了非常简单的自定义组件MuiMenu and MuiMenuItem 但是当我尝试显示这些组件时 我看到一个错误 如下所示 Function components cannot be given refs Attempts to ac
  • 如何对歌曲中的专辑进行排序?

    所以我的问题是 当我尝试对专辑进行排序时 专辑标题和专辑艺术是错误的 我尝试对专辑 ID 进行排序 但这并不能解决问题 因为专辑 ID 显然与对艺术进行排序无关 当我忽略排序时 一切都是正确的 但是当我尝试对它们进行排序时 专辑名称与专辑封
  • 更改表的列名后,所有单元和功能测试均出错

    我重命名了表的 3 列 突然我的所有单元和功能测试都抛出了相同的错误 即它们找不到具有旧列名称的表 即使对与我修改的表无关的模型的测试也会抛出相同的错误 Example 54 Error test should show user User
  • 即时编译与提前编译相比有何优点?

    我最近一直在思考这个问题 在我看来 最大的优势是JIT编译或多或少应该归因于中间格式 而抖动本身并不是生成代码的好方法 那么主要就是这些pro JIT我经常听到的编译参数 即时编译可实现更大的可移植性 这不是中间格式的原因吗 我的意思是 一
  • 使用 CSS/jQuery 的响应式字体大小

    我想在 div 内创建响应文本 I tried jquery 文本填充 https github com jquery textfill jquery textfill and FlowType http simplefocus com f
  • 有没有办法检测手机和手持设备上的3G和2G连接速度?

    有没有办法检测手机和手持设备上的 3G 和 2G 连接 就像如果我想在用户使用 3G 时提供高端网站 如果用户使用 2G 则提供高度优化的版本 在 Android 2 2 中 有一个 JS 对象可以实现这一点 您可以根据连接类型编写一个供
  • 如何在 PHP 中将字符串的第一个字符变为小写?

    我无法使用斯特洛尔 https www php net manual en function strtoupper php因为它会影响所有角色 我应该使用某种正则表达式吗 我收到一个字符串 它是产品代码 我想在不同的地方使用此产品代码作为搜
  • 寻找最接近的斐波那契数列

    我正在尝试解决一个更大的问题 并且我认为该程序的重 要部分花费在低效的计算上 我需要计算给定数字 N 的区间 P Q 其中 P 是 到 N 的最小斐波那契数 目前 我正在使用地图来记录斐波那契数的值 查询通常涉及搜索最多 N 的所有斐波那契