小编cur*_*age的帖子

括号内的字符串,以便表达式采用给定值

以下问题来自Vazirani等人的“动态编程”一章。等


[6.6]让我们在三个符号a上定义一个乘法运算(×);b; c根据下表:

乘法表

因此,a×a = b,a×b = b等。

找到一种有效的算法,该算法检查这些符号的字符串(如bbbbac),并确定是否可以以使结果表达式的值为a的方式对字符串加上括号。例如,在输入bbbbac上,您的算法应返回yes,因为((b(bb))(ba))c = a。


这是我的方法:将其映射到此处计算布尔括号数量的问题。在该问题中,将为您提供以下形式的布尔表达式

T F T xor T

并且您需要找到多种方法将此方法加括号,以使其评估为true。

我们可以将xor视为遵循某些规则的运算符(T xor F = T等),并对采用值T或F的操作数进行操作。对于我们的原始问题,我们可以将a,b,c视为操作数由给定表定义的乘法(x)提供规则。

上面的方法有意义吗?还是有一个更简单的方法?

algorithm dynamic-programming boolean-expression parentheses

6
推荐指数
1
解决办法
7696
查看次数

free通过值传递给函数的指针有什么作用?

众所周知,如果我们通过值将指针传递给函数,它就不能在函数内释放,如下所示:

void func(int *p)
{
    free(p);
    p = NULL;
}
Run Code Online (Sandbox Code Playgroud)

p持有(可能是有效的)地址的副本,所以free(p)试图释放它.但由于它是一个副本,它不能真正释放它.对free()的调用如何知道它不能真正释放它?

上面的代码不会产生错误.这是否意味着free()只是默默地失败,"某种程度上"知道作为参数传入的地址无法处理?

c pointers memory-management

4
推荐指数
1
解决办法
4540
查看次数