簡體   English   中英

在排序的向量上進行多個匹配時,定義起始位置會更快嗎?

[英]Will defining a start position when doing multiple matches on a sorted vector be faster?

我有一個按升序排列的具有一百萬個整數的向量,也有一個包含這些整數的1000個子集的向量。

什么會更快? 如果samplevec變大,第二個版本會更快嗎?

samplevec=sort(sample(1:10000000, 1000000))
matchvec=sort(sample(samplevec, 10000))

for (i in matchvec) {
index=match(i, samplevec)
print(index)
}

要么

samplevec=sort(sample(1:10000000, 1000000))
matchvec=sort(sample(samplevec, 10000))

previous=1
for (i in matchvec) {
index=match(i, samplevec[previous:length(samplevec)])
previous=index
print(index)
}

進行基准測試很容易。 這只是兩個時間點。 隨意拉皮條並自動執行,以增加時間點數。

library(microbenchmark)

set.seed(357)

samplevec = sort(sample(1:1000, 1000))
matchvec = sort(sample(samplevec, 1000))

microbenchmark(
  version1 = {
    previous=1
    for (i in matchvec) {
      index=match(i, samplevec[previous:length(samplevec)])
      previous=index
    }},
  version2 = {
    for (i in matchvec) {
      index = match(i, samplevec)
    }}
)

Unit: milliseconds
     expr       min        lq      mean    median       uq
 version1 10.619105 10.711438 12.057713 10.811051 12.71902
 version2  2.419441  2.487062  2.853868  2.506603  2.56024

這是第二點。 這個跑了一點點。

set.seed(357)

samplevec = sort(sample(1:100000, 100000))
matchvec = sort(sample(samplevec, 100000))

microbenchmark(
  version1 = {
    previous=1
    for (i in matchvec) {
      index=match(i, samplevec[previous:length(samplevec)])
      previous=index
    }},
  version2 = {
    for (i in matchvec) {
      index=match(i, samplevec)
    }}
)

Unit: seconds
     expr       min        lq      mean    median        uq
 version1 108.96069 109.61137 110.87308 110.70554 111.61337
 version2  15.63668  15.71792  16.20434  15.84646  16.07487

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM