Questions tagged «optimization»

优化是改进方法或设计的行为。在编程中,优化通常采取提高算法速度或减少所需资源的形式。优化的另一个含义是机器学习中使用的数值优化算法。

26
为什么处理排序数组比处理未排序数组快?
Наэтотвопросестьответына 堆栈溢出нарусском:Почемуотсортированныймассивобрабатываетсябыстрее,чемнеотсортированный? 这是一段C ++代码,显示了一些非常特殊的行为。出于某些奇怪的原因,奇迹般地对数据进行排序使代码快了将近六倍: #include <algorithm> #include <ctime> #include <iostream> int main() { // Generate data const unsigned arraySize = 32768; int data[arraySize]; for (unsigned c = 0; c < arraySize; ++c) data[c] = std::rand() % 256; // !!! With this, the next loop runs faster. std::sort(data, data + arraySize); …

30
我应该为JavaScript链接使用哪个“ href”值,“#”或“ javascript:void(0)”?
以下是构建链接的两种方法,其唯一目的是运行JavaScript代码。在功能,页面加载速度,验证目的等方面哪个更好? function myJsFunc() { alert("myJsFunc"); } <a href="#" onclick="myJsFunc();">Run JavaScript Code</a> 运行代码段隐藏结果展开摘要 要么 function myJsFunc() { alert("myJsFunc"); } <a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a> 运行代码段隐藏结果展开摘要

10
提高SQLite每秒INSERT的性能
优化SQLite是棘手的。C应用程序的大容量插入性能可以从每秒85次插入到每秒96,000次以上插入! 背景:我们正在将SQLite用作桌面应用程序的一部分。我们将大量配置数据存储在XML文件中,这些文件将被解析并加载到SQLite数据库中,以便在初始化应用程序时进行进一步处理。SQLite是这种情况的理想选择,因为它速度快,不需要专门的配置,并且数据库作为单个文件存储在磁盘上。 基本原理: 最初,我对看到的性能感到失望。事实证明,取决于数据库的配置方式和使用API​​的方式,SQLite的性能可能会发生很大的变化(对于批量插入和选择)。弄清楚所有选项和技术是什么都不是一件容易的事,因此,我认为创建此社区Wiki条目与Stack Overflow阅读器共享结果以节省其他人的麻烦是审慎的做法。 实验:我认为,最好是编写一些C代码并实际衡量各种选择的影响,而不是简单地谈论一般意义上的性能提示(即“使用事务!”)。我们将从一些简单的数据开始: 28 MB TAB分隔的文本文件(约865,000条记录),用于多伦多市的完整运输时间表 我的测试计算机是运行Windows XP的3.60 GHz P4。 使用Visual C ++ 2005 将代码编译为“发布”,“完全优化”(/ Ox)和“最爱快速代码”(/ Ot)。 我正在使用直接编译到测试应用程序中的SQLite“合并”。我刚好拥有的SQLite版本(3.6.7)有点旧,但是我怀疑这些结果将与最新版本相当(如果您另有意见,请发表评论)。 让我们写一些代码! 代码:一个简单的C程序,它逐行读取文本文件,将字符串拆分为值,然后将数据插入SQLite数据库。在此“基准”版本的代码中,创建了数据库,但实际上不会插入数据: /************************************************************* Baseline code to experiment with SQLite performance. Input data is a 28 MB TAB-delimited text file of the complete Toronto Transit System schedule/route info from http://www.toronto.ca/open/datasets/ttc-routes/ …

30
确定整数的平方根是否为整数的最快方法
我正在寻找确定一个long值是否为完美平方(即其平方根是另一个整数)的最快方法: 通过使用内置Math.sqrt() 函数,我已经完成了简单的方法,但是我想知道是否有一种方法可以通过将自己限制为仅整数域来更快地完成操作。 维护查找表是不切实际的(因为大约有2 31.5个整数,其平方小于2 63)。 这是我现在做的非常简单明了的方法: public final static boolean isPerfectSquare(long n) { if (n < 0) return false; long tst = (long)(Math.sqrt(n) + 0.5); return tst*tst == n; } 注意:我在许多Project Euler问题中都使用了此功能。因此,没有其他人将不得不维护此代码。这种微优化实际上可能会有所作为,因为挑战的一部分是在不到一分钟的时间内完成每种算法,并且在某些问题中,需要数百万次调用此函数。 我已经尝试过不同的解决方案: 经过详尽的测试后,我发现0.5没有必要将Math.sqrt()的结果添加进去,至少在我的机器上没有。 的平方根倒数快速增快,但它给了不正确的结果对于n> = 410881.然而,所建议BobbyShaftoe,我们可以使用对于n <410881的FISR黑客攻击。 牛顿的方法比慢Math.sqrt()。这可能是因为Math.sqrt()使用了类似于牛顿方法的方法,但是是在硬件中实现的,因此它比Java快得多。同样,牛顿法仍然需要使用双精度。 一种经过改进的牛顿方法,其中使用了一些技巧,以便仅涉及整数数学运算,因此需要一些技巧来避免溢出(我希望此函数与所有正的64位带符号整数一起使用),但它仍然比慢Math.sqrt()。 二进制印章甚至更慢。这是有道理的,因为二进制印章平均需要16次通过才能找到64位数字的平方根。 根据John的测试,or在C ++中,使用语句比使用a更快switch,但是在Java和C#中,or和之间似乎没有区别switch。 我还尝试制作一个查找表(作为64个布尔值的私有静态数组)。然后or,我只是说而不是switch或statement if(lookup[(int)(n&0x3F)]) { test } else …

5
HTML中“角色”属性的目的是什么?
我一直在某些人的工作中看到角色属性。我也使用它,但是我不确定它的效果。 例如: <header id="header" role="banner"> Header stuff in here </header> 要么: <section id="facebook" role="contentinfo"> Facebook stuff in here </section> 要么: <section id="main" role="main"> Main content stuff in here </section> 此角色属性是否必要? 这个属性对语义更好吗? 它会提高SEO吗? 可以在此处找到角色列表,但是我看到有人组成了自己的角色。是否允许或正确使用role属性? 有什么想法吗?
1165 html  optimization  seo  roles 


11
用于测试Collat​​z猜想的C ++代码比手写汇编要快-为什么?
我用汇编语言和C ++语言为Euler Q14项目编写了这两种解决方案。它们是用于测试Collat​​z猜想的相同相同的蛮力方法。组装解决方案与 nasm -felf64 p14.asm && gcc p14.o -o p14 C ++使用 g++ p14.cpp -o p14 部件, p14.asm section .data fmt db "%d", 10, 0 global main extern printf section .text main: mov rcx, 1000000 xor rdi, rdi ; max i xor rsi, rsi ; i l1: dec rcx …

4
如何达到每个周期4个FLOP的理论最大值?
在现代的x86-64 Intel CPU上,如何实现每个周期4个浮点运算(双精度)的理论峰值性能? 据我了解,在大多数现代英特尔CPU上,一个SSE 需要三个周期,一个SSE需要add五个周期mul(例如,请参见Agner Fog的“指令表”)。由于流水线,add如果算法具有至少三个独立的求和,则每个循环的吞吐量可以达到一个。由于对于打包addpd以及标量addsd版本和SSE寄存器都可以包含2 double的情况都是如此,每个周期的吞吐量可以高达2触发器。 此外,似乎(虽然我还没有看到任何这适当的文件)add的和mul的可并行给予的四个理论最大吞吐量每个周期触发器执行。 但是,我无法使用简单的C / C ++程序来复制该性能。我的最佳尝试导致每个循环约2.7翻牌。如果有人可以提供一个简单的C / C ++或汇编程序,该程序可以证明其最高性能,将不胜感激。 我的尝试: #include <stdio.h> #include <stdlib.h> #include <math.h> #include <sys/time.h> double stoptime(void) { struct timeval t; gettimeofday(&t,NULL); return (double) t.tv_sec + t.tv_usec/1000000.0; } double addmul(double add, double mul, int ops){ // Need to initialise differently otherwise …

30
不得已的性能优化策略[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 这个站点上已经有很多性能问题,但是据我所知,几乎所有问题都是针对特定问题的,而且范围很窄。几乎所有人都会重复建议,以免过早优化。 假设: 该代码已经正常工作 选择的算法已经针对问题的情况进行了优化 代码已被测量,并且违规例程已被隔离 所有优化的尝试也将得到衡量,以确保它们不会使情况变得更糟 我在这里寻找的是策略和技巧,这些方法和技巧可以使关键算法中的最后几个部分都挤到最后几个百分点,而除了它需要做的事情之外,别无其他。 理想情况下,请尝试使答案与语言无关,并在适用时指出建议策略的任何不利方面。 我将添加带有自己的初步建议的回复,并期待Stack Overflow社区可以想到的其他任何内容。

16
获取实现接口的所有类型
使用反射,如何以最少的代码获得使用C#3.0 / .NET 3.5实现接口的所有类型,并最大程度地减少迭代次数? 这是我要重写的内容: foreach (Type t in this.GetType().Assembly.GetTypes()) if (t is IMyInterface) ; //do stuff

30
进行浮动和双重比较的最有效方法是什么?
比较两个double或两个float值的最有效方法是什么? 简单地这样做是不正确的: bool CompareDoubles1 (double A, double B) { return A == B; } 但是类似: bool CompareDoubles2 (double A, double B) { diff = A - B; return (diff < EPSILON) && (-diff < EPSILON); } 似乎是废物处理。 有人知道更聪明的浮点比较器吗?

30
迭代访问列表的最“ pythonic”方法是什么?
我有一个Python脚本,它将一个整数列表作为输入,我需要一次处理四个整数。不幸的是,我无法控制输入,或者将其作为四元素元组的列表传递。目前,我正在以这种方式对其进行迭代: for i in xrange(0, len(ints), 4): # dummy op for example code foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3] 不过,它看起来很像“ C思维”,这使我怀疑还有一种处理这种情况的更Python的方法。该列表在迭代后被丢弃,因此不需要保留。也许这样的事情会更好? while ints: foo += ints[0] * ints[1] + ints[2] * ints[3] ints[0:4] = [] 不过,还是不太“正确”。:-/ 相关问题:如何在Python中将列表分成均匀大小的块?


30
拼合不规则的列表
Наэтотвопросестьответына 堆栈溢出нарусском:Сделатьглубоковложенныйсписокплоскимбезветвленияициклов 是的,我知道以前已经讨论过这个主题(这里,这里,这里,这里),但是据我所知,除一个解决方案外,所有解决方案在这样的列表上都失败了: L = [[[1, 2, 3], [4, 5]], 6] 所需的输出是 [1, 2, 3, 4, 5, 6] 甚至更好的迭代器。这个问题是我看到的唯一适用于任意嵌套的解决方案: def flatten(x): result = [] for el in x: if hasattr(el, "__iter__") and not isinstance(el, basestring): result.extend(flatten(el)) else: result.append(el) return result flatten(L) 这是最好的模型吗?我有事吗 任何问题?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.