小编Kip*_*Kip的帖子

确定整数平方根是否为整数的最快方法

我正在寻找最快的方法来确定一个long值是否是一个完美的正方形(即它的平方根是另一个整数):

  1. 我通过使用内置Math.sqrt() 函数以简单的方式完成了它,但我想知道是否有办法通过将自己限制为仅整数域来更快地完成它.
  2. 维护查找表是不切实际的(因为大约有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;
}
Run Code Online (Sandbox Code Playgroud)

注意:我在许多Project Euler问题中使用此函数.因此,没有其他人必须维护此代码.而这种微优化实际上可以产生影响,因为部分挑战是在不到一分钟的时间内完成每个算法,并且在某些问题中需要将此函数调用数百万次.


我尝试过不同的问题解决方案:

  • 经过详尽的测试后,我发现0.5不需要添加Math.sqrt()的结果,至少在我的机器上没有.
  • 快速逆平方根增快,但它给了不正确的结果对于n> = 410881.然而,所建议BobbyShaftoe,我们可以使用FISR劈对于n <410881.
  • 牛顿的方法慢了一点Math.sqrt().这可能是因为Math.sqrt()使用类似牛顿方法的东西,但在硬件中实现,因此它比Java快得多.此外,牛顿的方法仍然需要使用双打.
  • 一个修改过的牛顿方法,它使用了一些技巧,只涉及整数数学,需要一些黑客来避免溢出(我希望这个函数适用于所有正64位有符号整数),并且它仍然比它慢Math.sqrt().
  • 二进制斩甚至更慢.这是有道理的,因为二进制斩波平均需要16遍才能找到64位数的平方根.
  • 根据John的测试,or在C++中使用语句比使用语句更快switch,但在Java和C#中,or和之间似乎没有区别switch.
  • 我还尝试制作一个查找表(作为64个布尔值的私有静态数组).然后or我会说,而不是开关或声明if(lookup[(int)(n&0x3F)]) { test } else return false; …

java math optimization perfect-square

1403
推荐指数
22
解决办法
26万
查看次数

visibility:hidden和display:none之间有什么区别?

CSS规则visibility:hiddendisplay:none两个结果中的元素不可见.这些同义词是?

css visibility

1121
推荐指数
16
解决办法
54万
查看次数

如何强制浏览器重新加载缓存的CSS/JS文件?

我注意到一些浏览器(特别是Firefox和Opera)非常热衷于使用.css.js文件的缓存副本,即使在浏览器会话之间也是如此.当您更新其中一个文件但用户的浏览器继续使用缓存副本时,这会导致问题.

问题是:在更改文件时,强制用户浏览器重新加载文件的最优雅方法是什么?

理想情况下,解决方案不会强制浏览器在每次访问页面时重新加载文件.我会发布自己的解决方案作为答案,但我很好奇,如果有人有更好的解决方案,我会让你的投票决定.

更新:

在这里讨论了一段时间后,我发现John Millikinda5id的建议很有用.事实证明,有一个术语:自动版本控制.

我在下面发布了一个新的答案,它是我原来的解决方案和John的建议的组合.

SCdF建议的另一个想法是将伪造的查询字符串附加到文件中.(一些Python代码自动使用时间戳作为伪造的查询字符串由pi提交.).但是,有一些关于浏览器是否会使用查询字符串缓存文件的讨论.(请记住,我们希望浏览器缓存文件并在以后的访问中使用它.我们只希望它在更改后再次获取文件.)

由于不清楚伪造的查询字符串会发生什么,我不接受这个答案.

javascript css caching auto-versioning

957
推荐指数
26
解决办法
38万
查看次数

我如何"反编译"Java类文件?

我可以使用什么程序来反编译类文件?我真的会获得Java代码,还是只是JVM汇编代码?

关于这个站点上的Java性能问题,我经常看到那些"反编译"Java类文件的人的反应,看看编译器如何优化某些东西.

java decompiler

556
推荐指数
15
解决办法
74万
查看次数

我可以在目录中放入多少个文件?

我保存在一个目录中的文件数量是否重要?如果是这样,目录中有多少文件太多,文件太多会有什么影响?(这是在Linux服务器上.)

背景:我有一个相册网站,上传的每个图像都重命名为8位十六进制数字(例如a58f375c.jpg).这是为了避免文件名冲突(例如,如果上传了大量"IMG0001.JPG"文件).原始文件名和任何有用的元数据都存储在数据库中.现在,我在images目录中有大约1500个文件.这使得列出目录中的文件(通过FTP或SSH客户端)需要几秒钟.但我看不出它除此之外还有什么影响.特别是,对于向用户提供图像文件的速度似乎没有任何影响.

我想过通过制作16个子目录来减少图像数量:0-9和af.然后我会根据文件名的第一个十六进制数字将图像移动到子目录中.但我不确定是否有任何理由这样做,除了偶尔通过FTP/SSH列出目录.

filesystems limit

544
推荐指数
16
解决办法
30万
查看次数

如何在packages.json中指定所需的Node.js版本?

我有一个Node.js项目需要Node 12或更高版本.有没有办法在packages.json文件中指定它,以便安装程序会自动检查并通知用户是否需要升级?

version package node.js npm

187
推荐指数
6
解决办法
9万
查看次数

有没有理由在生成.equals()时更喜欢getClass()而不是instanceof?

我正在使用Eclipse生成.equals().hashCode(),并且有一个选项标记为"使用'instanceof'来比较类型".默认情况下,此选项可以取消选中并用于.getClass()比较类型.有什么理由我应该喜欢.getClass()instanceof

不使用instanceof:

if (obj == null)
  return false;
if (getClass() != obj.getClass())
  return false;
Run Code Online (Sandbox Code Playgroud)

使用instanceof:

if (obj == null)
  return false;
if (!(obj instanceof MyClass))
  return false;
Run Code Online (Sandbox Code Playgroud)

我通常检查instanceof选项,然后进入并删除" if (obj == null)"检查.(这是多余的,因为空对象总是会失败instanceof.)有什么理由不好吗?

java eclipse equals instanceof

168
推荐指数
8
解决办法
12万
查看次数

在MATLAB中有一个foreach吗?如果是这样,如果基础数据发生变化,它的表现如何?

MATLAB中是否有foreach结构?如果是这样,如果基础数据发生变化(即对象是否添加到集合中)会发生什么?

syntax matlab

167
推荐指数
7
解决办法
16万
查看次数

3个或更多数字的最小公倍数

如何计算多个数字的最小公倍数?

到目前为止,我只能在两个数字之间进行计算.但不知道如何扩展它来计算3个或更多数字.

到目前为止,这就是我做到的

LCM = num1 * num2 /  gcd ( num1 , num2 )
Run Code Online (Sandbox Code Playgroud)

使用gcd是计算数字的最大公约数的函数.使用欧几里得算法

但我无法弄清楚如何计算3个或更多数字.

algorithm math lcm

141
推荐指数
8
解决办法
14万
查看次数

有没有一个很好的理由我经常使用VARCHAR(255)(而不是另一个长度)?

在多个课程,书籍和工作中,我看到将文本字段定义为VARCHAR(255)作为"短"文本的默认类型.有没有什么好的理由经常选择长度为255,而不是一个漂亮的圆数?在有充分理由(无论今天是否适用)的情况下,过去的某个时间是坚持吗?

当然,我意识到,如果你以某种方式知道字符串的最大长度,那么更严格的限制会更理想.但是如果你使用VARCHAR(255)可能表示你不知道最大长度,那只是它是一个"短"字符串.


注意:我发现这个问题(VARCHAR(255)V TINYBLOB v TINYTEXT),它表示,VARCHAR(Ñ)需要Ñ 1个字节的存储空间用于Ñ <= 255,Ñ 2个字节的存储对的Ñ > 255.这是唯一的原因吗?这似乎有点武断,因为与VARCHAR(256)相比,你只能保存两个字节,你可以通过声明VARCHAR(253)轻松地保存另外两个字节.

database varchar database-design types

138
推荐指数
6
解决办法
11万
查看次数