【发布时间】:2015-09-24 14:26:56
【问题描述】:
编辑: 原来$article->getID(); 是导致执行时间过长的部分。这是它的样子:
public function getId()
{
return $this->id;
}
但我仍然不知道为什么会这样。
我正在使用此代码尝试为包含 1000 个文档和 4000 个唯一令牌的小型语料库中的每个令牌计算 document frequency。
为此,我编写了这个函数:
public function computeIDF(){
// splitting documents into tokens
$this->tokens = $this->tokenize();
// $this->tokens = array($article->id => array($token => $freq))
// 1. For each token …
foreach($this->tokens as $token){
// 2. … look in every document …
foreach($this->articles as $article){
// 3. … and if it exists there …
if(isset($this->tokens[$article->getID()][$token]){
// 4. … add 1
$tokFreq[$token] += 1;
}
}
}
}
但是第 3 步引起了很多麻烦:
- 如果我注释掉步骤4.,则没有任何变化;
- 如果我注释掉步骤3.,执行时间会从414.2s 变为“刚刚”14s,这几乎快了4000%!!1! (所以,当然,这不是一个“微优化”问题。
注意这里不涉及数据库。一切都早早地被提取了,超出了整个 class' 范围:
// This is where the data is being fetched
$articles = ArticleDAO::loadLast(1000);
// It's then injected into the $corpus
$corpus = new Corpus($articles);
我在这里做错了吗?如果是这样,我怎样才能让事情变得更快?
【问题讨论】:
-
那个吸气剂
$article->getID()到底在做什么?只是归还房产?从数据库加载东西? -
这里不涉及数据库。一切都提前获取了。
-
先生。 Downvoter,如果你读到这个,你介意解释一下你的意图吗?谢谢。
-
如果只将 3 替换为
$article->getID();,执行时间会怎样? -
我不明白这里发生了什么!我使用
$article->getID();运行测试,执行时间再次飙升。从内部看是这样的:public function getID(){ return $this->id; }有什么解释吗?
标签: php arrays performance multidimensional-array isset