相关疑难解决方法(0)

FileSystemWatcher vs polling监视文件更改

我需要设置一个应用程序来监视在本地或网络驱动器上的目录中创建的文件.

请问FileSystemWatcher一个计时器或投票将是最好的选择.我过去曾使用过这两种方法,但并不广泛.

两种方法都存在哪些问题(性能,可靠性等)?

c# file-io filesystemwatcher distributed-filesystem

145
推荐指数
8
解决办法
7万
查看次数

哈希树结构

我刚刚在我的项目中遇到了一个场景,我需要比较不同的树对象与已知实例的相等性,并且考虑到在任意树上运行的某种散列算法将非常有用.

以下面的树为例:

        O
       / \
      /   \
     O     O
    /|\    |
   / | \   |
  O  O  O  O
          / \
         /   \
        O     O

其中每个O表示树的节点,是一个任意对象,具有相关的哈希函数.所以问题简化为:给定树结构节点的哈希码和已知结构,什么是计算整个树的(相对)无冲突哈希码的不错算法?

关于散列函数属性的一些注意事项:

  • 散列函数应该取决于树中每个节点的哈希码及其位置.
  • 重新排序节点的子节点明显更改生成的哈希码.
  • 反映树的任何部分明显更改生成的哈希代码

如果它有帮助,我在我的项目中使用C#4.0,虽然我主要是寻找理论解决方案,所以伪代码,描述或其他命令式语言的代码都可以.


UPDATE

嗯,这是我自己提出的解决方案.这里的几个答案对它有很大帮助.

每个节点(子树/叶节点)具有以下散列函数:

public override int GetHashCode()
{
    int hashCode = unchecked((this.Symbol.GetHashCode() * 31 +
        this.Value.GetHashCode()));
    for (int i = 0; i < this.Children.Count; i++)
        hashCode = unchecked(hashCode * 31 + this.Children[i].GetHashCode());
    return hashCode;
}
Run Code Online (Sandbox Code Playgroud)

正如我所看到的,这个方法的好处是,哈希码可以被缓存,只有当节点或其后代之一发生变化时才会重新计算.(感谢vatine和Jason Orendorff指出这一点).

无论如何,如果人们可以在这里评论我建议的解决方案,我将不胜感激 - 如果它做得很好,那么很好,否则任何可能的改进都会受到欢迎.

algorithm tree hash data-structures

44
推荐指数
4
解决办法
2万
查看次数