c - 在C中制作函数树

标签 c tree evolutionary-algorithm genetic

我想用 C 语言制作一棵函数树,它看起来像这样: http://scr.hu/5rq/vdja0

所以基本上我希望结果是这样的:http://scr.hu/5rq/f04uu

其中 x 是我可以提供的变量( float )。 F0 到 F6 是带有两个参数的随机函数(函数如乘法、加法或给出随机数)。 所以我的确切问题是:我该怎么做? 我知道这可以很容易地完成,方法是将每个函数给出的精确值存储在数组中。 但是当涉及到获得不同的“x”值时,它就变得复杂了。 我最初的想法是创建一个函数,将随机函数附加到树中的每个节点,但是后来,我不确定应该如何构建构成该树的结构,

typedef struct drzewo typ;

struct drzewo {
    typ *right;
    typ *left;
    typ *up;
    float *value; //what to do with this ?
};

我想以某种方式更改行“float *value;”放入可以存储类似 Function1(left->value,right->value); 但未运行的函数中,并且不是具有给定参数的函数的确切值,并且 Function1() Function2() 表示将两个参数相除或相乘等的函数。

不,这不是为了学校,是的,这是我使用遗传编程的悲惨尝试。

最佳答案

要创建指向函数的类型,请使用函数原型(prototype)并将函数名称替换为 (*<typename>) .所以如果你有一个函数 foo看起来像:

float foo( int arg1, char *arg2 );

你可以创建一个类型“foo_fn”,它是一个指向像 foo 这样的函数的指针:

typedef float (*foo_fn)( int, char * );

然后将其存储在您的结构中,例如:

typedef struct drzewo typ;
struct drzewo {
    typ *right;
    typ *left;
    typ *up;
    foo_fn fn_ptr;
};

如果你想要一个包含各种类型函数的结构(可能有不同的返回类型或采用不同的参数),你可能只想将它们存储为 void *并在您想调用它们时将它们转换为正确的函数指针类型。

关于c - 在C中制作函数树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511100/

相关文章:

c - 在 C 中打印列

c++ - 在 C ://上使用 C++ 中的树命令

java - JSF/ICEfaces 动态层次结构树示例

java - 使用差异进化的函数值

evolutionary-algorithm - 关于进化艺术的信息

python - 使用 Platypus (Python) 进行整数、多目标优化

c - 使用 C 来自动化命令行实用程序的选项有哪些?

c - CMX ColdFire USB-Lite 堆栈的文档

c - 使用 atoi 时出错

javascript - 是否可以将 D3.tree() 与包含 parent 而不是 child 的数据集一起使用?