Questions tagged «optimization»

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


25
四舍五入到2的下一位
我想编写一个函数,该函数返回最接近的2的下一个幂。例如,如果我的输入为789,则输出应为1024。是否有任何方法可以在不使用任何循环而仅使用一些按位运算符的情况下实现这一目标?

10
如果按概率排序if ... else if语句有什么作用?
具体来说,如果我有一系列if... else if语句,并且我以某种方式预先知道每个语句将求和的相对概率,true那么按概率顺序对它们进行排序会在执行时间上造成多少差异?例如,我是否应该这样: if (highly_likely) //do something else if (somewhat_likely) //do something else if (unlikely) //do something 为此?: if (unlikely) //do something else if (somewhat_likely) //do something else if (highly_likely) //do something 显然,排序后的版本会更快,但是出于可读性或副作用的考虑,我们可能希望对它们进行非最佳排序。在实际运行代码之前,很难说出CPU在分支预测方面的表现如何。 因此,在尝试这一过程中,我最终针对特定案例回答了自己的问题,但是我也想听听其他意见/见解。 重要说明:该问题假设if语句可以任意重新排序,而对程序的行为没有任何其他影响。在我的回答中,这三个条件测试是互斥的,不会产生副作用。当然,如果必须以某种顺序对语句进行评估才能实现某些所需的行为,那么效率问题就不那么重要了。

3
GHC可以可靠地执行哪些优化?
GHC可以执行很多优化,但是我不知道它们全都有,也不知道它们在多大程度上会在什么情况下执行。 我的问题是:我希望每次或几乎都会应用哪些转换?如果我查看一段要经常执行(评估)的代码,而我的第一个念头是“嗯,也许我应该优化它”,在这种情况下,我的第二个念头应该是:“甚至不要考虑它, GHC收到了这个?” 我正在阅读论文《流融合:从列表到流再到什么都没有》,而他们使用的将列表处理重写为另一种形式的技术对我来说是新颖的,GHC的常规优化然后可以将其可靠地优化为简单的循环。我如何知道自己的程序何时可以进行这种优化? 《 GHC手册》中有一些信息,但这只是回答问题的一部分。 编辑:我开始赏金。我想要的是较低级转换的列表,例如lambda / let / case-floating,type / constructor / function参数专门化,严格性分析和拆箱,worker / wrapper以及我遗漏的其他重要GHC所做的其他事情,以及输入和输出代码的说明和示例,以及理想情况下总效果超过其各个部分之和的情况的说明。理想情况下,提到何时不进行转换发生。我不希望每个转换都有新颖的解释,只要大的图景就可以用几个句子和内联的单行代码示例就足够了(或者链接,如果不是到二十页的科学论文)。最后清除。我希望能够看一段代码,并能够很好地猜测它是否可以编译成一个紧密的循环,或者为什么不编译,或者我必须进行更改以使其得以实现。(我对诸如流融合之类的大型优化框架不那么感兴趣(我只是读过一篇文章),而对编写这些框架的人所拥有的知识则没有那么大的兴趣。)

14
MYSQL OR vs IN性能
我想知道以下两者之间在性能方面是否有任何区别 SELECT ... FROM ... WHERE someFIELD IN(1,2,3,4) SELECT ... FROM ... WHERE someFIELD between 0 AND 5 SELECT ... FROM ... WHERE someFIELD = 1 OR someFIELD = 2 OR someFIELD = 3 ... 还是MySQL将以与编译器优化代码相同的方式优化SQL? 编辑:改变了AND's到OR的在注释中规定的原因。

1
为什么提早归还比其他要慢?
这是我几天前给出的答案的后续问题。编辑:该问题的OP似乎已经使用了我发布给他的代码来问同样的问题,但是我没有意识到。道歉。提供的答案是不同的! 我基本上观察到: >>> def without_else(param=False): ... if param: ... return 1 ... return 0 >>> def with_else(param=False): ... if param: ... return 1 ... else: ... return 0 >>> from timeit import Timer as T >>> T(lambda : without_else()).repeat() [0.3011460304260254, 0.2866089344024658, 0.2871549129486084] >>> T(lambda : with_else()).repeat() [0.27536892890930176, 0.2693932056427002, 0.27011704444885254] >>> …

7
哪个最快?从“表”中选择SELECT SQL_CALC_FOUND_ROWS,或选择COUNT(*)
当您限制通常用于分页的SQL查询返回的行数时,有两种方法可以确定记录总数: 方法1 将SQL_CALC_FOUND_ROWS选项包括在原始选项中SELECT,然后通过运行获取总行数SELECT FOUND_ROWS(): SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE id > 100 LIMIT 10; SELECT FOUND_ROWS(); 方法2 正常运行查询,然后通过运行获取总行数 SELECT COUNT(*) SELECT * FROM table WHERE id > 100 LIMIT 10; SELECT COUNT(*) FROM table WHERE id > 100; 哪种方法最好/最快?

1
我可以通过给出整数范围来提示优化器吗?
我正在使用一种int类型来存储值。根据程序的语义,该值始终在很小的范围内(0-36)变化,并且int(不是a char)仅由于CPU效率而使用。 似乎可以对这么小的整数范围执行许多特殊的算术优化。这些整数上的许多函数调用可能被优化为一小组“魔术​​”运算,甚至某些函数甚至可能被优化为表查找。 因此,是否可以告诉编译器这int总是在很小的范围内,并且编译器可以进行那些优化?


2
为什么与普通函数相比,编译器可以更好地优化lambda?
The C++ Standard Library (Second Edition)Nicolai Josuttis 在他的书中指出,与普通函数相比,编译器可以更好地优化lambda。 此外,C ++编译器比常规函数更好地优化了lambda。(第213页) 这是为什么? 我认为在进行内联时,应该不再有任何区别。我能想到的唯一原因是,编译器可能具有更好的lambda本地上下文,这样可以做出更多的假设并执行更多的优化。

7
Java NIO FileChannel与FileOutputstream的性能/实用性
我试图弄清楚,当我们使用nio FileChannel与常规的FileInputStream/FileOuputStream方式将文件读写到文件系统时,性能(或优势)是否存在任何差异。我观察到,在我的机器上,两者的性能都相同,而且FileChannel速度也慢了很多倍。请问您可以比较这两种方法的更多详细信息。这是我使用的代码,正在测试的文件在左右350MB。如果我不考虑随机访问或其他此类高级功能,是否可以将基于NIO的类用于文件I / O是一个好选择吗? package trialjavaprograms; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class JavaNIOTest { public static void main(String[] args) throws Exception { useNormalIO(); useFileChannel(); } private static void useNormalIO() throws Exception { File file = new File("/home/developer/test.iso"); File oFile = new File("/home/developer/test2"); …

21
棘手的Google面试问题
我的一个朋友正在面试工作。采访中的一个问题让我思考,只想要一些反馈。 有2个非负整数:i和j。给定以下方程式,找到一种(最佳)解决方案以对i和j进行迭代,以对输出进行排序。 2^i * 5^j 因此,前几轮如下所示: 2^0 * 5^0 = 1 2^1 * 5^0 = 2 2^2 * 5^0 = 4 2^0 * 5^1 = 5 2^3 * 5^0 = 8 2^1 * 5^1 = 10 2^4 * 5^0 = 16 2^2 * 5^1 = 20 2^0 * 5^2 = …

23
切换if-else语句的优势
switch与使用if语句进行30个unsigned枚举(其中约10个具有预期动作(当前是相同动作))相比,使用语句的最佳实践是什么?性能和空间需要考虑,但不是关键。我已经摘录了摘要,所以不要因为命名约定而讨厌我。 switch 声明: // numError is an error enumeration type, with 0 being the non-error case // fire_special_event() is a stub method for the shared processing switch (numError) { case ERROR_01 : // intentional fall-through case ERROR_07 : // intentional fall-through case ERROR_0A : // intentional fall-through case ERROR_10 : …

20
“ for(;;)”比“ while(TRUE)”更快吗?如果没有,人们为什么要使用它?
for (;;) { //Something to be done repeatedly } 我已经看到这种东西使用了很多,但是我觉得这很奇怪……说起来不是那么清晰while(true),或者类似的话吗? 我猜想(这是许多程序员诉诸密码的原因),这快一点点吗? 为什么,真的值得吗?如果是这样,为什么不这样定义呢? #define while(true) for(;;) 另请参阅:哪个更快:while(1)或while(2)?

21
迪士尼的FastPass是否有效和/或有用的排队论
在迪士尼世界,他们使用称为Fastpass的系统为热门游乐设施创建第二条较短的路线。这个想法是,您可以在标准行中等待,通常需要等待一个小时以上,或者您可以获取FastPass,它允许您在指定的时间段(通常是几个小时后)返回,仅等待10分钟以内。使用FastPass一次只能“等待”一次乘车。 我一直在试图弄清这个概念背后的排队理论,但是我发现的唯一解释是,它旨在使人们脱颖而出并做一些可以带来额外收入(购物,饮食等)的事情。 这是为什么要实施FastPass,还是要解决一个真正的访客效率问题?是否有应用了类似逻辑的软件应用程序?是否有应采用类似逻辑的软件应用程序? 我看到在软件中实现类似功能的部分问题是它基于用户选择队列。为了使软件中的等待周期更快,我认为,如果要很好地应用此理论,就需要应用程序足够聪明,才能根据需要将人们放置在哪些队列中,而无需最终用户选择。

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.