c++ - 有效地找到康托尔有理数集的第 N 项
问题描述
George Cantor 证明了一组有理数是可数的。可以使用此图1中所示的方法找到它的第 n 项。我在这里找到了解决方案2。但是对于大数字来说它非常慢,因为我的 n 可以达到 10^18。有什么办法可以快速做到这一点?
解决方案
您面临的问题是算法问题。
如果您尝试使用 aden
和num
变量进行导航,则需要采取10^18
措施。你的程序永远不会完成。(嗯,它可能,但我们不会在那里了)
您可以做的第一个优化是循环对角线。您只需要大致迭代10^9
对角线。这在您可以在 PC 上计算的范围内。对于每个对角线,计算长度,检查它是否在您正在寻找的范围内,如果不是,则转到下一个对角线。
第二个优化是封闭形式的解决方案。请参阅评论中的 .pdf。
推荐阅读
- c# - 从 IServerChannelSink 检索 IMessage 目标实例
- django - 使用 celery 和 django 发送与用户相关的预定电子邮件?
- php - 将日期格式更改为本地语言
- linux-kernel - ARCH X86:如何从内核映射中进行高级配置和电源接口映射 (ACPI)
- javascript - 节点 mocha/chai 测试看文件夹是否存在
- oop - 工厂方法实现之间有什么区别?
- oracle - 为什么在 oracle 中有数百万条记录的表上查询速度很慢,尽管它没有变化?
- view - SwiftUI 文本字段默认值
- excel - 如何在VBA中的特定时间清理列
- javascript - 闭包和函数属性