插入管柱的效率

Efficiency of insert in string

本文关键字:效率 插入      更新时间:2023-10-16

我正试图为大于long-long的非常大的整数编写这个自定义加法类。我正在研究的一种方法是将整数保持为字符串,然后将字符转换为其int组件,然后添加每个"列"。我正在考虑的另一种方法是将字符串拆分为多个字符串,每个字符串的大小相当于一个长字符串,然后使用字符串流将其转换为长字符串相加,然后重新组合。

无论如何,我遇到了这样一个事实,加法最容易反向进行,以允许数字的进位。在这种情况下,我想知道字符串的插入方法的效率。似乎因为字符串是一个字符数组,所以所有的字符都必须移到一个字符上。所以它会有所不同,但看起来效率是O(n),其中n是字符串中的字符数。

这是正确的,还是只是一种天真的解释?

编辑:我现在有了我的问题的答案,但我想知道一个相关的主题,将字符串插入流中,然后提取到int中,哪个更有效。或者做10^n*char1+10^n-1*char2…等等?

据我所知,你是对的。String的C++实现将在O(n)时间内执行插入。它将字符串视为字符数组。

对于您的数字实现,为什么不将数字存储为整数数组,并转换为仅用于输出的字符串呢?

std::string的所有实际实现可能都是正确的。在这种情况下,您可能希望反向存储数字(尽管在其他方面可能很笨拙),或者使用类似std::deque<char>的东西。更好的是,使用std::deque<unsigned long long>,这将减少所涉及的操作数量。

当然,为了真正使用,您通常希望使用现有的库,而不是滚动自己的库。