打印

送10分,求最佳算法。

[复制链接]
楼主: 刘前辈
手机看帖
扫描二维码
随时随地手机跟帖
81
对于算法来说,
你这个和普通数组一样

就等于k[]={1,2,0,3,5,4}
把0删除,吧35前移

事实上应该吧354前移.这是我一直说你不严禁的原因

使用特权

评论回复
82
highgear| | 2011-5-6 22:02 | 只看该作者
刘工的帖子,我也没有看明白,也懒得看了。一道简单的问题居然漏洞百出,混乱不堪,这只能说明楼主不具备起码的技术素养,而且思维混乱,缺乏条理性和逻辑性。

这种题,最简单的做法就是用另一个指针数组来移动原始数据组的指针,而不用移动原始数据。

使用特权

评论回复
83
cecwxf| | 2011-5-6 22:24 | 只看该作者
84# icecut嗯,林锐的书里说的清楚

使用特权

评论回复
84
hxy6951| | 2011-5-6 23:02 | 只看该作者
觉得没有什么意义,都知道那一组全是零了。应该增加程序找全为零的组的功能。

使用特权

评论回复
85
无名蚂蚁| | 2011-5-7 01:03 | 只看该作者
for(i = 0; i<5; i++)
{
   if(!STRUC_a[i].arr1[0])
   {
       if(!STRUC_a[i].arr1[1])
   {
        if(!STRUC_a[i].arr1[2])
   {
         if(!STRUC_a[i].arr1[3])
   {
         if(!STRUC_a[i].arr1[4])
   {
         if(!STRUC_a[i].arr1[5])
   {
         。。。(替换)
   }
   }
   }
   }
   }  
   }
}

使用特权

评论回复
86
highgear| | 2011-5-7 03:09 | 只看该作者
顶原野之狼。

我说刘公(冷漠)怎么又出题了, 原来是想卖弄“结构体直接赋值拷贝”,难怪题目中要把一个数组封装在一个结构里。这种拙劣的卖弄,让精通 C++ 之人笑倒。任何一本 c++ 的书中,都会有详细的类(结构体)拷贝构造的讲解,任何一个c++面试,都会考问拷贝构造。  

https://bbs.21ic.com/icview-233103-1-1.html
显然,刘公(冷漠)不分场合胡乱应用,到处卖弄“结构体直接赋值拷贝”。

这种数据移动,可以有两种形式:
1) 不移动数据,仅仅重组数据指针。用指针数组或者链表(这里没有必要)容纳数据指针。
2) 移动数据。移动数据最基本的方法是 memory copy, 也就是最最基本的 memcpy 函数,无论c, 还是c++, 最后归根到底是调用 memcpy  移动数据。memcpy 一般用汇编写成,针对 cpu 进行优化,特别是一些具有 dma 的 cpu 上,比单纯的使用 loop 搬移效率高很多。8051没有 dma, 所以 memcpy 只能用 loop 慢慢搬移了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
123jj + 1
87
123jj| | 2011-5-7 05:41 | 只看该作者
本帖最后由 123jj 于 2011-5-7 09:36 编辑

盼星星盼月亮总算盼来了highgear老师~~~ :victory:

谢谢highgear老师的指点,怪不得俺看LZ的题目,那么绕口,小生愚笨,百思不得其解,不知刘老前辈为什么只用算法1, 坚决不用算法2 。

原来刘老前辈是在到处分享其最新发明“结构体直接赋值拷贝”。

也就是刘老前辈推荐的唯一只用的算法1,哪个代码又长又臭,占用内存巨大,执行效率奇低的算法1。

而刘老前辈追求的最佳答案,也就是 code 最小,data  最少,直接赋值运算的算法2,刘老前辈是坚决不用的!   

这是俺百思不得其解的原因,highgear老师一句话,解答了俺心头之疑惑,谢谢highgear老师~~~ :D

使用特权

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


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

使用特权

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

使用特权

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

使用特权

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



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

使用特权

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



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

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

使用特权

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

使用特权

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

使用特权

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

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

使用特权

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

使用特权

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

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

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

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

使用特权

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

使用特权

评论回复
99
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 ,俺百思不得其解,请刘老前辈再解释一下 。

使用特权

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

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

显然不是函数调用。




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

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



、、

、、

使用特权

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

本版积分规则