我有一个程序可以存储一个类的许多实例,比方说高达10.000或更多。 类实例有几个我不时需要的属性,但最重要的是ID。 class Document attr_accessor :id def ==(document) document.id == self.id end end 现在,存储数千个这些对象的最快方法是什么? 我曾经把它们全部放入一个文档数组中: documents = Array.new documents << Document.new # etc 现在可以select将其存储在Hash中: documents = Hash.new doc = Document.new documents[doc.id] = doc # etc 在我的应用程序中,我主要需要了解一个文档是否存在。 哈希的has_key? 函数显着快于数组的线性search和Document对象的比较? 都在O(n)之内还是has_key? 甚至O(1) 。 我会看到不同之处吗? 另外,有时我需要添加文件,当它已经存在。 当我使用一个数组,我将不得不与include?检查include? 之前,当我使用哈希,我只是使用has_key? 再次。 同上面的问题。 你怎么看? 当90%的时间我只需要知道ID是否存在(而不是对象本身!)时,什么是存储大量数据的最快方法?
今天我访问了jsPerf ,现在我想知道… 什么是“ops / sec”? 它做了多less次迭代? 它在什么基础上计算哪个更快? 这些计算背后的公式是什么? 例如: http : //jsperf.com/concatenation-vs-join 谁能告诉我? 提前致谢。
在一次求职面试中,我被问到“在C ++中,如何更快速地访问variables,尽pipe是普通的variables标识符或者指针”。 我必须说我对这个问题没有一个很好的技术答案,所以我大肆猜测。 我说访问时间可能会和普通的variables/标识符一样,是一个指向存储值的地址的指针,就像指针一样。 换句话说,就速度而言,它们都具有相同的性能,并且指针只是不同的,因为我们可以指定我们希望它们指向的内存地址。 面试官似乎对我的回答(虽然他没有说什么,只是继续询问别的事情)似乎不是很确信/满意,所以我要来问问我的答案是否准确,如果不是,理论和技术POV)。
其他人在编写PHP Web应用程序时发现了什么惊喜? 有一个众所周知的问题是编译时类的inheritance问题,但是我知道其他一些问题,并且想要尝试构build一个语言中最重要的问题列表。 注意: 我已经担任了PHP5的高级开发人员,所以PHP工作支付我的账单,这个问题并不意味着要把PHP当做一种语言来破译,因为我所使用的每一种语言都有一些众所周知的或者不是很知名的意外。
假设我想获得类“.answer”中所有元素中的第一个元素, $($(".answer")[0]) 我可以做到以上,但优雅和速度之间的最佳平衡是什么? *改变了这个问题,以反映当前的讨论
我最近写了一个简短的algorithm来计算python中的快乐数字 。 该程序允许你select一个上限,它将确定下面所有的幸福数字。 对于速度比较,我决定将我从Python知道的algorithm的最直接的翻译成C ++。 令人惊讶的是,c ++版本的运行速度比Python版本慢得多。 在发现前10000个快乐数字的执行时间之间进行精确的速度testing表明,python程序平均在0.59秒内运行,而c ++版本平均在8.5秒内运行。 我将这种速度差异归结为这样一个事实,即我必须在已经内置到python语言的c ++版本中为部分计算编写助手函数(例如,确定元素是否在列表/数组/向量中) 。 首先,这是这样一个荒谬的速度差异的真正原因,其次,我怎么能改变c + +版本执行比python版本更快(应该在我看来)。 这两个代码,速度testing在这里: Python版本 , C ++版本 。 谢谢您的帮助。 #include <iostream> #include <vector> #include <string> #include <ctime> #include <windows.h> using namespace std; bool inVector(int inQuestion, vector<int> known); int sum(vector<int> given); int pow(int given, int power); void calcMain(int upperBound); int main() { while(true) […]
通常,Java会根据给定呼叫端遇到的实现数量来优化虚拟呼叫。 在我的基准testing 结果中可以很容易地看到,当你看看myCode ,这是一个简单的方法返回存储的int 。 有一个微不足道的 static abstract class Base { abstract int myCode(); } 与一些相同的实现类似 static class A extends Base { @Override int myCode() { return n; } @Override public int hashCode() { return n; } private final int n = nextInt(); } 随着实现数量的增加,方法调用的时间从两个实现的0.4 ns到1.2 ns增长到了11.6 ns,然后增长缓慢。 当JVM看到多个实现时,即preload=true ,时序会略有不同(因为需要testing的instanceof )。 到目前为止,清楚的是, hashCode行为有点不同。 特别是在三种情况下,速度要慢8-10倍。 任何想法为什么? […]
我正在做一个简单的parsing器,当分析我观察到的瓶颈是在…文件阅读! 我提取了非常简单的testing来比较fstreams和FILE*在读取大量数据时的性能: #include <stdio.h> #include <chrono> #include <fstream> #include <iostream> #include <functional> void measure(const std::string& test, std::function<void()> function) { auto start_time = std::chrono::high_resolution_clock::now(); function(); auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() – start_time); std::cout<<test<<" "<<static_cast<double>(duration.count()) * 0.000001<<" ms"<<std::endl; } #define BUFFER_SIZE (1024 * 1024 * 1024) int main(int argc, const char * argv[]) { auto buffer = new […]
我只是想知道是否有一个优雅的方式来设置一个特定的线程进行密集计算的最大CPU负载。 现在我已经find了线程中最耗时的循环(它只是压缩),并使用带有硬编码值的GetTickCount()和Sleep() 。 它确保循环持续一段时间,并且睡眠一定的最小时间。 它或多或less的工作,即保证线程不会使用超过50%的CPU。 但是,行为取决于CPU内核的数量(巨大的劣势),简单的丑陋(更小的缺点:))。 有任何想法吗?
更新3 完成。 以下是最终通过我所有的testing代码。 再次,这是仿照Murilo Vasconcelo的修改后的史蒂夫·哈诺夫的algorithm。 感谢所有帮助! /** * Computes the minimum Levenshtein Distance between the given word (represented as an array of Characters) and the * words stored in theTrie. This algorithm is modeled after Steve Hanov's blog article "Fast and Easy Levenshtein * distance using a Trie" and Murilo Vasconcelo's revised version in C++. […]