文章列表
;double的功能是2*n
(define (double n)
(+ n n))
(double 5)
;havle-iter函数的功能是通过迭代获得n的一半的值,guess是初始猜测值
(define (havle-iter guess n)
(cond ((not (integer? n)) (display "error: 原因havle函数的参数是整数\n"))
(( and (< (double guess) n) (<= (double (+ guess 1)) n)) (havle-iter ( ...
;double的功能是2*n
(define (double n)
(+ n n))
(double 5)
;*函数的功能是a乘以b
(define (* a b)
(if (= b 0)
0
(+ a (* a (- b 1)))))
(* 3 4)
;havle-iter函数的功能是通过迭代获得n的一半的值,guess是初始猜测值
(define (havle-iter guess n)
(cond ((not (integer? n)) (display "error: 原因havle函数的参数是整 ...
(define (even? n)
(= (remainder n 2) 0))
(define (fast-expt-iter result b n)
(cond ((= n 0) 1)
((= n 1) (* result b))
((even? n) (fast-expt-iter result (* b b) (/ n 2)))
(else(fast-expt-iter (* b result) b (- n 1)))))
(define (fast-expt b n)
(fast-expt-ite ...
杨辉三角以前在学习c语言时候,用循环很容易实现。由于刚刚接触函数式语言,递归和迭代方式实现循环还没深入我心。下意思的想用链表来实现,但发现自己对scheme的链表操作太不熟悉,总会出现这样那样子的无法自我解释的问题。最后参考了@dennis_zane的pascal实现,dennis_zane是把杨辉三角左对齐,然后根据坐标之间的关系实现:(pascal x y) ,其中x,y为坐标,(pascal x y) 的值为坐标对应的杨辉三角数值。看了dennis_zane的实现以后,很惭愧自己没有想到。想想其未最终打印出结果,那我来继续完成其工作。当然也是用递归和迭代。
(define (pa ...
Proxy的public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h),
首先通过getProxyClass 创建一个新的Class 对象,//(Class cl = getProxyClass(loader, interfaces);)
getProxyClass实现所有的包含所有的interfaces接口,并且名字为String proxyName = proxyPkg + proxyClassNamePrefix + num;
其中p ...
- 2009-10-13 11:37
- 浏览 503
- 评论(0)
并发解决的问题:速度
和设计可管理性
。
更快的执行
:
并发用于多处理器系统中可以吞吐量,但是并发通常却用来提高单处理器
上的程序性能。如果但处理器没有阻塞
,那么多线程需要线程上下文的转换,程序性能反而会更差,因此之所以在但处理器中需要多线程,是因为程序控制范围之外的阻塞引起的,如果没有任务阻塞,那么在但处理器上使用并发就没有任何意义。
单处理器上性能提高的常见示例是事件驱动编程。实际上,使用并发的最吸引人的一个优势就是可以产生具有可相应的用户界面。如果没有多线程,那么你的任何一段代码都必须检查界面的元素的状态以作出界面反应。
并发的最直接的方式是操作系统级别使用 ...
- 2009-08-27 17:34
- 浏览 373
- 评论(0)
c语言中,-x实现是用取反+1实现,因此x>0||-x<=0不一定都成立,比如x=0x80000000,即x除了符号位是1,其余都是零,10进制值为
#include<iostream>
int main()
{
int x=0x80000000;
printf("x=%d/n",x);
if(x>0||-x>=0)
printf("x>0||-x>=0");
else
printf("x<0&&-x<0");
re ...
- 2009-07-25 12:21
- 浏览 482
- 评论(0)
三.Young 氏矩阵的相关算法.
题:一个 m*n 的 Young 氏矩阵(Young tableau) 是一个 m*n 的矩阵,其中每一行的数据都从左到右排序,第一列的数据都从上到下排序.Young氏矩阵中可能会有一些∞ 数据项,表示不存在的元素.所以,Young 氏矩阵可以 ...
- 2008-10-30 21:41
- 浏览 615
- 评论(0)
题目:请给出一个时间复杂度为nlogn的算法,使之能够在给定一个由n个整数的构成的整合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
解答:
首先对S进行排序,使用合并算法进行排序,排序算法的时间复杂度为nlogn。
然后对排序的S从左到右(即从大到小)进行算法,首先锁定一个数i,这个数小于x的一半,然后从这个数的右边开始查找x-i,使用2分法查找,算法的时间复杂度小于nlogn,所以总的时间复杂度还是nlogn。
#include<iostream>
constintMAXINT=0xFFFF-1;
voidMerge(intA ...
- 2008-10-25 15:36
- 浏览 784
- 评论(0)
数组中逆序对的数量是同运行插入排序产生的移动的数量是相同的,但是选择排序的最差的时间复杂度是n的平方次,但是合并排序最差的是nlogn的时间复杂度。所以应该修改合并排序来计算逆序对数量。在L和R合并的过程中,如果没有移动的话,序列是L+R,所以计算移动的数量就是元素没有移动过R与L与R合并后的位置之间的差值就是移动的数量。
以下代码是实现的算法:
#include<iostream>
constintMAXINT=0xFFFF-1;
voidInversionMerge(intA[],intstart,intmid,intend,int& ...
- 2008-10-25 11:05
- 浏览 447
- 评论(0)
#include <iostream>
using namespace std;class A;typedef void ( A:: * PFN)(void);
class A{public:void FunA(int num){cout<<"FunA in A num ="<<num<<endl;}};
union MM{PFN pfn;void (A:: * pfn_vi)(int);};int main(void){PFN pfn;A a;pfn =(PFN)(a.FunA);MM mm;mm.pfn=pfn;(a ...
- 2008-08-01 16:49
- 浏览 347
- 评论(0)