在像Chrome这样的网络浏览器中,程序的内存和速度如何?

zma*_*ril 12 javascript algorithm math google-chrome combinatorics

最近,我一直在玩R(5,5)的Ramsey定理.您可以在此处查看以前尝试的一些示例:http://zacharymaril.com/thoughts/constructionGraph.html Essence:在图形/其补码中找到所有k4,然后以不会形成k5的方式连接另一个点(我知道有一种选择,从数学角度看你不可能超过14岁.但是有很多方法可以解决这个问题,而且我已经把它运行到了22-23而没有使用我的浏览器.)

有了新的想法,我开始尝试将批次之间的信息存储起来.当前构造图表通过并在每次看到图形时搜索图形中的所有k4.我认为这有点过分,因为k4将在前一个图中保持不变,并且只有新的k4可以显示在添加新点所产生的连接中.如果您每次找到它们时存储前一个k4,然后只搜索新创建的边界边界,那么您将减少必须进行的比较次数(n 4)到(n-1 3).

昨晚我实施了这个,并且没有明显的错误就让它工作了.虽然我会在此之后再回过头来解决任何问题,但新方法会使程序慢得多.之前,该计划只进行了所有比较所需的时间加倍.现在,它正在看起来是阶乘时间.我已经回过头来试图找出任何明显的错误,但我想知道新的内存依赖是否会导致整体减速.

因此,有了这个长篇介绍,我的主要问题是如何在网络浏览器中像Chrome一样关注程序的内存和速度?我是通过将一堆小图作为JSON对象来减慢程序的吗?从理论上讲,我在速度方面占用多少内存?我在哪里可以了解更多关于两者之间的联系?有没有一本书可以更好地解释这类事情?

感谢您提出任何建议或解答.对于这个问题的长度感到很抱歉:我仍然深深地陷入了这个想法中,很快就很难解释.

编辑:以下是显示每种算法的两个网页,以及之前发现的存储:http: //zacharymaril.com/thoughts/constructionGraph.html

没有先前发现的存储:http: //zacharymaril.com/thoughts/Expanding%20Frontier/expandingFrontier.html

它们都是Chrome浏览器的最佳选择.这是我用来制作它的浏览器,如果用ctrl shift i打开开发面板并输入"times",你可以看到迄今为止的所有时间的集合.

eva*_*van 4

程序的内存和速度并不紧密相关。

简单的例子:

  • 几乎没有内存但有大量硬盘驱动器空间的计算机将消耗硬盘驱动器的虚拟内存。这会减慢速度,因为硬盘驱动器比内存慢得多。
  • 用所有内存构建的计算机不会做同样的事情。它不必转到硬盘驱动器,因此速度会更快。
  • 缓存通常会占用大量内存。它还显着提高了应用程序的速度。这就是内存缓存的工作原理。
  • 一个算法可能需要很长时间,但使用的内存很少。想象一个尝试计算 PI 的程序。它永远不会完成,但需要很少的内存。

一般来说,您使用的内存越少(减去缓存),速度就越好,因为您遇到其他进程施加的限制的机会就越小。

如果您的程序需要花费大量时间来计算将再次引用的项目。将它们缓存在内存中是有意义的,这样您就不需要重新计算它们。

您可以通过向缓存项目添加超时来混合两者。每次将另一个项目添加到缓存时,您都会检查其中的项目并删除一段时间内未访问过的项目。“一段时间”由您的需要决定。