社区
新手乐园
帖子详情
一个很淫荡的编程练习
dxcnjupt
2007-04-15 02:17:05
输入一个自然数N,求一个最小的,由0,1组成的,可以整除N的十进制数。
最优化的结果非常之BT。
先缩小一下思路。
假设输入N位数,结果是M位数。
求N的整数倍,然后判断是否符合条件,平均需要10的(M-N)次搜索。
生成二叉树,遍历所有0,1组成的数,平均需要2的(M-N+1)次搜索,服从正态分布。
所以最优化的算法,其实是二叉树的一个广度优先遍历。
关键的问题在于最优化的二叉树实现和遍历方法。
...全文
811
5
打赏
收藏
一个很淫荡的编程练习
输入一个自然数N,求一个最小的,由0,1组成的,可以整除N的十进制数。 最优化的结果非常之BT。 先缩小一下思路。 假设输入N位数,结果是M位数。 求N的整数倍,然后判断是否符合条件,平均需要10的(M-N)次搜索。 生成二叉树,遍历所有0,1组成的数,平均需要2的(M-N+1)次搜索,服从正态分布。 所以最优化的算法,其实是二叉树的一个广度优先遍历。 关键的问题在于最优化的二叉树实现和遍历方法。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dxcnjupt
2007-04-17
打赏
举报
回复
标题出错了,应该严肃一点的
算了
这是我自己的算法,欢迎拍砖
unsigned long Tree = 0;
while(Tree != 0xffffffff)
{
Tree++
//树遍历过程中的状态迁移,省略
......
......
}
证明如下;
任取树中的一小片,在树头,树尾或者中间都可
n-2层 1
n-1层 0 1
n层 0 1 0 1
当遍历路径穿过其中时,
假设当前状态是100。
则当遍历路径改变时,第n层0->1,其余不变
假设当前状态是101,
则当遍历路径改变时,第n层1->0,其余不变
结论:当第n层改变时,若由0->1,则上层不变;若由1->0,则上层改变。
所以,只要保存下这个二叉树每一层所处的状态,就可以通过状态迁移实现树的遍历。保存一个X层的二叉树,只需要保存X个状态。又因为每个状态只有0,1两种情况,所以只需要1个变量就可以保存下32层的二叉树。
通过累加进行遍历的证明:
根据数学归纳法,只要两种方法初始状态一样,变化规则一样,那么它们的所有状态都是一样的。
由简单的思考可知,二进制数累加1遵循的规则,和题目中的二叉树广度优先遍历规则是一样的,所以我们可以用二进制数的累加来模拟这颗树的遍历。
猪小烧
2007-04-16
打赏
举报
回复
?????????????
mLee79
2007-04-16
打赏
举报
回复
标题很YD,留个名先 ..
dxcnjupt
2007-04-16
打赏
举报
回复
此帖是我开,此树是我载,欲从此处过,留下买路钱
麻烦回帖的各位写下算法
实现是很简单的,高效是很苦难的
不想低调
2007-04-15
打赏
举报
回复
哦,mark
伴我成长的
编程
书
一、 这篇文章是应之前在微博上爆过的下个周末某出版社的线下活动而写的。回顾我和C++在这个世纪的第二个春天开始发生过的种种事情,我发现我并不是用
一个
正常的方法来学会如何正常使用C++的。我的C++学习伴随着很多其他流行或者不流行的语言。现在手中掌握的很多
淫荡
的技巧正是因为学习了很多
编程
语言的缘故,不过这并不妨碍我正常地使用C++来在合理的时间内完成我的目标。 学习C++是
一个
艰难的过程
伴随我成长的
编程
书
一、 这篇文章是应之前在微博上爆过的下个周末某出版社的线下活动而写的。回顾我和C++在这个世纪的第二个春天开始发生过的种种事情,我发现我并不是用
一个
正常的方法来学会如何正常使用C++的。我的C++学习伴随着很多其他流行或者不流行的语言。现在手中掌握的很多
淫荡
的技巧正是因为学习了很多
编程
语言的缘故,不过这并不妨碍我正常地使用C++来在合理的时间内完成我的目标。 学习C++是
一个
艰难的过程。如果从
伴随我成长的
编程
书,赶紧收藏!!
一、 这篇文章是应之前在微博上爆过的下个周末某出版社的线下活动而写的。回顾我和C++在这个世纪的第二个春天开始发生过的种种事情,我发现我并不是用
一个
正常的方法来学会如何正常使用C++的。我的C++学习伴随着很多其他流行或者不流行的语言。现在手中掌握的很多
淫荡
的技巧正是因为学习了很多
编程
语言的缘故,不过这并不妨碍我正常地使用C++来在合理的时间内完成我的目标。 学习C++是
一个
艰难的过程。如果从我第一次看C++的书算起,现在已经过了11年了。一开始的动机也是很不靠谱的。刚开始我很喜欢用VB6来开发游戏,但
陈梓瀚:伴随我成长的
编程
书
来源:陈梓瀚的博客(@GeniusVczh) 一、 这篇文章是应之前在微博上爆过的下个周末某出版社的线下活动而写的。回顾我和C++在这个世纪的第二个春天开始发生过的种种事情,我发现我并不是用
一个
正常的方法来学会如何正常使用C++的。我的C++学习伴随着很多其他流行或者不流行的语言。现在手中掌握的很多
淫荡
的技巧正是因为学习了很多
编程
语言的缘故,不过这并不妨碍我正常地使用C++来在合理的时间内
My Java 总结
一、面向对象的
编程
语言的特征 面向对象的
编程
语言有封装、继承 、抽象、多态等4个主要的特征。 1封装:封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象的
编程
语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。面向对象的封装就是把描述
一个
对象的属性和行为的代码封装在
一个
“模块
新手乐园
33,321
社区成员
41,774
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章