打印

送10分,求最佳算法。

[复制链接]
楼主: 刘前辈
手机看帖
扫描二维码
随时随地手机跟帖
61
不过俺相信,刘老前辈是超一流高手,既然算法2不上台面,您老前辈坚决不用!俺相信刘老前辈一定胸有成足,一定有更好更完美的标准答案~~~

俺菜鸟坐等着学习捡菜,请刘老前辈继续讲课~~~   :P

使用特权

评论回复
62
cecwxf| | 2011-5-6 15:46 | 只看该作者
52# 刘前辈
是编译器的原因,我在VC6.0上运行过这个..用keil等软件编译器已经把此引用转换为char*类型了。虽然两个地址一样的“值”是一样的 但是类型不同造成+1效果是不同的  。
编译器不同

使用特权

评论回复
63
刘前辈|  楼主 | 2011-5-6 15:53 | 只看该作者
暂时贴一条原创,只有一条语句就完成了。开销可是不小,关键是它的教育意义:至少它是算法的一种。LZ的问题之一是“有多少种算法”。创新了一条,可能不实用。却能实验玩一下,学习一个重要概念:结构名是标量,所以可以像 i=SBUF那样同类型之间互相整体拷贝。——这才叫C,一字节一字节的拷贝有点像玩汇编。 有人说刘前辈你太笨了,你应该写成二维数组arr[ ][5];果然真聪明,二维数组能整体拷贝吗?玩一个不笨的我看看。——数组名是矢量不是标量,矢量可谈不上整体拷贝,慢慢按字节一个个地数吧。
         再有,写成结构等于是完成了半个链表,以后若要修改成链表,加上指针部分就成了。

使用特权

评论回复
64
123jj| | 2011-5-6 15:53 | 只看该作者
俺的汇编水平很烂,如用汇编编写这一算法,大致也只能写到 算法2 这一水准,再也优化不了多少了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
刘前辈 + 1
65
刘前辈|  楼主 | 2011-5-6 15:55 | 只看该作者
还有2个标准的,承认是参考书上的。慢慢来吧。

使用特权

评论回复
66
icecut| | 2011-5-6 15:58 | 只看该作者
我就服了你了....
你0结构后面有4组数据.都要前移.可是你15=5*3,留下一组干什么??

我倒是看着像你写了个错算法.还根据错算法的结果去让人找好办法
半点都不实用.我说你搬移后,数组要清零.你看看你结果是不是搬移的第三组{2,4,6},原始数据还在?
你那叫复制,不是移动....你还好意思说我蛙叫,我看不明白能说你吗?

如果你把数组前移都叫算法的话.....小盆友都笑了.

这么多人看不懂你说的.不是别人 的错.就是你没描述明白.我刚开始也看不明白.其实最后明白了你这个垃圾算法用没用.

使用特权

评论回复
67
icecut| | 2011-5-6 16:01 | 只看该作者
你现在连[]里面为空,一共几组数据都数不清.

还写数组的删除数据算法.....闭门思过 去吧.

不要以为搞电子的很少学数据结构,是因为你大学不好.我学校也烂,但是我还没上大学就已经学完了

使用特权

评论回复
68
刘前辈|  楼主 | 2011-5-6 16:01 | 只看该作者
怎么给123jj    10分呀,咱不能说话不算数。

使用特权

评论回复
69
123jj| | 2011-5-6 16:02 | 只看该作者
个人感觉,在C语言中,用指针综合效率最高,但结构可能有些不够清晰。

当然,如能适当的插入一些汇编,则能让程序更精简,但移植不方便。
123jj 发表于 2011-5-6 10:09



感谢刘老前辈的算法2。

刘老前辈的算法2, 打破纠正了俺以前在42楼的错误观点,刘老前辈的算法2, 用铁的事实证明,在C语言中,用直接赋值之法效率最高,指针综合效率其次,但用指针结构可以更清晰一些。

再次感谢刘老前辈的算法2, 让俺又学了一高招~~~  :victory:

使用特权

评论回复
70
badbird1234| | 2011-5-6 16:08 | 只看该作者
67# icecut

使用特权

评论回复
71
123jj| | 2011-5-6 16:11 | 只看该作者
怎么给123jj    10分呀,咱不能说话不算数。
刘前辈 发表于 2011-5-6 16:01


呵呵!

俺个人感觉,刘老前辈追求的最佳答案,也就是 code 最小,data  最少
就是刘老前辈坚决不用的算法2 ,由于这一算法2是刘老前辈给出,因此,这10分应送给刘老前辈,最最合理的啦~~~ :lol

使用特权

评论回复
72
icecut| | 2011-5-6 16:25 | 只看该作者
俺提前收了一个小徒弟.
ACM组赛世界级从67比到前几名.
国内组赛基本前几名.

使用特权

评论回复
73
icecut| | 2011-5-6 16:29 | 只看该作者
结构整体拷贝.n年前论坛里某大侠用过.所以我不说.

你整体拷贝,是编译器优化.你看一下汇编.没啥优化.我的题,才能体现一个c的编程水平.如果你一个结构100字节
你再比较一下,看看汇编优化方法

让我想起n年前的一个帖子,你会写memcpy吗?里面做过所有的条件和优化.

----------------------------------------
提示一下:这里隐藏的优化方法叫:循环的展开

使用特权

评论回复
74
123jj| | 2011-5-6 16:57 | 只看该作者
俺提前收了一个小徒弟.
ACM组赛世界级从67比到前几名.
国内组赛基本前几名.
icecut 发表于 2011-5-6 16:25



恭喜恭喜,恭喜icecut大虾喜收好徒弟~~~  :victory:

使用特权

评论回复
75
刘前辈|  楼主 | 2011-5-6 17:37 | 只看该作者
本帖最后由 刘前辈 于 2011-5-6 17:40 编辑
俺个人感觉,刘老前辈追求的最佳答案,也就是 code 最小,data 最少。就是刘老前辈坚决不用的算法2 ,由于这一算法2是刘老前辈给出,因此,这10分应送给刘老前辈,最最合理的啦~~~
没发现,随手写的一个还真是最简约。不过还是觉得书上的合理,虽然不是最简;但特别精彩,没想到他会那样写。当然看完了一拍案惊奇也就知道了。“不是做不到,而是想不到。”




下面还有2个书上的。


、、

使用特权

评论回复
76
icecut| | 2011-5-6 17:49 | 只看该作者
呵呵.以为我不明白.

我是以机器思想去指证的.
好好想想,是机器不认识.

在接触面向对象语言之前,你的描述必须保证机器是认识的.你删除0之后,后面前移.所以导致后面的为空,应该用0填充.你留着并不能说明他是其他可用的.因为你无法判断.你这个数组与堆栈有明显不同.因为堆栈的空闲总是在一边.你的最后一个数据有效.空闲在中间.所以你这个例子还是不能证明你发帖正确.

我以前说过一个帖子,书上的没错.是你理解错误.

我建议你把你数据结构书拿出来看看?这是关键.其他书,我不管.
那本深入理解Linux架构更好.建议你换一本....

使用特权

评论回复
77
icecut| | 2011-5-6 17:53 | 只看该作者
数据结构建议看清华大学出版社出的那本.
这种书参次不齐,作者水平也相差很远.

如果你看的是这本,那肯定是你理解有问题.
数组肯定不会留着最后一个自己不搬移.

至于是不是清零,那些教授们是想不明白的.他们不做工程.
看看林锐的**

使用特权

评论回复
78
icecut| | 2011-5-6 17:59 | 只看该作者
科学是严谨的.
留下一些野数据,总有一天会吃亏的.

使用特权

评论回复
79
原野之狼| | 2011-5-6 18:13 | 只看该作者
刘前辈的帖子我是看第二遍才看懂的。
映像中前些日子前辈就提到过结构体直接赋值拷贝一说,这个不过是新的C标准里增加的一个语法,而大多数人显然受C89影响比较大,所以倾向于采用指针操作。
在我看来,采用指针来操作,并不会在可读性上打折扣,这是很简单的语句。
且目前看来,采用结构体来赋值倒是占用了更多的程序空间,这可能跟CPU体系结构以及编译器都有关系,在keil51平台下显然指针的做法胜出了。
或许在支持块拷贝的CPU架构下采用结构体赋值能够胜出,我认为这个前提下才是结构体赋值拷贝的优势所在。
前辈看的书很多,但是千万不要看的走火入魔了,还是要多听听别人的意见,兼听则明嘛~

使用特权

评论回复
评分
参与人数 3威望 +3 收起 理由
123jj + 1
刘前辈 + 1
highgear + 1
80
icecut| | 2011-5-6 18:43 | 只看该作者
keil改成size优化.就小了....
循环的展开对速度很有影响.

估计好多人还没研究到这个高度.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则