数学建模社区-数学中国

标题: Forcal运行速度测试例子 [打印本页]

作者: forcal    时间: 2010-9-27 19:28
标题: Forcal运行速度测试例子
Forcal的运行效率与Lua相当,是目前最快的脚本之一,但Forcal的扩充性能更好。* Y. g* H# v( a) O
在大量函数调用时,Forcal更具速度优势。
7 N: ~" j5 c8 @! A) N2 G以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。/ p* R6 G7 H- P9 r( l& B% R
9 k  j' j5 O& D; o! O& d' F
例1:Fibonacci递归程序(n取40)
7 O* d& X& f6 N5 K: X$ A8 M) q
  1. SetRealStackMax(1000);
    . q4 D. y  x5 e$ N" o9 V! }5 N% O
  2. F(n)= which{& u" P/ s) d3 k+ Z- Q
  3.         n == 0,
    ; d, g$ A  t: y& l9 K0 \4 @' {
  4.                 return(0),
    % f9 e- b# O* }9 h
  5.         n == 1,: a6 \' ?7 D' q3 n
  6.                 return(1),1 T5 z% Z5 M, N7 R( F" W! L
  7.         return [F(n - 1) + F(n - 2)]
    ( |4 D# X0 m% j. ]4 v: q5 H
  8. };
    & R8 q" P4 A( ?7 h' R4 v, B
  9. main(:t,n)=  p; h- w4 [6 s6 F9 v: Y0 J
  10. {
    6 q) a" |: r' O0 V$ F# F
  11.         t=sys::clock(),9 A6 m6 ~% C" B' _
  12.         n=F(40),
    + Y1 g. f0 c% P, w- R
  13.         t=sys::clock()-t,0 N3 G( q8 `2 y  A
  14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}9 d0 D( G1 g& g, L$ ?+ V# D
  15. }; * I5 X6 G, \5 [
复制代码
结果:
) k; I" \' A! d0 G# [2 P7 p5 p: o# ?. h6 s. K' }# V/ U
fibonacci=102334155, fibonacci_Time=41859毫秒=41秒' d$ K0 m, \  {# j# w' ]( L
3 Y; n" Y! f: O# y1 t# W1 D0 P/ h
例2:八皇后问题
0 n- w- ?. d, ]+ d9 D7 T! V! g
  1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。# }* A9 `/ @, z& E
  2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
    0 }9 \8 p8 R! U8 h% s
  3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。  s) h( l1 B* H
  4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
    2 D2 }/ ?" z5 W' [9 K/ [2 J, t
  5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。4 H. ]0 S/ ^8 I* B' W  r3 H7 {
  6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。5 j7 b" s; U, @4 e8 E
  7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
    * Z( X& ]9 o+ z
  8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。( M  g4 W- g5 ^3 t7 U
  9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 9 y8 ~% W9 j: p( n
  10. //Forcal源程序' E. M- \2 G& n0 W1 i2 A
  11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);' K1 b4 `  f' M$ K) ?
  12. i:test(row, ld, rd : pos,p : sum,upperlim)=) V; }. T9 J9 A
  13. {
    $ }" Z  H, `) W
  14.     which) N5 q. Y2 \7 r: I( @! b
  15.     {   row != upperlim,: i6 B% R; A& K3 _0 ]# h9 z
  16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
    2 Q9 O: u7 d) X# z1 X* t
  17.             while{ pos,+ n1 `1 I0 H; e. i- _. y# a% ^, U
  18.                 p = and(pos,-pos),( n. x% M/ R$ _, @+ x
  19.                 pos = pos -p,9 g! J1 R; [2 D7 T8 E. D1 q3 K
  20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
    5 j" l+ p! j! @3 w2 {% h/ I
  21.             }# |' W: r/ w+ O* k) s( t
  22.         },* W. ?/ x8 k* }: i$ q
  23.         sum++% t$ C7 i/ H# R, [
  24.     }
    " H$ R* z) F& Z; C1 x( h0 M
  25. };
    . D: R; ~/ D" `# K! B& c
  26. i:main(:tm,n:sum,upperlim)=- r; t  b% W8 y+ f8 j
  27. {, v, p6 K$ \# O$ G6 ]: {! N1 q. h
  28.     n=15,
    ( E# {8 o0 c/ t; C; w, M
  29.     tm=sys::clock(),. H$ ?& j; u+ u! j5 K
  30.     printff("Queens:{1,i}, ",n),' W; v) P8 `! Q5 K% U* I! _
  31.     upperlim=shl(upperlim,n)-1,- @: q6 G5 f9 C; P- j; f+ ]
  32.     test(0,0,0),
    * B/ I: H* J- I9 J* \* W, g9 u
  33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm), n* @# l+ q" a/ a3 h7 q
  34. };" X& d- J& U" v% X; U+ Y% i/ |
复制代码
Forcal运行结果:
4 m3 |- f2 G' p/ {7 C1 F
* w3 g8 U& d3 _% K8 X- s+ W$ S    Queens:15, sum:2279184, 59547毫秒.9 _5 R+ \2 K7 |5 u4 n5 f) z1 R
2 d) @( c: u: J
例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右- U# W5 p$ h: k; Y: m3 q( i* J
  1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =* e9 A0 ]* @. u) u
  2. {
    * R7 e% X; W& H: t! }$ V
  3.         cr = y - 0.5,
    ) c, J6 {: Y( _3 |# l7 l3 Y9 _
  4.         ci = x,
    6 u+ n. f$ Q8 R9 K2 t+ Q+ @
  5.         zi = 0.0,; t6 y: c/ h# N" M
  6.         zr = 0.0,
    / C5 J! J9 c- r& m& e/ }
  7.         i = 0,
    ; J2 x* J% r8 k; t6 C
  8.         (1).while {
    + Y' n9 b% R# }3 j: T8 n
  9.                 i ++,
    , o  T3 ~' t4 h( K% t
  10.                 temp = zr * zi,% c( I5 e* R) c6 s  m0 c
  11.                 zr2 = zr * zr,
    & |; ^- t/ q8 b% j9 l# m: s
  12.                 zi2 = zi * zi,
    6 K: P, ~; K0 b6 {* z( {
  13.                 zr = zr2 - zi2 + cr,- @" q* c5 g+ `4 W; G
  14.                 zi = temp + temp + ci,) L1 _4 l6 T$ N% I* W9 p
  15.                 if [zi2 + zr2 > 16, return (i)],
    7 K( {! \5 P8 |) j1 R: J0 o
  16.                 if [i > 1000, return (0)]
    * R! a: t$ A1 F; T. y, h" w
  17.         }, M9 T; q% V. F% \) s
  18.         
    . P3 S  C: d, P; s* r3 p
  19. };: y( {4 X5 L/ D
  20. main (:i,x,y,old,now) = {
    - u: b% q, k5 O4 M  F
  21.         old=sys::clock(),
    9 g; @9 g/ @2 f6 d( X' E# N
  22.         y = -39,
    9 L' [6 T  N5 c" }+ `
  23.         while{  y < 39,, c* d; j. |0 ?7 w1 t
  24.                 printff("\r\n"),% j: K2 X' D; h7 T  [1 {! V) Z
  25.                 x = -39,! U/ G: w$ n4 W8 n
  26.                 while{  x < 39,/ ^9 j: \1 x" \: E* \
  27.                         i = mandelbrot(x/40.0, y/40.0),
    / `' f4 ^# ~# @6 b2 y
  28.                         which{        i==0,
    % Y& u; Z( N- n! x# M, _' A
  29.                                 printff("*"),
    " H- U+ l3 Z- y/ L
  30.                                 printff(" ")
    6 A0 |( \$ z& @" M! M0 L
  31.                         },6 ?3 e$ P) d. C4 Z! ~+ F) G
  32.                         x++
    . q7 C9 s$ K6 u* V) ?
  33.                 },. J7 g# h7 ], q; q- Z1 v( B$ N4 n
  34.                 y++
    , j" |, v6 W' ?5 G3 }5 Q" B& ]3 H/ k
  35.         },
    " X% u$ a  c3 G& W/ K2 W* L( k
  36.         now=sys::clock(),
    6 `* v8 E2 F9 A2 U& j, _
  37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)- h  N8 c% H/ n' ^# ^* u
  38. };
    1 w4 E, q/ I5 Z
复制代码

: i8 A3 D- s" K8 t. d# {: Y4 Z运行结果:4 m1 r* F5 `9 b+ d1 q
  1.                                        *
    % P  ~) ?( l! K1 k; H# Z
  2.                                        *
    - _! i) N5 _. v$ \+ ]
  3.                                        *
    ( C: H( u; O$ V
  4.                                        *0 d! D2 [) w( u  q, u4 R3 {6 ], e
  5.                                        *
    2 q- r/ q- r3 E+ @" j
  6.                                       ***. `: t: v9 s& D- w6 u4 x7 G8 ^
  7.                                      *****
    ) A( N$ Y) g+ q" y# X6 A
  8.                                      *****% ^! G8 h; X* U9 Y5 Q
  9.                                       ***
    : k) B( [8 i+ h, N" p: a
  10.                                        *
    3 E- Z! T7 }! _% v% q' ?
  11.                                    *********0 x$ w/ n; H9 Y) i) h
  12.                                  *************! N8 I2 w3 R8 V% y* Q
  13.                                 ***************9 V1 C7 k; B( ~1 h
  14.                              *********************
    * p! k& H% t3 X! O
  15.                              *********************& L! z$ k" O; t9 l) `
  16.                               *******************
    : X: ?+ J* g9 ]3 J# {
  17.                               *******************+ U( g' s/ d2 ]
  18.                               *******************7 c7 h0 G2 A! I5 ?! ?
  19.                               *******************
    ( o5 W: L1 Q7 O1 J
  20.                             ***********************
    2 F  a$ m" d4 d) }$ N0 |. R
  21.                               *******************
    2 p  i* E0 g! c7 p) ^# b0 W
  22.                               *******************9 g' a: F, j# P7 e
  23.                              *********************9 X* f3 u  `$ r1 g  Q) p0 u  w
  24.                               *******************! v) T( |- d1 L1 _' E# a
  25.                               *******************
    8 b5 Y5 n3 v; {) n0 W
  26.                                *****************- a6 ?& p- S2 K+ ?
  27.                                 ***************
    ; r- v# `) H% d: @+ f3 G& L7 M
  28.                                  *************3 {2 ]8 Y2 K3 f: d
  29.                                    *********1 W7 ?4 |; \) v, h
  30.                                        *6 p/ J$ G) R6 N! q$ f/ d% E
  31.                                 ***************
    ; P. B: q: q5 G
  32.                             ***********************- e( G1 X9 T$ w
  33.                          * ************************* *
    ' D/ M, ?7 _( R5 Y7 G% L$ c: d. ~
  34.                          *****************************) N1 x& a& d* n' Y
  35.                       * ******************************* *( {: N* s/ [6 v% p6 ^
  36.                        *********************************
    ! s% T2 p0 V9 i% Z$ E+ p
  37.                       ***********************************' }% w( Q6 I) f+ w) u% v
  38.                     ***************************************' U* ?: @; p4 K1 I
  39.                *** ***************************************** ***
    8 j1 t. |6 {" ~* g, M
  40.                *************************************************
    ( y3 r) |- N  J& D
  41.                 ***********************************************- M( ]( V0 [7 L6 \
  42.                  *********************************************/ c+ L0 F; d6 V2 P% ?5 p' z; W
  43.                  *********************************************9 y2 u0 H+ n9 d. A) |: K
  44.                 ***********************************************4 |; f& U6 B) ^+ Q2 k
  45.                 ***********************************************% a/ z# G! [& n; q2 M
  46.               ***************************************************9 W+ l6 i5 l& T% @
  47.                *************************************************3 V$ B& x) t& U/ L% n
  48.                *************************************************
    , E6 g, C& O% k1 ^6 ^, q2 C
  49.               ***************************************************
    5 V; h! N' q5 t' i( z& F* m& p
  50.               ***************************************************
    " y2 k. \8 k0 H+ g* M2 w/ e
  51.          *    ***************************************************    *2 K# T8 H2 V% g7 _. H! Z- [! i
  52.        *****  ***************************************************  *****
    1 o% a2 w4 T# Z" N
  53.        ****** *************************************************** ******
    9 t/ y8 s4 {! c
  54.       ******* *************************************************** *******& {6 V9 J1 c- \  D) h, k
  55.     ************************************************************************ C* E: J* d6 g3 T8 N  @4 m/ v: A  |3 o
  56.     ********* *************************************************** *********
    / Q, W6 R* |1 A+ d- j/ U
  57.        ****** *************************************************** ******
    7 O( @$ s1 D* ?
  58.        *****  ***************************************************  *****. I* r7 A1 Y( u$ Y* }3 i  Z9 `
  59.               ***************************************************4 y+ E# \! z/ h; U' f
  60.               ***************************************************) @: M2 d. t; b. r
  61.               ***************************************************8 q8 `+ _9 o" N2 G0 f$ x; Z, i6 P
  62.               ***************************************************/ A3 Z' E$ G% v2 X0 H
  63.                *************************************************+ n4 C; I0 `- a& \0 I) i
  64.                *************************************************2 _  a- [5 V: b
  65.               ***************************************************- U* ?0 b+ P1 ?
  66.                 ***********************************************
    3 H$ ~- D0 z, Z" F  v5 n4 y
  67.                 ***********************************************
    ) k; \3 g# A& K1 Q! T( b
  68.                   *******************************************
    ; o$ [& r+ F/ |* h: O
  69.                    *****************************************$ D5 k1 R- }, t; Z+ o  G& n9 I5 w
  70.                  *********************************************
    ! w+ g4 N& {5 F8 V
  71.                 **** ****************** ****************** ****
    9 Q0 `/ [7 Z) B  w, g  I
  72.                  ***  ****************   ****************  ***
    8 I7 b; I5 |$ i, y
  73.                   *    **************     **************    *) V( M' V( N5 H* C4 q+ x
  74.                          ***********       ***********
    - t: _7 g- l3 g1 u! {
  75.                          **  *****           *****  **
    2 ~+ U/ D8 P& F+ G. F( u
  76.                           *   *                 *   *
    + u0 l6 w6 ^& I2 N
复制代码

4 X1 }1 q8 s; c% ?运行时间为:( _. r) V& P) w

) H/ ?  J' h) G# q' E0 q3 W$ S        Forcal Elapsed 1.078
  r3 l0 O% q0 x; F, U




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