多进制数的乘法时间复杂度 O(n)? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
qwertyegg
V2EX    程序员

多进制数的乘法时间复杂度 O(n)?

  •  
  •   qwertyegg 162 天前 1843 次点击
    这是一个创建于 162 天前的主题,其中的信息可能已经有所发展或是发生改变。

    举个,比如 7-5-3 进制数,可以表示 0-104 ,105 个整数

    7-5-3 进制数跟 10 进制数的转换

    0-0-0 表示 0 1-1-1 表示 1 2-2-2 表示 2 3-3-0 表示 3 4-4-1 表示 4 5-0-2 表示 5

    以此类推

    6-4-2 表示 104

    10 进制数转换为 7-5-3 进制数很容易,求余即可。反过来,7-5-3 进制数转换为十进制数可用中国剩余定理算 a-b-c to (a15 + b21 + c*70) mod 105.

    显而易见,7-5-3 进制数的加法:

    a-b-c + x-y-z = (a+x)-(b+y)-(c+z),只需要对每位计算一次,完全不需要考虑进位。当然这个并不是大问题,计算机算加法也是可以同时并行计算每一位,并不是手算那种需要考虑进位的依赖。

    有意思的是乘法:

    a-b-c * x-y-z = (ax) mod 7-(by) mod 5-(c*z) mod 3

    n 位的乘法只需要 O(n),而非小学学的 O(n^2),也比基于 FFT 的 O(nlog n log log n)快

    其中最大的优点是可并行计算,只要计算单元够多,O(1)就能计算出乘法结果而没有进位的依赖.

    7 条回复    2025-05-02 17:33:10 +08:00
    qwertyegg
        1
    qwertyegg  
    OP
       162 天前
    前面一段排版有点问题,

    0-0-0 表示 0

    1-1-1 表示 1

    2-2-2 表示 2

    3-3-0 表示 3

    4-4-1 表示 4

    5-0-2 表示 5
    KeShih
        2
    KeShih  
       162 天前
    时间复杂度是一个渐进的概念,只考虑有限输入规模是没有意义的。只考虑限定输入大小时候,你会自然的把一些和输入规模相关的量当成常数,而得到一个错误的时间复杂度

    目前 n-bit 整数相乘最快的算法时间复杂度是 O(n log n),21 年发表在数学四大上
    "Integer multiplication in time O(n log n)", Annals of Mathematics, 2021
    论文地址: https://annals.math.princeton.edu/2021/193-2/p01
    murmurkerman
        3
    murmurkerman  
       162 天前 via iPhone
    写下你的算法测试下就好了,o(n)不太可能实现。
    msg7086
        4
    msg7086  
       162 天前
    另外提一句,时间复杂度是计算时间增量与输入量增量的关系,不是计算时间与输入量的关系。
    O(n)并不见得会比 O(nlogn)快,只是说 O(n)对于 n 增加的时候,计算时间增加的速度比 O(nlogn)少。
    可能有一种算法,复杂度是 O(n),对于输入位数 10 的计算时间是 100 ,另一种算法,复杂度是 O(nlogn),对于输入位数 10 的计算时间是 10log10 ,后者还是会比前者快。
    woaiwinnie2
        5
    woaiwinnie2  
       161 天前
    这个数值下乘法的性质还不错,但不知道怎样对应的问题可以用上这样的结构,毕竟看起来把它转回 10 进制的 cost 对应 c*70 mod 105 这个运算,这个运算可一点都不便宜
    vvhy
        6
    vvhy  
       161 天前 via Android
    进制转换那一步用到了十进制乘法,估计整个算法比十进制更慢
    另外怎么计算除法
    Ljxtt
        7
    Ljxtt  
       161 天前
    感觉上复杂度应该是 O(nm),其中 n 是进制的基数个数,m 是和基数的位数有关的数(平均?),这里看起来是 O(n) 大概率是因为 7 ,5 ,3 都是 1 位数,当基数的位数上去时,这个数值应该是不可忽视的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2353 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:48 PVG 23:48 LAX 08:48 JFK 11:48
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86