数学建模社区-数学中国

标题: [讨论]简单精妙的算法 [打印本页]

作者: ytumath    时间: 2005-4-24 11:25
标题: [讨论]简单精妙的算法
<><FONT face=Tahoma size=4></FONT> </P>$ w* a2 U1 A5 f% J# P% y, |
<><FONT face=Tahoma size=4></FONT> </P>" i! E1 S6 ^0 g: B8 R
<><FONT face=Tahoma size=4>如何实现俩变量a,b交换?
% I3 a4 `5 u; a! I: K3 Z; X
; M' l9 v; N6 |. y2 K; T是个人都能想到:* e' W$ r% a4 [( X/ H! J8 K
& U2 t. f) s3 E: L: S4 M
tmp=a;
; o9 z9 O) p0 O7 oa=b;
$ Q) Y6 e% k* z) N' Ob=tmp;
1 P7 n" u2 U8 j3 ^/ F6 X- E4 {! \1 ]. S" P! z+ v% F! c. A2 E  e
俺看到一个牛叉的算法......3 Q; D5 p3 F3 P' W" ^

( L  p# [5 y9 n/ c: za=a+b;
) A( q1 p5 s( I+ [0 p7 Mb=a-b;, \# n2 x* N9 ?  Q
a=a-b;0 t$ ^( C3 }; q9 _7 _
4 Y7 y+ g8 z3 q% o* P: n, @) @
牛吧...还有更牛的...嵌汇编,嵌汇编......
$ Q8 a- n. u" x/ `6 M0 ^- W* f2 [7 {: ?/ f: W; \
asm{
, ~$ v% v8 [4 [  W8 k4 Apush eax;
7 ^/ g4 M! E6 m: P; z' {mov eax,a;
6 J" T0 T+ |: {- _) a/ [9 z# s1 J! }push eax  W' x$ a# C5 n! \
mov eax,b;3 i2 n, ~* {% \+ P
mov a,ebx& u2 V- p: ]6 `9 V& M6 d+ b% A
pop eax
& I& W- N, c4 K, S9 R& fmov b,eax; k- S% i+ x: ?1 _; G4 h4 i
pop eax2 |  B( C# ^1 d& ^7 A) L) u, ~5 T
}+ Z% j0 G$ [! M+ r
8 E  L9 T* k  T6 f/ X& c
代码的优化是无止境的.........</FONT></P>
作者: iyah1984    时间: 2005-4-24 12:00
还不 是第一种的最简单明了。而且这只是传值调用。而且是传地址调用
作者: happy_cser    时间: 2005-4-25 17:05
同意楼上的,不觉得后面两个有什么好的啊
作者: tw1982    时间: 2005-5-12 20:12
会用一般的就可以了吗,后面的代码算法又不比第一个快,,
作者: wyf287    时间: 2005-7-24 02:10
有必要弄那么复杂吗
作者: ayue    时间: 2005-7-27 14:46
<DIV class=quote><B>以下是引用<I>ytumath</I>在2005-4-24 11:25:30的发言:</B><FONT face=Tahoma size=4><BR><BR>牛吧...还有更牛的...嵌汇编,嵌汇编......<BR><BR>asm{<BR>push eax;<BR>mov eax,a;<BR>push eax<BR>mov eax,b;<BR>mov a,ebx<BR>pop eax<BR>mov b,eax<BR>pop eax<BR>}</FONT></DIV>
4 q' v* I. e& @; [- }8 f' B<>在汇编当中交换两个数需要这么麻烦吗?</P># `: h2 l8 V9 U4 M! l0 Z/ }
<>难道仅用 xchg a,b 一条命令不更好吗?!何必要写的那么冗长复杂又难理解呢?!</P>
作者: johhan    时间: 2005-8-6 10:57
<><FONT size=4>a=a+b;<BR>b=a-b;<BR>a=a-b;</FONT></P>' v# f% B2 L$ p1 m# ?; t) a$ c" F: N! l) M
<><FONT size=4></FONT> </P>
$ _0 f, d2 {6 V/ c% X' |6 P<><FONT size=4>高明</FONT></P>
作者: cshdzxjtu    时间: 2005-8-13 12:32
换一种思路罢了
作者: jys    时间: 2005-8-19 20:24
<>a ^= b;</P>
4 F: B$ Y' y9 j* K% y, q7 z( K<>b ^= a;</P>* T) m1 z& s3 n: ~8 b1 x$ X2 r
<>a ^= b;</P>
作者: jlin0528    时间: 2005-8-24 14:46
新思路,不错,给人眼前一亮的感觉。
作者: cupidvenus    时间: 2005-9-23 13:51
<>早就知道了,还有很多</P>
作者: zxl_lucky    时间: 2005-9-24 14:50
haixing
作者: shease    时间: 2005-9-28 19:30
<>heihei</P>
作者: hao1133    时间: 2005-9-29 12:06
精彩,各有千秋
作者: myzrl20    时间: 2005-10-15 13:57
<>都学总比没学、没见过好多了</P>
作者: nonregister    时间: 2005-11-3 18:40
<>第二种,曾经汇编嵌入过。</P>0 ]0 B& j. e2 E! L$ j
<>但第一种没想到过,但也不见得效率一定高,增加了加减运算。</P>
作者: surbian    时间: 2006-2-16 09:34
好文,好思想
作者: hover_yinxiang    时间: 2006-2-16 11:37
<p>有想法</p>
作者: daomeidan1234    时间: 2006-3-8 12:34
小游戏, 小Trick, 在弄几个有意思的看看.
作者: richard_li_1    时间: 2006-3-11 17:35
也可以使用 异或  的方法实现,RAID5就是采用这个原理,用加的方法容易产生溢出<br/>A=A xor B<br/>B=B xor A<br/>A=B xor A<br/>
作者: avajing    时间: 2006-4-14 21:30
<p>good idea</p>
作者: comeononon    时间: 2006-4-26 09:20
第一种算法精彩
作者: zansan    时间: 2006-5-7 17:24
"C程序设计"里有.
作者: chz0829    时间: 2006-6-1 19:17
<p>都很牛</p><p></p>
作者: 可dofsdfo    时间: 2006-6-11 00:32
<p>请问 使用汇编的时候为什么不用</p><p>xchg 指令 该指令的周期是2</p>
作者: xjtu_yu    时间: 2006-6-20 14:13
哈哈,不错不错
作者: zhoyi    时间: 2007-6-14 14:54
呵呵。有意思。
作者: 317423892    时间: 2007-10-21 08:13
hao a&nbsp;
作者: hanjinheng    时间: 2007-10-21 09:29
怎么不牛啊,人家就用了两变量。
作者: GraBUAA    时间: 2012-4-2 16:54
我是在是看不出来牛在哪,这不是很绕吗,现在计算机分配各变量一点影响都没有吧,又不是单片机~~~~~
作者: wpa    时间: 2012-4-5 01:24
减少了一个内存变量的使用
作者: shuxue_liu    时间: 2012-4-5 09:29
Oooooooooooooooo




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5