table()添加和删除值

时间:2012-11-25 13:21:56

标签: algorithm r hashtable

我正在尝试创建一个有效的table()计算(获取向量中每个值的频率)。与普通table()函数的不同之处在于它需要支持添加和删除值,而无需重新计算整个表。

我想过使用哈希表。 for add:查找键,将值加1。删除:寻找密钥。如果找到:从值中减1,如果未找到:添加值为1的新键。

我想知道你们中是否还有其他想法。

示例:

X

key  freq
1    3
2    5
3    2
8    1

remove(8)

key  freq
1    3
2    5
3    2


add(2)

key  freq
1    3
2    6
3    2

有效实施的任何想法? 提前谢谢!

- 编辑 -

我当前的代码,如果有人感兴趣(也涉及shannon熵的计算)

create.freq.hash<-function(x)
{
  t<-table(x)

  h<-hash(names(t),as.numeric(t));
  return(h);

}

freq.hash.add<-function(hash,key)
{
  if(is.null(hash[[key]]))
  {
    .set(hash,key,+1)
  }
  else
  {
    .set(hash,key,hash[[key]]+1)
  }
}

freq.hash.remove<-function(hash,key)
{
  if(!is.null(hash[[key]]))
  {
    if(hash[[key]]==1)
      del(key,hash)
    else
      .set(hash,key,hash[[key]]-1)
  }
}

hash.entropy<-function(hash)
{
  if(is.empty(hash))
    return;

  v<-values(hash);
  v.prob<-v/sum(v);
  entropy = (-1)*(v.prob%*%log2(v.prob))
  return(entropy)
}

0 个答案:

没有答案