当前位置: 首页 > 知识库问答 >
问题:

基转换的计算复杂性

尤飞尘
2023-03-14

将非常大的n位数字转换为十进制表示的复杂性是什么?

我的想法是,重复整数除法的基本算法,取余数得到每个数字,将具有O(M(n)log n)复杂性,其中M(n)是乘法算法的复杂性;然而,除法不是2个n位数字之间的除法,而是1个n位数字和一个小常量之间的除法,因此在我看来,复杂度可能更小。

共有1个答案

商经业
2023-03-14

如您所述,朴素的基转换需要二次时间;您可以通过smallint除法来处理n个bigint,其中大多数除法的时间与n位bigint的大小成线性关系。

但是,您可以在O(M(n)log(n))时间内进行基数转换,方法是选取目标基数的幂,该幂大致等于要转换的数字的平方根,用它进行除法和余数(可以通过牛顿方法在O(M(n))时间内完成),然后在两半上递归。

 类似资料:
  • 在最近的一次测试中,我们得到了一个函数来计算未排序的ArrayList中出现了多少个double(不是原语double,而是一个项目出现了两次)。 我正确地确定了Big O复杂度为O(N^2),但由于我错误地确定了全部复杂度,因此只获得了部分学分。函数如下: 在他刚刚发布的考试解决方案中,他给出了这样的解释: 输入集合中有N个项,该方法通过一个缩减步骤反复调用自己,该步骤生成一个新索引N次,直到达

  • 问题内容: 我正在尝试清除一些有关TreeSet操作中的复杂性的内容。在javadoc上说: “此实现为基本操作(添加,删除和包含)提供了保证的log(n)时间成本。” 到目前为止,一切都很好。我的问题是addAll(),removeAll()等会发生什么。Set的javadoc在这里说: “如果指定的集合也是一个集合,则addAll操作会有效地修改此集合,以使其值为两个集合的并集。” 它只是在解

  • 我已经通过谷歌和堆栈溢出搜索,但我没有找到一个关于如何计算时间复杂度的清晰而直接的解释。 说代码像下面这样简单: 说一个像下面这样的循环: 这将只执行一次。 时间实际上被计算为而不是声明。

  • 我在考虑如何正确计算这个函数的时间复杂度: 我假设它是 O(n),其中 n 是列表的长度。我们的 while 循环是 O(n),for 循环也是 O(n), 这意味着我们得到了 2*O(n),等于 O(n)。 我说的对吗?

  • 我最近了解了杂耍算法如何在线性时间内旋转数组 时间复杂度如何线性???

  • 每个顶点可以连接到(V-1)个顶点,因此每个顶点的相邻边数是V-1。假设E代表连接到每个顶点的V-1条边。 查找和更新最小堆中每个相邻顶点的权重为O(log(V))+O(1)或 因此,从上面的步骤1和步骤2,更新顶点的所有相邻顶点的时间复杂度是e*(logV)。或. 因此所有V顶点的时间复杂度为V*(E*logv),即。 但Dijkstra算法的时间复杂度为O(ElogV)。为什么?