- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用环境作为哈希表。键是来自常规文本文档的单词,值是单个整数(某个其他结构的索引)。
当我加载数百万个元素时,更新和查找都变慢了。下面是一些代码来显示行为。
看起来从一开始的行为在 O(n) 中比在 O(1) 中更多,即使哈希表填充很少并且冲突很小。
关于为什么更新和查找时间不断增加以及如何获得更好性能的任何建议?
谢谢
testhInt = function (I=100L,N=100000L) {
cat("create initial table: ", I*N,
system.time(h <<- new.env(hash=TRUE,size=I*N,parent=emptyenv())), "\n")
for ( i in 1L:I){
cat("Updated", i*N,": ",
system.time(for (j in ((i-1L)*N+1):(i*N)) {
h[[as.character(j)]] <- j
}),
"\n")
p = env.profile(h)
cat(sprintf("Hash size: %i, nchains: %i, 1:200:%s\n",
p$size, p$nchains, toString(p$counts[1:200])))
cat("Lookup 1000 hash:",
system.time(resultv <<- sapply(sample(1L:(i*N), 1000L),
function(i) h[[as.character(i)]])),
"\n")
}
}
testhInt()
create initial table: 10000000 0.089 0.081 0.169
Updated 100000 : 2.352 0.045 2.392
Hash size: 10000000, nchains: 100000, 1:200:[text removed]
Lookup 1000 hash: 0.016 0.001 0.018
Updated 200000 : 3.587 0.057 3.622
Hash size: 10000000, nchains: 200000, 1:200:[text removed]
Lookup 1000 hash: 0.014 0.002 0.017
Updated 300000 : 4.649 0.064 4.695
Hash size: 10000000, nchains: 300000, 1:200:[text removed]
Lookup 1000 hash: 0.024 0.003 0.027
Updated 400000 : 5.76 0.076 5.8
Hash size: 10000000, nchains: 400000, 1:200:[text removed]
Lookup 1000 hash: 0.023 0.003 0.026
...
Updated 1200000 : 12.299 0.167 12.469
Hash size: 10000000, nchains: 1200000, 1:200:[text removed]
Lookup 1000 hash: 0.071 0.01 0.084
...
Updated 2600000 : 28.537 0.273 28.836
Hash size: 10000000, nchains: 2600000, 1:200:[text removed]
Lookup 1000 hash: 0.138 0.02 0.158
最佳答案
环境更新和查找不是问题。当您加载数百万个元素时,速度会变慢:1) 生成序列,2) 将它们转换为字符,3) 计算随机样本。
如果您将这些操作移到您的时间之外,并且仅在哈希表更新和查找时进行,您将看到哈希表的性能不会降低。
testhInt2 <- function (I=100L, N=100000L) {
t1 <- system.time(h <<- new.env(hash=TRUE,size=I*N,parent=emptyenv()))
cat("create initial table: ", I*N, t1, "\n")
for ( i in 1L:I) {
jSeq <- ((i-1L)*N+1):(i*N)
jName <- as.character(jSeq)
t2 <- system.time(for(j in seq_along(jSeq)) h[[jName[i]]] <- jSeq[i])
cat("Updated", i*N,": ", t2, "\n")
p <- env.profile(h)
cat(sprintf("Hash size: %i, nchains: %i, 1:200: %s\n",
p$size, p$nchains, "..."))
v <- as.character(sample(1L:(i*N), 1000L))
t3 <- system.time(resultv <<- sapply(v, function(i) h[[i]]))
cat("Lookup 1000 hash:", t3, "\n")
}
}
testhInt2()
create initial table: 10000000 0.012 0.028 0.04 0 0
Updated 100000 : 6.148 0.004 6.174 0 0
Hash size: 10000000, nchains: 1, 1:200: ...
Lookup 1000 hash: 0.084 0 0.086 0 0
Updated 200000 : 6.872 0 6.9 0 0
Hash size: 10000000, nchains: 2, 1:200: ...
Lookup 1000 hash: 0.088 0 0.089 0 0
...
Updated 2500000 : 5.528 0.012 5.557 0 0
Hash size: 10000000, nchains: 25, 1:200: ...
Lookup 1000 hash: 0.052 0 0.052 0 0
Updated 2600000 : 4.844 0 4.863 0 0
Hash size: 10000000, nchains: 26, 1:200: ...
Lookup 1000 hash: 0.052 0 0.052 0 0
关于R 环境/哈希表随着增长到数百万而变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22468701/
增长,则让
当我输入内容时,如何移动 p 段落下方的所有元素,即 contenteditable。 这是我的代码: body, html { margin: 0; padding: 0; backgr
我要解决的问题: 我有一个包含 div 的外部 div。 content 内部和外部 div 之间的边距应始终相同。 当内部 div 增长/收缩时,外部 div
这document Ulrich Drepper 称为“图书馆设计、实现和维护的良好实践”(第 5 页底部): [...] the type definition should always crea
有什么方法可以获取 QPainterPath 并将其展开,就像 Photoshop 中的“选择”>“增长...”(或“展开...”)命令一样? 我想获取从 QGraphicsItem::shape 返
假设,为了问题的目的,我们有一个内存池,最初分配了 n 个 block 。但是,当达到容量时,池想要增长并变成原来大小的两倍 (2n)。 现在可以使用 C 中的 realloc 完成此调整大小操作,但
假设,为了问题的目的,我们有一个内存池,最初分配了 n 个 block 。但是,当达到容量时,池想要增长并变成原来大小的两倍 (2n)。 现在可以使用 C 中的 realloc 完成此调整大小操作,但
我正在研究 boost 库的共享内存部分,为更大的项目做准备。我需要一个共享内存段,在初始化时我不一定知道它的大小,所以我的计划是增加这个段。 我的初始实现有一个存储在共享内存中的 boost::in
这个问题在这里已经有了答案: How to disable equal height columns in Flexbox? (4 个答案) What are the differences bet
我有一个包含子表的表。我不希望子表影响表格的宽度——在溢出的情况下,我希望两者独立滚动。此外,由于子表是基于切换显示的,所以我不希望主表行根据子表是否可见而跳转 Here's代码笔。 我想我可以用 t
我有一个带栏的页面设计,它可以有一个、两个或三个栏。这些列的大小应相同。 为此我使用了 flexbox,它很好,允许我添加/删除我的列并让浏览器处理列宽的大小调整。 现在,当列中的文本大于列的宽度时,
要求: 我需要根据数据增长一个任意大的数组。 我可以猜测大小(大约 100-200),但不能保证数组每次都能适合 一旦它增长到最终大小,我需要对其执行数值计算,因此我更愿意最终得到一个二维 numpy
我有一个 3x256 规则的规则集。每个规则映射到一个 3x3 的值网格,这些值本身就是规则。 规则示例: 0 -> [[0,0,0],[0,1,0],[0,0,0]] 1 -> [[1,1,1],
我有 3 个 div,如果我给前两个 div flex: 0.5,如果我给了 flex-wrap: wrap,最后一个 div 应该移动到下一行>。如果我错了,请指正。 以下是我的 html/css:
在文档和 Bootstrap v4 问题中 (here) ,我看不到任何支持 flex-grow 的计划,例如语法如下: I use all the space lef
要求: 我需要从数据中增加一个任意大的数组。 我可以猜测大小(大约 100-200),但不能保证每次都适合数组 一旦它增长到最终大小,我需要对其执行数值计算,因此我希望最终得到一个二维 numpy 数
我知道(并在互联网上阅读-包括此资源)。增加内存的逻辑是:如果len数组小于1024-golang将array乘以2,否则将len乘以1.25(并且我们在源代码中看到了这个问题https://gith
当输入长文本时,WPF TextBox 控件会增长。 这个问题已经在 Stackoverflow 中提出了 我也引用了一些答案,但我仍然没有找到有效的正确答案。 Here提到了同样的问题,但没有针对此
我在使用 Vaadin HorizonalLayout 时遇到问题 - 我希望左侧组件填充大部分水平空间,如 Fiddle 所示 但是,当我运行 Vaadin 应用程序时,这两个组件会平分屏幕。
关于这个fiddle , 当我点击 a href在这种情况下这是一个图像,我希望图像从 div 开始增长/过渡以通过过渡/缩放填充整个页面它被放置在其中。如果这不可能,我想用 div 的背景颜色填充页
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this q
我是一名优秀的程序员,十分优秀!