打印

送10分,求最佳算法。

[复制链接]
楼主: 刘前辈
手机看帖
扫描二维码
随时随地手机跟帖
101
怎么给123jj    10分呀,咱不能说话不算数。
刘前辈 发表于 2011-5-6 16:01


咋真以为 谁在呼这10分 是不是有点搞笑了 :lol

使用特权

评论回复
102
eydj2008| | 2011-5-7 08:05 | 只看该作者
你们上面写的例子 纯实验 无法函数通用移植  没用  不是这样写的。
要写 应该写成函数形式 直接给调用。

使用特权

评论回复
103
eydj2008| | 2011-5-7 08:06 | 只看该作者
然后 再来看整体的代码量 和 运算的效率(占用CPU时间) 占用的RAM

使用特权

评论回复
104
123jj| | 2011-5-7 08:59 | 只看该作者
咋真以为 谁在呼这10分 是不是有点搞笑了 :lol
eydj2008 发表于 2011-5-7 08:02



小盆友别瞎笑,能得到刘老前辈1分奖励已经来之不易,要灌N多的水,更何况来自刘老前辈的10分奖励呢~~~

使用特权

评论回复
105
123jj| | 2011-5-7 09:02 | 只看该作者
你们上面写的例子 纯实验 无法函数通用移植  没用  不是这样写的。
要写 应该写成函数形式 直接给调用。
eydj2008 发表于 2011-5-7 08:05



小盆友说的对,应该写成函数形式,直接给调用,那是最最基本的 memcpy 函数。

highgear老师推荐的贴子里面有
https://bbs.21ic.com/icview-233103-1-1.html

使用特权

评论回复
106
jhshmily| | 2011-5-7 09:03 | 只看该作者
:Q

使用特权

评论回复
107
cubasa| | 2011-5-7 09:27 | 只看该作者
基本还是可以听明白。
我还是很支持刘前辈的,不管他提出的算法如何,“到处卖弄”这个用词有点过,我理解为“喜欢分享”。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
123jj + 1
108
123jj| | 2011-5-7 09:35 | 只看该作者
LS小盆友说的不错,“到处卖弄”这个词不好听,“喜欢分享”又不给力。

两者合一,创造个“到处分享”,这个词也不错哈~~~  :lol

使用特权

评论回复
109
eydj2008| | 2011-5-7 13:43 | 只看该作者
:lol
理科人的表示 都是逻辑式的

使用特权

评论回复
110
icecut| | 2011-5-7 16:27 | 只看该作者
101楼说出来真丢人.

说数据结构不用memcpy,用这个函数还用你学数据结构?

你现在理解真的还没入门.还很远....

记得我说这句话.等你看完数据结构在用一年.回来看看你这帖子.丢人不丢人

使用特权

评论回复
111
icecut| | 2011-5-7 16:28 | 只看该作者
学数据结构的 一个问题就是写一个memcpy.

使用特权

评论回复
112
123jj| | 2011-5-7 17:37 | 只看该作者
......

刘前辈前面说过绝不用算法2,于是有人理解成了LZ只用算法1——结构拷贝?!!!过度兴奋了吧。LZ说的是算法1 不实用,“主要是它的教育意义,可以玩玩。”一条语句就完成了算法2多条语句的功能,概念清晰(哈,一条语句可谈不上又臭又长。)。而且它是“编译器可靠度”的(memcpy()也是);算法2是“程序员可靠度”的。——谁的代码更可靠?

......

刘前辈 发表于 2011-5-7 11:59


小生愚笨,这回俺又看不懂了,LZ出的题目,要求

...


有几种算法?哪个是最佳?也就是 code 最小,data  最少。

刘前辈 发表于 2011-5-5 16:09



怎么绕来绕去,题目变成了“编译器可靠度”“程序员可靠度”之PK ,俺百思不得其解,请刘老前辈再解释一下 。

使用特权

评论回复
113
刘前辈|  楼主 | 2011-5-7 18:16 | 只看该作者
本帖最后由 刘前辈 于 2011-5-7 18:19 编辑

先看看所长的 memcpy( ); 结论:和结构整体拷贝算法 data,code 开销完全一样!——又臭又长,根本没有实用性!自己扇自己耳光。想当年好像是呆板书生证明过,2种算法的代码开销一样,无所谓谁优谁劣,(甚至只是名字不同而已。)所以没什么可争吵的;用什么完全是个人喜好问题,谁想限制别人的喜好,强制他人接受自己的观点,是不是自己有心理障碍?
         可惜所长如今健忘,不记得这件事了。又犯老毛病。
         俺下面用所长的 memcpy( )实现,也归结为一种算法,这样所长心里舒服一点。——完全一样的算法,所长非要算一份,那就算他一份。 不过显然,结构整体拷贝仅需要2个指针参数,无需知道copy长度len,还有
             STRUC_a =STRUC_a[i+1];

显然不是函数调用。




俺就是要自己创新,俺就是不想和所长这样大多数人一样!一样就成包子啦!

这些遗老遗少,看着别人有一点创新就不顺眼,自己又臭又长就是香的。这种人都什么臭毛病。



、、

、、

使用特权

评论回复
114
123jj| | 2011-5-7 18:36 | 只看该作者
...


俺就是要自己创新,俺就是不想和所长这样大多数人一样!一样就成包子啦!
这些遗老遗少,看着别人有一点创新就不顺眼,自己又臭又长就是香的。这种人都什么臭毛病。

刘前辈 发表于 2011-5-7 18:16


拍个照,俺闪人了,不按规则出牌,这游戏没法玩下去~~~ :L

使用特权

评论回复
115
刘前辈|  楼主 | 2011-5-7 18:57 | 只看该作者
本帖最后由 刘前辈 于 2011-5-7 19:35 编辑

想了很多办法给123 jj 10分,都未成功。
谁都知道,作为填补空白,第一个人是最了不起的,无论有什么缺陷,不足,123jj 都是第一个人。后面谁做的再好,也是老二。世界上载入史册的永远是第一发明人,后面跟着完善的人做得再好也没用。

      中国人就不是这样,谁若做了第一个填补空白的人,所有人都给他挑错,这缺陷,那BUG,让他里外不是人。
“你当了第一,把我往哪放?”
“前面所有人的程序都有BUG,应该……”  (结果发现连LZ的题意都不知道。讲了半天仿调度意图,非要拉到纯粹的数组删除。一再反复说明LZ是部分移动,还不理解,还说要应该移动20字节,结论还是第一人123jj 移动15字节写错了,BUG了,自己发现了123jj 的错误才是……?二踢脚贬低他人,抬高自己?)

123jj 知道我为什么厌恶所长了吧。刚看了一篇**,郑渊洁的“鼓励万岁”,里面一段话一会贴上来。对所长这类人形容的特别好。


“鼓励万岁”:
        ……有一次我路过一个建筑工地,看到起重机在工作。我就想,起重机会随着它建造的楼房的身高的增加而增加自己的身高,起重机是怎么长高的?我专门到工地附近租了房子,观察了两个月。我发现起重机是通过自己吊起分解的身体的一部分加入整体从而提升自己,这给了我启发。世上有两种人,一种是像起重机一样,给大厦添砖加瓦。添砖加瓦就是鼓励别人,赞美别人。同时自己提升自己。靠自己的努力,实现自己的人生价值。还有一种人是二踢脚。二踢脚贬低空气,也就是贬低别人,靠这个升到空中。发出巨响引人注目,然后粉身碎骨。生活当中有这样的人,喜欢给别人挑毛病,贬低别人。喜欢贬低别人的人,在潜意识里是抬高自己。做人要当起重机,不当二踢脚。



、、


、、

使用特权

评论回复
116
pa2792| | 2011-5-7 19:26 | 只看该作者
LS有必要租两个月房子吗?直接去工地问师傅就可以了。

使用特权

评论回复
117
icecut| | 2011-5-7 20:43 | 只看该作者
中国人就不是这样,谁若做了第一个填补空白的人,所有人都给他挑错,这缺陷,那BUG,让他里外不是人。

haha,看来这贴我就应该当笑话看.....

你看过21ic所有帖子吗?
你落入俗套还不知道呢.以为是填补空白的人......

宇宙飞船都乐了
wxj1952就乐死了

使用特权

评论回复
118
highgear| | 2011-5-7 21:36 | 只看该作者
顶109楼pa2792,顶 110楼 icecut.

刘工若真心真诚得想分享心得或是发现,我想大家也都会真心的欢迎和鼓励,尽管这不是什么真的发现。这个“填补空白”,就像我的小学同学一直坚称“豆芽”一词是他四岁时发明的一样。
刘公的人生感叹贴太多,却不能把一个简单的问题叙述清楚,还尤抱琵琶半遮面夹杂“填补空白”,还不如大大方方的直接说。

关于 memcpy与结构copy, 刘公你显然学艺不精。结构copy 你不分场合“分享”,一个memcpy 函数里如何能使用结构copy? 难道每一个不同调用都得用结构封装一次?

至于 memcpy,显然刘公没有用过其他的 cpu. memcpy 对于51这种 cpu 结构来说,不会比用for loop 之类更快更省,特别是对于external ram. 换句话说, memcpy 不是为 51 准备的,甚至可以说,数据结构之类的不是为 51 准备的。因此,刘公在51得出结论,可以说是错误的。大多数中高端 cpu,都具备 dma或者block move/copy, 使得 memcpy 远比用 c 下的for loop 高效快速。

再给你说一遍,这种题,51下最好的方法是操纵数据指针,不是数据移动,用结构封装数组是多此一举

使用特权

评论回复
119
icecut| | 2011-5-7 22:09 | 只看该作者
同意楼上.

使用memcpy需要包含string.h.这就决定了这些不可能是用于单片机的.

使用特权

评论回复
120
highgear| | 2011-5-8 00:06 | 只看该作者
用数据指针数组(链表更灵活,但需要内存管理的支持)操纵数据指针,非常简单。

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
        char a[7][5] = {{1,2,3,0,0},{4,5,6,0,0},{0,0,0,0,0},{7,8,9,1,0},{1,3,5,0,0},{2,4,6,0,0},{3,5,7,0,0}};
        char* b[7];
        b[0] =(char*) &a[0];
        b[1] =(char*) &a[1];
        b[2] =(char*) &a[3];
        b[3] =(char*) &a[4];
        b[4] =(char*) &a[5];
        b[5] =(char*) &a[6];
        b[6] =(char*) &a[7];
        for (int i=0; i<6; i++)
                printf("%d \n", b[i][0]);
        return 0;
}

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
123jj + 1
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则