求助:两道算法!谢谢

xmlcm521 2008-07-11 08:45:22
1、在用分治法求两个n位大整数时,将u和v都分割成长度为n/3位的3段。证明可以用5次n/3位整数的乘法求得uv的值。按此思想设计一个求两个大整数乘积的分治算法,并分析算法的复杂性。

2、对上述整数u,去掉其中k个数字后(k≤n),剩下的数字按原次序排列组成一个新的正整数。对于给定的u和k,设计并实现一个贪心算法找出剩下数字组成的新数最小的删数方案。


如果可以的话,请尽量加上详细解释和说明
...全文
110 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
(AO@@+B@+C)(D@@+E@+F) ==> (A@@+B@+C)(D@@+E@+F)
  • 打赏
  • 举报
回复
1.
(AO@@+B@+C)(D@@+E@+F)
=AD@@@@+(AE+BD)@@@+(AF+BE+CD)@@+(BF+CE)@+CF
我们换一下表达形式,令:
AE+BD=(A+B)(D+E)-AD-BE
BF+CE=(B+C)(E+F)-BE-CF
AF+BE+CD=(A+B+C)(D+E+F)-(A+B)(D+E)-(B+C)(E+F)+2BE
这样整个只要计算AD、BE、CF、(A+B)(D+E)、(B+C)(E+F)、(A+B+C)(D+E+F)共6次n/3位乘法就可以了。
离你的5次乘法还有差距,也许还有更好的分解方法。
更常见的大数相乘分治算法是分成长度为n/2的两段,然后用3次n/2位的乘法。

2.贪心策略就是要高位数字尽可能的大。
1) 在1~k+1范围内找一个最大的数字(如果有多个,就取最左面的那个),假设为第T1位,以此来作为新数字的最高位;
2) 在T1+1~k+2范围内找一个最大数字,假设为第T2位,以此来作为新数字的第二高位;
......
总之遵循一个策略,高位数字越大越好。
这是记录的保留哪些数字,剩下的全是要删掉的。
xmlcm521 2008-07-11
  • 打赏
  • 举报
回复
附加一句:java语言实现

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧