Questions tagged «discrete-mathematics»

10
如何计算Java中以整数为底的对数2?
我使用以下函数为整数计算对数基数2: public static int log2(int n){ if(n <= 0) throw new IllegalArgumentException(); return 31 - Integer.numberOfLeadingZeros(n); } 它是否具有最佳性能? 有人知道为此目的准备好了J2SE API函数吗? UPD1 对于我来说,令人惊讶的是,浮点运算似乎比整数运算要快。 UPD2 由于有评论,我将进行更详细的调查。 UPD3 我的整数算术函数比Math.log(n)/Math.log(2)快10倍。

8
适用于初学者的Haskell或Standard ML?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 我将要教授离散结构的低年级课程。我之所以选择教科书“离散结构,逻辑和可计算性”,部分原因是它包含有助于使用功能性编程语言实现的示例和概念。(我也认为这是一本好教科书。) 我希望使用一种易于理解的FP语言来说明DS概念并供学生使用。大多数学生充其量只用Java进行一两个学期的编程。在查看了Scheme,Erlang,Haskell,Ocaml和SML之后,我选择了Haskell或Standard ML。由于以下原因,我倾向于Haskell,但我希望那些积极参与其中的程序员的意见。 Haskell和SML都具有模式匹配,这使得描述递归算法变得很困难。 Haskell具有很好的列表理解能力,与此类列表的数学表达方式非常匹配。 Haskell的评价很懒。非常适合使用列表理解技术构造无限列表。 SML具有真正的交互式解释器,可以在其中定义和使用功能。在Haskell中,必须先在单独的文件中定义函数并进行编译,然后才能在交互式shell中使用这些函数。 SML以易于理解的语法明确确认了函数参数和返回类型。例如:val foo = fn:int * int-> int。Haskell的隐式咖喱语法有点晦涩,但并非完全陌生。例如:foo :: Int-> Int-> Int。 Haskell默认情况下使用任意精度整数。它是SML / NJ中的外部库。SML / NJ默认将输出截断为70个字符。 Haskell的lambda语法很微妙-它使用单个反斜杠。SML更明确。不过,不确定是否在此类中是否需要lambda。 本质上,SML和Haskell大致等效。我倾向于Haskell,因为我喜欢Haskell中的列表理解和无限列表。但是我担心Haskell紧凑语法中的大量符号可能会引起学生问题。从我在SO上的其他文章中收集的信息来看,不建议Haskell开始使用FP。但是,我们不会尝试使用简单的算法来构建功能完善的应用程序。 你怎么看? 编辑:在阅读了您的一些好评后,我应该澄清一些要点。 在SML中,在解释器中定义函数与在外部文件中定义函数之间在语法上没有区别。假设您要编写阶乘函数。在Haskell中,您可以将此定义放入文件中并将其加载到GHCi中: fac 0 = 1 fac n = n * fac (n-1) 对我来说,这很清楚,简洁,并且与书中的数学定义相符。但是,如果要直接在GHCi中编写函数,则必须使用其他语法: let fac 0 = 1; fac …
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.