我有一个树节点,其数据是一个字符串。
class node{
private:
string data;
node *left,*right;
}
现在我有一个树节点数组,其中我将多个文件的内容附加到二叉树的数组中。
现在我想执行瘫痪键的二进制搜索。可能吗 ??我知道只有根的地址存储在数组的元素中。是否可以将树的内容复制到设备。请建议我使用比2D数组linear search
更有效的搜索算法。如果我复制整个树的数组,它仍然是efficient
?
答案 0 :(得分:1)
正如我从你的问题中所理解的,你有一系列元素代表了许多二叉树的根源。如果您想将此数组发送到您的设备,我建议您在已排序的向量中转换每个树,并对每个向量执行二进制搜索。也就是说,您将拥有一组已排序的数组 现在,您可以对所有子阵列执行并行二进制搜索。您甚至可以将每个已排序的数组拆分成组,并对每个组执行二进制搜索。
答案 1 :(得分:1)
根据用例,内存传输可能是瓶颈,比搜索昂贵得多。因此,您希望在分配内存的方式上非常小心。使用在数组中排列节点和指针的节点分配器是个好主意。但是,您可以输入以下问题:
std::string
,您可能更愿意char*
指向字符串数据(也应该在GPU内存空间中可用,因此是一个专用的字符串存储系统)。然后可以并行化您的搜索,但好处将在很大程度上取决于您要搜索的树的数量。如果它与GPU上运行的CUDA线程数量(即数千个)相比较小,则效益不确定。
使用类似于reduce的技术(参见CUDA GPU计算SDK中的标量产品示例),在GPU上搜索一些小值可能会更好,而不是实际构建树。