任何人都可以给我一个LLparsing与LRparsing的简单例子吗?
计算数字的最大素数的最好方法是什么? 我认为最有效的将是以下几点: find干净划分的最低质数 检查分割结果是否为素数 如果没有,find下一个最低 转到2。 我基于这个假设更容易计算小素因子。 这是对的吗? 我应该考虑哪些其他方法? 编辑:我现在已经意识到,如果有两个以上的素数因子在作用,我的方法是徒劳的,因为如果结果是两个其他素数的乘积,则步骤2失败,因此需要recursionalgorithm。 再次编辑:现在我已经意识到,这仍然有效,因为最后find的素数必须是最高的,因此从步骤2开始的任何非素数结果的进一步testing都会导致更小的素数。
有没有办法测量一个列表的sorting方式? 我的意思是,这不是要知道一个列表是否被sorting(布尔),而是像“sorting”的比率,就像统计中的相关系数一样。 例如, 如果列表中的项目按升序排列,那么它的比率就是1.0 如果列表按降序排列,则其速率将为-1.0 如果列表几乎按升序sorting,则其比率将为0.9或接近1的某个值。 如果列表根本没有sorting(随机),它的速率将接近于0 我正在斯卡拉的一个小型图书馆练习。 我认为sorting率是有用的,但我没有find任何关于这样的信息。 也许我不了解这个概念的充分条件。
在迪斯尼世界,他们使用Fastpass系统为受欢迎的游乐设施制作第二条较短的路线。 这个想法是,你可以等待标准线,经常等待一个多小时,或者你可以得到一个FastPass,它允许你在指定的时间段内(通常在几个小时之后)回来,只等10分钟或更less。 您只能使用FastPass一次“等”一次。 我一直在试图弄清楚这个概念背后的排队理论,但是我发现唯一的解释是它的目的是让人们脱离线路,做一些会带来额外收入的东西(购物,吃东西等等)。 这就是为什么FastPass被实现的原因,还是存在真正的游客效率问题? 有没有应用软件类似的逻辑? 有软件应用程序应该应用类似的逻辑吗? 我看到在软件中实现类似的问题的一部分是,它是基于用户select他们的队列。 为了在软件中实现更快的等待周期,我认为这个理论的一个很好的应用将要求应用程序足够聪明,根据自己的需求知道将什么队列放入,而不需要最终用户的select。
我怀疑答案是“ 因为math ”,但我希望有人能够在基本层面上多一点洞察力。 我今天在BCL源代码中探索一下,看看我之前使用过的一些类是如何实现的。 我从来没有想过如何生成(伪)随机数,所以我决定看看它是如何完成的。 完整源代码在这里: http : //referencesource.microsoft.com/#mscorlib/system/random.cs#29 private const int MSEED = 161803398; 每次使用Random()类时,都会使用此MSEED值。 无论如何,我看到这个“神奇的数字” – 161803398 – 我不知道为什么这个数字被选中。 这不是一个素数或二的权力。这不是一个数字的“一半”,似乎更重要。 我用二进制和hex来查看它,它对我来说只是一个数字。 我试图在Googlesearch这个号码,但是我什么也没find。
我的一个朋友正在面试工作。 其中一个面试问题让我思考,只是想得到一些反馈。 有2个非负整数:我和j。 给定以下等式,find一个(最优)解决scheme来迭代i和j,使得输出被sorting。 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 = 25 尝试我可能,我看不到一个模式。 你的想法?
给定的整数值x和y ,C和C ++都返回作为商q = x/y浮点等价的底线。 我感兴趣的是返回天花板的方法。 例如, ceil(10/5)=2和ceil(11/5)=3 。 显而易见的方法包括: q = x / y; if (q * y < x) ++q; 这需要额外的比较和乘法; 和我见过的其他方法(事实上使用)涉及到作为一个float或double铸造。 有没有一个更直接的方法,避免额外的乘法(或第二个分裂)和分支,这也避免铸造为浮点数?
设想两个正整数A和B.我想把这两个整合成一个整数C. 没有其他整数D和E结合到C中,所以把它们和加法运算符结合起来是行不通的。 例如30 + 10 = 40 = 40 + 0 = 39 + 1连接工作也没有。 例如“31”+“2”= 312 =“3”+“12” 这种组合操作也应该是确定性的(总是用相同的input产生相同的结果), 并且应该总是在整数的正或负上产生一个整数。
这里的二叉树可能不一定是二叉search树。 该结构可以被视为 – struct node { int data; struct node *left; struct node *right; }; 我可以和朋友一起解决的最大的解决scheme就是这样的 – 考虑这个二叉树 : 二叉树http://lcm.csa.iisc.ernet.in/dsa/img151.gif 中序遍历产生 – 8,4,9,2,5,1,6,3,7 而后序遍历产生 – 8,9,4,5,2,6,7,3,1 例如,如果我们想要find节点8和节点5的共同祖先,那么我们在中序树遍历中列出所有在8和5之间的节点,在这种情况下恰好是[4,9 ,2]。 然后我们检查这个列表中的哪个节点在后序遍历中最后出现,这是2.因此,对于8和5的共同祖先是2。 这个algorithm的复杂性,我相信是O(n)(O(n)对于inorder / postorder遍历,其余的步骤再次是O(n),因为它们只不过是数组中的简单迭代)。 但是这是错误的。 🙂 但是这是一个非常粗糙的方法,我不确定是否在某些情况下出现故障。 有没有其他(可能更优化)解决这个问题?
我昨天在一个algorithmtesting中遇到过这个问题,我无法弄清楚答案。 这让我非常疯狂,因为它值得大约40分。 我认为大部分class级都没有正确解决,因为在过去24小时内我还没有提出解决scheme。 给定长度为n的任意二进制string,如果它们存在,则在string内find三个均匀分布的string。 写一个在O(n * log(n))时间内解决这个问题的algorithm。 所以像这样的string有三个“均匀间隔”:11100000,0100100100 编辑:这是一个随机数,所以它应该能够为任何数字工作。 我给的例子是说明“均匀间隔”的属性。 所以1001011是一个有效的数字。 1,4和7是均匀分布的。