表示如下关系的适当数据结构是什么?例如,我将其表示为一棵树是不是更好?如果是这样,这三个看起来会是什么样子?我的目标是在内存中拥有A类的实例,具有最好的内存足迹,并且还可以快速插入到嵌套的任何级别。
每个嵌套的字典云都有数百万个条目,每个类的E类大小约为10MB。
public class A
{
private Dictionary<int, B> someName;
}
public class B
{
private Dictionary<int, C> someName;
}
人们谈论trees,是的,我可以理解tree的概念以及traversing it conceptually的方式。同样有趣的是,在binary search tree中,搜索时间是O(log N)。
现在,我有一些folders in my system,它的文件结构是not going to be modified,但new files are added often除外。
我可以想象,如果我构建一个表示文件夹结构的二进制搜索树,我可以很好地使用O(log N)中的文件名进行搜索。我知道,使用内置的.NET方法可以非常有效地完成这一任务,但我正在尝试查看使用树的真实生活用例场景。
MSDN
让我们看一下下面的图片
这就是所谓的范围树。我不明白一件事,它看起来像一个二叉搜索树,所以如果我们插入元素,我们可以使用与插入二叉搜索树相同的过程。那么有什么不同呢?
我读过一篇教程,我猜它是kd树的变体,查询搜索树(如几何点搜索等),但如何构建它?像二叉树或者它需要额外的参数吗?也许就像这样
struct range
{
int lowerbound;
int upperbound,
int element;
};
在插入过程中,我们必须检查
if(element>lowerbound && element <upperbound)
then ins
我有一组输入序列(表示为列表),为每个输入序列生成一组它的所有子序列(也是列表)。这些子序列作为键存储在一个相等的哈希表中,从不垃圾收集或修改(但是相关的值会被修改)。
我的问题是,我目前用来完成这个任务的方法使用的堆空间比我想要的要大得多。
为了弄清楚我说的是什么,假设我们有一个序列:
#1=(A B C D)
后续行动如下:
#2=()
#3=(A)
#4=(A B)
#5=(A B C)
#6=(A B C D)
#7=(B)
#8=(B C)
#9=(B C D)
#10=(C)
#11=(C D)
#12=(D)
下面的代码(我承认不是很好)生成了这个集合(除了我实际上并不关心的空子
我想在java中实现一个通用树,我想为same.where使用一个表,表的结构如下所示。
public class MyTreeNode {
private int id;
private int parentId;
private MyTreeNode parent;
private List<MyTreeNode> childNodes;
// further fields..
}
NAME OF TABLE IS **TREE_TABLE**
PK_ID | PARENT
----------
我习惯于使用函数式编程(主要是Haskell),现在开始使用OO (scala)。
我在翻译我的代码时遇到了麻烦。例如,这是我对B树的Haskell定义:
data BTree a =
Leaf
|Node2 (BTree a) a (BTree a)
|Node3 (BTree a) a (BTree a) a (BTree a)
deriving (Eq,Read,Show)
这很简单。我的树是空的,或者它有一个值,是两棵树的父亲,或者是三棵子树的父亲。
OO上是什么?毫无线索。我就是想不出怎么才能用理智的方式去做。
维基百科关于联合发现问题的文章给出了一个非常简单的实现,我将其移植到C#并进行了测试。
我知道,总的来说,代码应该是几乎线性的。但这是一个实际的实施吗?是否有我应该使用的优化?有没有办法减少最坏情况下的单一操作的复杂性?
using System;
/// <summary>
/// A UnionFindNode represents a set of nodes that it is a member of.
///
/// You can get the unique representative node of the set a given node is in by