草庐IT

algorithm

全部标签

javascript - 3 个变量的总和 : strange behavior

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:IsJavaScript'sMathbroken?Whycan'tdecimalnumbersberepresentedexactlyinbinary?下一段代码的结果是什么:if(0.3==(0.1+0.1+0.1)){alert(true);}else{alert(false);}这很奇怪,但结果会是错误的。原因是0.1+0.1+0.1会是0.30000000000000004如何解释这种行为?

javascript - 没有循环的尾递归树遍历

我想以递归方式遍历以下树结构尾而不回退到循环:consto={x:0,c:[{x:1,c:[{x:2,c:[{x:3},{x:4,c:[{x:5}]},{x:6}]},{x:7},{x:8}]},{x:9}]};0/\19/|\278/|\346|5期望的结果:/0/1/2/3/4/5/6/7/8/9我想需要一个闭包来启用尾递归。到目前为止我已经试过了:consttraverse=o=>{constnextDepth=(o,index,acc)=>{constnextBreadth=()=>o["c"]&&o["c"][index+1]?nextDepth(o["c"][index+1

javascript - 找到命运之轮的值(value)

我有一张命运之轮的图片,我正在努力让它在旋转时显示正确的旋转量。我有以下代码:http://jsfiddle.net/maniator/rR67s/很多时候是对的,其他时候是错的。例如我纺这个:它警告了300,这是错误的。我怎样才能修正我的算法,使其在99%的时间内(或100%,如果可能的话)都是正确的?HTML:⇩Javascript:varWheel=(function(){varwheel=document.getElementById('wheel'),wheelValues=[5000,600,500,300,500,800,550,400,300,900,500,300,9

javascript - 确定定界形状边界的点的算法——使用 javascript

我正在开发一个htmlmap制作器,我想为我们的用户提供通过单击区域快速创建形状的能力,而不是让他们手动定义形状。首先让我们看看我们目前正在做什么。用户想要绘制区域A。他需要做的是在每个点上多次单击以定义形状的边界。我想知道是否有一种算法允许用户在A区域中单击并可以确定要放置哪些点以便在形状边界之后创建接近最佳的形状-基于图像对比度。我处理这个问题的第一个想法是确定离点击点最远的上、左、下、右点。将这四点作为我们的出发点。然后对于每个段,用一个新点对其进行分割,并沿着向量法线移动新点,直到我碰到对比边缘。当然,这种方法有一些局限性,但这是我可以假设的形状可以是凸的,凹的等等...对比度

javascript - 在 JavaScript 中将 O(n^3) 更改为 O(n^2)

这个问题在这里已经有了答案:Findingthreeelementsinanarraywhosesumisclosesttoagivennumber(15个答案)关闭5年前。我正努力在我的编码解决方案中节省时间。我有一个名为tripletSum的函数,它有两个参数x和a,其中x是一个数字,a是一个数组。如果列表a包含三个加起来等于数字x的元素,则此函数应该返回true,否则它应该返回错误。我已经创建了以下工作解决方案:functiontripletSum(x,a){for(vari=0;i但这似乎不是最佳实践。目前,如果我没记错的话,运行此函数所需的时间是O(n^3),我认为可以将时间

javascript - 使用Dijkstra算法寻找能够承载最大权重的路径

我有一个图,有X个节点和Y个边。加权边缘。重点是从一个节点开始,并在最后一个位置的另一个节点停止。现在问题来了:将问题可视化。边缘是道路,边缘权重是在道路上行驶的车辆的最大重量限制。我们想驾驶最大的卡车从A到F。我想要从A到F的所有路径的最大允许重量。我可以使用某种Dijkstra算法来解决这个问题吗?我不确定如何以我可以实现的算法的形式来表达这个问题。任何帮助深表感谢。我很困惑,因为Dijkstra算法只考虑最短路径。 最佳答案 如果我没理解错的话,你想找到一些具有最大瓶颈边的节点之间的路径。也就是说,你想要最小边尽可能大的路径。

javascript - 纸牌游戏手牌评估的组合学,带通配符和重复

正在开发一款具有多种曲折的拉米风格游戏:使用两副5组套牌而不是一组4组套牌(总共116张牌)。套房从3到King,每副牌有3张王牌(所以没有2也没有A)。11轮,第一轮每人3张牌,最后一轮每人13张牌。除了clown是百搭外,每张牌的值(value)都会轮到百搭,这对应于您手中的牌数。所以第一轮3是狂野的,第二轮4是狂野的……第11轮国王是狂野的(国王的数值为13)。目标是放下所有牌。一旦有人“出去”(放下所有牌),剩下的玩家就有一个回合放下所有牌或尽可能多的有效套牌/运行。无论您手中还剩下什么牌,您都会获得积分。玩家只能在至少有3张牌的组或回合中放下牌,即set:{3:c,3:d,3

javascript - 获取对象中所有项目组合的高效算法

给定一个包含n个键的数组或对象,我需要找到所有长度为x的组合。给定X是可变的。binomial_coefficient(n,x)。目前我正在使用这个:functioncombine(items){varresult=[];varf=function(prefix,items){for(vari=0;i输出是:["a","ab","abc","abcd","abd","ac","acd","ad","b","bc","bcd","bd","c","cd","d"]因此,如果我想要n=4中的二项式系数x=3,我会选择所有长度等于3的字符串。{abc,abd,acd,bcd}。所以我分两步进

JavaScript 合并相交的矩形

我需要一种方法来合并矩形对象数组(具有x,y,w,h属性的对象),仅当它们相交时。例如:merge([{x:0,y:0,w:5,h:5},{x:1,y:1,w:5,h:5}])将返回:[{x:0,y:0,w:6,h:6}]merge([{x:0,y:0,w:1,h:1},{x:5,y:5,w:1,h:1}])将返回:[{x:0,y:0,w:1,h:1},{x:5,y:5,w:1,h:1}]merge([{x:0,y:0,w:5,h:5},{x:1,y:1,w:5,h:5},{x:15,y:15,w:1,h:1}])将返回:[{x:0,y:0,w:6,h:6},{x:15,y:15,w:

javascript - 在给定的时间间隔内找到最短的二进制字符串

假设我有两个值0,我怎样才能选择x这样ab用最短的二进制扩展可能吗?到目前为止,我的方法是采用a的二进制字符串和b,去掉小数点,首先它们不同,展开a直到那时。如果有更多a消费,剥去最后一点。最后,添加1.在JavaScript中:varbinaryInInterval=function(a,b){if(a1||a>=b)returnundefined;vari,u,v,x='';a=a.toString(2).replace('.','');b=b.toString(2).replace('.','');for(i=0;i这行得通,但我不相信它通常是正确的。有什么想法吗?...编辑我已