数学研发论坛

 找回密码
 欢迎注册
楼主: wayne

[原创] GMP大数运算库的一个Qt界面小程序

[复制链接]
发表于 2010-8-10 10:49:32 | 显示全部楼层
以下八皇后问题,测试的是函数递归调用的速度,一直想看看lua的速度,但不会写代码,谁能帮忙写一个?
  1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
  2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
  3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
  4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。

  5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
  6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
  7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
  8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
  9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。

  10. //Forcal源程序
  11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
  12. i:test(row, ld, rd : pos,p : sum,upperlim)=
  13. {
  14.         which {        row != upperlim,
  15.                 {        pos = and{upperlim , not[row.or(ld).or(rd)]},
  16.                         while{        pos,
  17.                                 p = and(pos,-pos),
  18.                                 pos = pos -p,
  19.                                 test(row+p, shl(ld+p,1), shr(rd+p,1))
  20.                         }
  21.                 },
  22.                 sum++
  23.         }
  24. };
  25. i:main(:tm,n:sum,upperlim)=
  26. {
  27.         n=15,
  28.         tm=sys::clock(),
  29.         printff{"\r\nQueens:{1,i} , ",n},
  30.         upperlim=shl(upperlim,n)-1,
  31.         test(0,0,0),
  32.         printff{"sum:{1,i} , {2,i} millisecond.\r\n",sum,sys::clock()-tm}
  33. };

  34. //完成相同功能的C++程序
  35. /*
  36. #include <stdio.h>
  37. #include <stdlib.h>
  38. #include <time.h>

  39. long sum=0,upperlim=1;

  40. void test(long row, long ld, long rd){

  41.         if (row != upperlim){
  42.                 long pos = upperlim & ~(row | ld | rd);
  43.                 while (pos){
  44.                         long p = pos& -pos;
  45.                         pos -= p;
  46.                         test(row+p, (ld+p)<<1, (rd+p)>>1);
  47.                 }
  48.         }
  49.         else
  50.         sum++;
  51. }

  52. int main(int argc, char *argv[])
  53. {
  54.         time_t tm;
  55.         int n=15;

  56.         if(argc!=1)n=atoi(argv[1]);
  57.         tm=time(0);
  58.         if((n<1)||(n>32))
  59.         {
  60.                 printf(" heh..I can’t calculate that.\n");
  61.                 exit(-1);
  62.         }
  63.         printf("%d Queens\n",n);
  64.         upperlim=(upperlim<<n)-1;

  65.         test(0,0,0);
  66.         printf("Number of solutions is %ld, %d seconds\n", sum,(int)(time(0)-tm));
  67. }
  68. */
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-10 11:59:45 | 显示全部楼层
20# forcal

你说过  “不使用MSVC运行库的静态库版本”, 是说forcal可以有linux版本吗?

lua可以与wxwidgets胶合的,叫wxlua,编写界面特别简洁,跟Tcl/Tk一样。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-10 12:02:31 | 显示全部楼层
个人以为,让别人接受一种新语言是非常困难的,除非说它有非常非常多非常非常强大的功能。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-10 12:20:24 | 显示全部楼层
mathe掷话 一针见血,
现在的编程语言实在是太多太多了,
新的编程语言如果没有显著的招牌特点,是很难发展下去的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-10 12:48:50 | 显示全部楼层
可以支持函数式编程
不过编译解释器难度很大
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-10 14:42:48 | 显示全部楼层
20# forcal

你说过  “不使用MSVC运行库的静态库版本”, 是说forcal可以有linux版本吗?

lua可以与wxwidgets胶合的,叫wxlua,编写界面特别简洁,跟Tcl/Tk一样。
wayne 发表于 2010-8-10 11:59

Forcal是用C/C++设计的,里面没有用C++复杂的高级特征,也没有使用汇编,因此有很强的移植性。如果在windows下能获得认可,再发展linux版本。
Forcal现在没有与其他任何东西胶合,如界面库、数据库等等。
但Forcal是一个dll,可以被任何可加载dll的程序使用。从计算简单的数学表达式到构建复杂的系统,Forcal都可以提供支持。所有的Forcal扩展库都是根据核心库Forcal32w.dll的输出函数设计的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-10 14:51:16 | 显示全部楼层
个人以为,让别人接受一种新语言是非常困难的,除非说它有非常非常多非常非常强大的功能。
mathe 发表于 2010-8-10 12:02


非常赞同这个观点,呵呵。

在某些方面,Mathematica 和Maple 提供了比matlab更好的实现和功能,但一般人遇到要解决的问题,多数还是选matlab,尽管Mathematica 和Maple 会做得更好。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-11 10:19:25 | 显示全部楼层
楼上,因为这两个都太数学化了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-11 10:28:50 | 显示全部楼层
27# forcal
提及MATLAB,我忍不住要说几句,
大学里面的什么自动化,机械电子,甚至经管,数学系的教科书都动不动就使用 MATLAB,还有计算机系根本就没怎么动及linux操作系统, 我甚是不解,真不知道搞大学教育的那些爷们是怎么吃这口教育饭的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-11 10:38:30 | 显示全部楼层
我看过不少国外影印版的英文教科书,工科方面的,就是自动控制,数字信号处理,图像处理什么的,也是大谈MATLAB,我想,MATLAB在中国教育界的盛行 大概就是中国教育制度跟在西方屁股后面,亦步亦趋的结果,
西化就西化呗,可三十年来就没怎么换过发型~~
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2019-12-11 16:46 , Processed in 0.061066 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表