| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3905 人关注过本帖
标题:关于动态分配+算法
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
还有,既然LZ知道空间复杂度是2^26,那么自然会想到,不要保存已经算出的值,而是马上输出、以上的代所有码,都是一得出一个值,就马上输出的。你想想看,2^26将近70M的内存了。就算是动态分配估计也有点够呛。因为一般的堆并没有这么多,如果要分配这样大的内存,在Win32下需要进行虚拟页分配。
当然,malloc其实还是可以分配这么多的。但是,一则会很慢,二则明明可以想办法降低空间损耗的,何必非要消耗内存呢……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-06 06:30
lnhaing
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2008-1-30
收藏
得分:0 
今天一大早就打开帖子!昨天研究大家代码很晚!谢谢各位!
koolism说出提问者有时候的心声!(*^__^*) 嘻嘻……!
也谢谢StarWing83,解决了我的问题!

我来自偶然! bitter C
2008-05-06 07:35
koolism
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-3-22
收藏
得分:0 
[bo]以下是引用 [un]StarWing83[/un] 在 2008-5-6 06:10 的发言:[/bo]

LS的,服了你了。我们就是在讨论这道题的算法嘛。
LZ的代码……你自己看吧,别的不说,第一眼就可以发现,malloc了几次?free了几次??
我们讨论的算法,二叉树一种,递归一种,计数一种,二进制三种,二分法一种,给出了一共七种方法解决这道 ...



提问者问你这道题的算法了吗?请看他的问题:

“我用固态分配数组空间,可以实现的(算法应该正确),但要p[2^26]这么大的空间,浪费!
用动态分配(代码如上),怎么输出乱码?怎么回事????
求高人!”

你说:“LZ的代码……你自己看吧,别的不说,第一眼就可以发现,malloc了几次?free了几次??”
可是楼主不发现啊?所以我们应该引导楼主去发现、去解决,而且这是他自己写的代码,肯定也花
了心思,并且他认为“我用固态分配数组空间,可以实现的(算法应该正确)”,如果他自己写出
代码能解决问题,心里肯定会有成就感,不管他的代码有多繁琐,然后就是和你们那些“优化”的
代码算法作比较并从中汲取更好的算法。
如果一来就拿你们的代码,而他自己写的代码问题没解决,心里肯定有点失落感,这个我相信很多人
都有这样的感受...
   你也不用动不动就服了谁谁谁?你就这么容易服人吗?
   我只是提出我的一点建议,我图什么??难道这个论坛上的人都不能听别人的一点建议吗?
   我不牛,你们很牛,我写不出你们那样好的代码。所以说我是初学者,我只是提出一点作为
初学者的心声,我们初学者写出的即便是繁琐的代码只要能解决问题,我们心里是很高兴的...

不知道痛苦,不知道饥饿,不知道休息,只知道勇往无前...
2008-05-06 08:38
koolism
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-3-22
收藏
得分:0 
[bo]以下是引用 [un]lnhaing[/un] 在 2008-5-5 22:25 的发言:[/bo]

似乎回来晚了!
各位 程序写的很精妙!谢谢!
先学习了!
但是 好像 没有解决我的问题!为什么我程序不行!
继续求————————??


...大家来说说想法吧,要是大家都觉得我提出的建议不好或者误人子弟,我向你们道歉!!

[[it] 本帖最后由 koolism 于 2008-5-6 08:53 编辑 [/it]]

不知道痛苦,不知道饥饿,不知道休息,只知道勇往无前...
2008-05-06 08:46
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
问题是光循环的话很难解决..而且大家一起进步..谢谢楼主提供的问题...看懂别人的程序也可以提高的...

学习需要安静。。海盗要重新来过。。
2008-05-06 08:53
koolism
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-3-22
收藏
得分:0 
呵呵,可是所有回复当中没有一个于提问者的问题有关,他的程序哪里错了?为什么
输出是乱码?没有人告诉他...
所以“但是 好像 没有解决我的问题!为什么我程序不行!
      继续求————————?? ”
"看懂别人的程序也可以提高的"这是肯定的!

不知道痛苦,不知道饥饿,不知道休息,只知道勇往无前...
2008-05-06 09:06
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
输出是乱码,这点真的不知道,程序的风格整体很乱……额……我看了五分钟,实在没看出来名堂……
唯一比较明显的错误是内存泄露,上面已经说了……
只是稍微看出来,LZ似乎是想根据“两个相同字母的中心是同样的字母”这个规律来……
非要去整理楼主的代码的话,建议楼主
1 先画出流程图
2 确保分配一次,释放一次,即不要将malloc放到循环里面去。
3 仔细思考,自己的方法依赖的原理是什么,能不能用自然语言描述出来,描述的过程是不是流程图所表示的过程。
这样自己分析,应该知道错误在哪儿了。看别人的代码总是有点不太明白的。还是自己写的最清晰。所以也需要自己去分析,这一点,别人很难帮上忙(因为大家都在学习中嘛,呵呵)
建议就这么多。还是希望看看大家给出的算法,然后了解思想(代码写的都很清晰啦)如果不懂可以回帖问。
To LS 你表达观点是你的事情,当然也有道理,以后我会注意的。不过当然我也有坚持自己做法的自由咯,嘿嘿~~~不管怎么说,看楼主怎么处理吧……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-06 10:33
lnhaing
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2008-1-30
收藏
得分:0 
再次感谢StarWing83!
看了大家的代码,我的代码不算程序代码了!敲入Z,CPU达到100%,想想我的代码!汗
想不到大家这么热情,各种思路百花齐放,我想大家最希望就是这种效果!我以后也多提供这些题目,多多向各位请教!讨论推动算法进步!
最后还是问个题目:
燕子那个代码是根据什么思路来的:
程序代码:
 while (d<=n)
        {
            putchar('A'+d);
            ++str[0];
            for (d=0; str[d]>1; ++d)
            {
                ++str[d+1];
                str[d] = 0;
            }
        }

在纸上画了一大推,貌似明白,又不~~~

我来自偶然! bitter C
2008-05-06 12:26
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
呵呵,以上其实是模拟加法

[color=white]
2008-05-06 12:32
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
和我的差不多..模拟二进制数的进位..
1111111111111   d=0  A
2111111111111   d=1  B
1211111111111   d=0  A
2211111111111   d=2  C
0021111111111   d=0  A

[[it] 本帖最后由 sunkaidong 于 2008-5-6 12:42 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-05-06 12:38
快速回复:关于动态分配+算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.079762 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved