这里的二叉树可能不一定是二进制搜索树.
结构可以视为 -
struct node {
int data;
struct node *left;
struct node *right;
};
Run Code Online (Sandbox Code Playgroud)
我可以和朋友一起解决的最大解决方案就是这种 -
考虑这个二叉树:
二叉树http://lcm.csa.iisc.ernet.in/dsa/img151.gif
顺序遍历产量 - 8,4,9,2,5,1,6,3,7
后序遍历产量 - 8,9,4,5,2,6,7,3,1
因此,例如,如果我们想要找到节点8和5的共同祖先,那么我们在顺序树遍历中创建8到5之间的所有节点的列表,在这种情况下恰好是[4,9] ,2].然后我们检查此列表中的哪个节点在后序遍历中最后出现,即2.因此,8和5的共同祖先是2.
这个算法的复杂性,我相信是O(n)(O(n)对于顺序/后序遍历,其余的步骤再次是O(n),因为它们只不过是数组中的简单迭代).但这很有可能是错误的.:-)
但这是一个非常粗略的方法,我不确定它是否会因某些情况而崩溃.这个问题还有其他(可能是更优的)解决方案吗?
algorithm complexity-theory binary-tree least-common-ancestor
我需要从我编写的一个小型Linux内核模块中获取给定文件描述符中的文件名.我尝试了在C中从文件描述符获取文件名时给出的解决方案,但由于某种原因,它打印出垃圾值(在解决方案中提到的使用readlink
时/proc/self/fd/NNN
).我该怎么做?
我在接受实习的采访中被问到这个问题,我建议的第一个解决方案是尝试使用正则表达式(我通常在采访中有点难过).像这样的东西
(?P<str>[a-zA-Z]+)(?P<n>[0-9]+)
Run Code Online (Sandbox Code Playgroud)
我认为它会匹配字符串并将它们存储在变量"str"中,而将数字存储在变量"n"中.怎么样,我不确定.
所以它匹配"a1b2c3"类型的字符串,但这里的一个问题是它也匹配"a1b"类型的字符串.有谁能建议解决这个问题的解决方案?
另外,还有其他正则表达式可以解决这个问题吗?
我正在使用libsvm的Python接口,我注意到在使用网格搜索选择最佳C
和gamma
参数(RBF内核)之后,当我训练模型并交叉验证它时(5倍,如果它是相关的),我收到的准确度与训练数据集中的标签比例相同.
我有3947个样本,其中2898个标签为-1,其余的标签为1.因此,这是样本的73.4229%.
当我训练模型并交叉验证它5倍时,这就是我得到的 -
optimization finished, #iter = 1529
nu = 0.531517 obj = -209.738688,
rho = 0.997250 nSV = 1847, nBSV = 1534
Total nSV = 1847
Cross Validation Accuracy = 73.4229%
Run Code Online (Sandbox Code Playgroud)
这是否意味着SVM没有考虑这些功能?或者这是有问题的数据?它们都是相关的吗?我只是无法通过73.4229号码.此外,支持向量的数量应该远小于数据集的大小,但在这种情况下,似乎并非如此.
一般来说,当交叉验证精度与数据集中的标签比率相同时,它意味着什么?
我想捕获从我的机器出来的数据包,我正在使用libpcap(版本1.0.0-1).问题是,像这样的基本程序 -
#include <stdio.h>
#include <pcap.h>
int main(int argc, char *argv[]) {
char *dev, errbuf[PCAP_ERRBUF_SIZE];
dev = pcap_lookupdev(errbuf);
if (dev == NULL) {
fprintf(stderr, "%s\n", errbuf);
return (2);
}
printf("Device : %s\n", dev);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
似乎没有显示无线接口.每次我编译并运行程序时,它都会检测到eth0.我怎样才能捕获无线接口呢?