求函数的表达式f(a,b)

Yofoo 2015-12-01 11:55:56

BOOL CSpgTestQuick::GetFindCount(int a, int b, int &nCount)
{
int m, n, c1, c2, l, r;

m = max(a, b);
n = min(a, b);
if(m == 1 && n == 1)
{
nCount = 0;
return TRUE;
}

l = m/2;
r = m-l;
GetFindCount(l, n, c1);
GetFindCount(r, n, c2);
nCount = 2+c1+c2;
return TRUE;
}


BOOL CSpgTestQuick::GetTestCount(int a, int b, int &nCount)
{
int c1, c2, c3, l, r;

if(a==1 && b==1)
{
nCount = 1;
return TRUE;
}

GetFindCount(a, b, c1);
c2 = 0;
if(a>1)
{
l = a/2;
r = a-l;
GetTestCount(l, r, c2);
}
c3 = 0;
if(b>1)
{
l = b/2;
r = b-l;
GetTestCount(l, r, c3);
}

nCount = 1+c1+c2+c3;
return TRUE;
}


以上是函数的代码,
GetFindCount 为 nCount = f1(a, b)
GetTestCount 为 nCount = f2(a, b)

求f1(a,b), f2(a,b) 的表达式, 有推导过程最好
...全文
263 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yofoo 2015-12-01
  • 打赏
  • 举报
回复
f2 继续用这个方法没办法推了

f2(a+b,c+d) = 1 + f1(a+b, c+d) + f2(a,b) + f2(c+d)
f2(a+b,c+d) = 1 + 2*a*b-2 + f2(a,b) + f2(c+d)

a		b		f2(a,b)
1		1		1
2		2		1 + 1*2 + f1(2,2)
4		4		1 + 2 + 4 + f1(4,4) + 2*f1(2,2)
8		8		1 + 2 + 4 + 8 + f1(8,8) + 2*f1(4,4) + 4*f1(2,2)
n		n		1 + 2 + 4 + ...+ n + f1(n, n) + 2*f1(n/2, n/2) + ... n/2*f1(2,2)

n*2-1 + ???
Yofoo 2015-12-01
  • 打赏
  • 举报
回复
f1 感觉还是比较好推导的, 我用原始方法推了出来, 结果应该是对的, 但是我想知道更好的推导方法

f(a+b,c) = 2 + f(a,c) + f(b,c)

1		1		0
1		2				2		2
1		4		6		2+2*2	
1		8		16		2+2*2+2*2*2 = 2^4-2

n = log(x)/log(2)
f(1,x) = 2^(n+1)-2 = x-1

f(1,x) = 2x-2
f(x,1) = 2x-2


1		1		0					2-2			0		
1		2		2					4-2
2		2		2+2*2				8-2			1		3
2		4		2+4+8				16-2						
4		4		2+4+8+16			32-2		2		5
4		8		2+4+8+16+32			64-2					
8		8		2+4+8+16+32+64 		128-2		3		7

n = log(x)/log(2)
f(x,x) = 2^(2n+1)-2 = 2^(2*log(x)/log(2)+1)-2 = 2*x*x-2

猜测
f1(a,b) = 2*a*b-2

验证代入
f(a+b, c) = 2 + f(a,c) + f(b,c)
2*(a+b)*c - 2 = 2 + 2*a*c-2 + 2*c*b-2
OK!
结果为
f1(a,b) = 2*a*b-2

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧