Articles of algorithm

在Javascript中实现时间间隔树

我正在寻找用Javascript编写的Interval-Tree实现。 search了一下,发现没有用JS写的东西。 我发现的是NodeJS的项目,它实际上不在客户端工作(我错了?): 间隔-tree2 JavaScript的algorithm 你用Javascript中的间隔树实现家庭吗? 谢谢。

如何制作一个独特且难以猜测和预测的标记?

一旦我的用户通过第三方(Facebook或Twitter)进行身份validation,我需要生成一个令牌。 我将这个令牌返回给客户端,他们将能够使用它访问所有的用户信息。 我需要令牌难以猜测,难以预测。 (硬意味着用现代桌面猜测需要一两天的时间) MySQL具有UUID()函数,该函数生成一个唯一的值,但是文档也说明了它不可猜测或不可预测。 我不确定这是否意味着不难猜测或预测。

扑克手发电机和评估

我确信这个话题已经被掩盖了,但是我花了好几个小时的时间来尝试解决问题,找不到解释过程的足够的资源。 请注意,我是JS的新手,仍然依靠教程和代码片段来编写代码。 我还没有足够的信心从头开始编写代码。 目标: 在JavaScript中,“抽取”5张随机卡片 在所有可能的牌中评估牌的等级 根据卡的等级,从一个variables最小/最大值返回一个分数,除非它小于一对。 最后,能够根据等级(小于,大于或正好)绘制一个随机的手。 返回等级为100或更小的牌。 (可以带回100个不同的手) 例如。 而最低 – 最高分是10-30。 如果皇家冲洗出来,返回30(最好的手意味着最好的分数)。 如果低两对(6H 6D 2C 2H 5S)出来返回13.如果高两对(AH AD QC QH 5S),返回14.等等[这些可能不准确的分数,但你得到漂移] 我的研究成果: 随机抽取 :许多应用程序已经实现了这个 到目前为止,我的最爱是本教程: http : //www.informit.com/library/content.aspx?b= STY_JavaScript_24_hours&seqNum= 229它很简单,得到的结果,但不提供一个完整的评估,只有按类别(一对,二对,三等)。 我需要一个能够给两双有更高分数的评价。 评估人员 :这有点混乱。 我find了一个非常基本的评估者,它使用javascript : http : //jsfiddle.net/subskybox/r4mSF/但它太基本了。 不给我一个完整的排名。 我也发现了这个: https : //github.com/chenosaurus/poker-evaluator ,它使用Two Plus Twoalgorithm和查找表。 现在,这听起来很不错,但我很困惑如何将其安装到我的网站,或如何使用它。 它说: 安装:npm安装扑克评估器 ,这是我以前从来没有听说过的。 转换评分为分数 :应该是相当简单的math。 […]

如何find其他重叠号码范围之间的免费号码范围

我有narrays。 每个数组有m个元素。 每个元素m由两个属性[数字]组成。 { start: x end: y } 开始和结束号码,一起描述一个范围。 所以开始每一次都比结束小。 我试图find空闲的数字范围(再次与开始和结束),他们之间的所有arrays的范围元素。 另外结果是在一个范围内。 例如: var boundary = { start: 0, end: 600 }; // for example i use two arrays with ranges, but in reality they are n (>= 1) var numbersRanges1 = [ {start: 100, end: 120}, {start: 180, end: 200}, {start: 400, end: […]

如何用nodejs打包2D盒子?

我正在开发一个节点js的web应用程序,我需要使用一个盒子打包algorithm来find最佳的解决scheme。 我可以尝试自己做一个algorithm( http://en.wikipedia.org/wiki/Packing_problems ),但我想知道这样的事情是否已经存在? 任何想法? 目前我有一个像这样的对象数组。 var box = [ {info: 'some info', width:200, height: 50}, {info: 'some info', width:200, height: 50} ]; 我想要有(x,y)坐标,知道在哪里把每个盒子打包到一个2D空间中。

像mongoose文件的结构一样在树上recursion

我需要帮助从我的数据库通过get请求拉出对象的对象,所以我可以在我的网页上显示所有的对象,但是我运行的这个testing已经失败了,debugging它,它只是运行到永远,并且从不接收JSON。 我认为我的逻辑可能会被搞乱。 我不确定是否应该使用asynchronous,这看起来像callback地狱,现在想想我应该,但我不知道如果在优化思考如果这是一个体面的方式,我通常从最坏的情况下,我试图低于我的目标是围绕O(N),因为有N个文件,我只是遍历一个recursion树,还有一些额外的查询,以find最初的文件和什么不是这样,N + X(其中x是额外的查询量<N)。 但是我觉得我好像在思想上错过了一些东西,好像有更好的办法。 我有一个架构,像这样 Doc { title : string, author : string, subDoc : [{type: mongoose.Schema.Types.ObjectId, ref : 'Doc'}] } 所以有我生成的文件,每次我生成这些文件我有这些文件可以存在的子文档,甚至这些子文档可以有子文档。 然后我们结束了一些树状结构。 但是我不想显示文档>然后它的sub_doc1>所有的子目录…等>其子文档2>所有的子文档..>等等。 不过,我不知道我在想什么是有效的,甚至是值得做这么多的查询。 app.get('/docs/:doc/subDocTree', function(req, res) { var array = []; var id = req.params.doc; var num_proc = 0; console.log(id); Doc.findById(id, function(err, doc) { console.log(doc); for (var x = 0; x […]

非常长的排列 – 句子的字谜

我有一个近2700个string的数组,我需要为一个句子的anagramfind正确的短语。 该列表是一个有序的列表,其中包含几乎10万条长的单词列表。 而且我想把它们分成1,2和3个单词,如果它们符合我的长度,就可以匹配单词的长度。 我试过这个function,但在内存上失败了,我可以设置最多3个单词在一起匹配: var permutations = require('./permutations.js').permutations; var shortList = words.slice(10, 20); var result = permutations(shortList); console.log(result); 这在permutation.js中 (function (exports) { 'use strict'; var permutations = (function () { var res; function swap(arr, i, j) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } function permutations(arr, current) { if (current >= […]

在树结构中find所有独特的path

假设我有一个文本文件中的目录结构 root1 child1 child2 grandchild1 grandchild2 child3 root2 child1 child2 grandchild1 greatgrandchild1 我怎样才能把上面的树结构变成一个看起来像这样的嵌套数组: [ [ "root1", "child1" ], [ "root1", "child2", "grandchild1" ], [ "root1", "child2", "grandchild2" ], [ "root1", "child3" ], [ "root2", "child1" ], [ "root2", "child2", "grandchild1", "greatgrandchild1" ] ] 编辑 进一步,但仍然有问题recursion地穿过树 var $text = '' + 'root1\n' + ' r1 child1\n' […]

Javascript中的纵向冗余检查

我正在使用集成销售点(POS)设备的系统,我使用chrome串口扫描端口并能够读取信用卡数据。 我面临的问题是我需要从这个格式的string连接LRC: STX ='\ 002'(2 HEX)(文本开始) LLL =数据长度(不包括STX或ETX,但命令)。 Command C50 {C =从PC到POS的消息,50在POS上“打印”消息的实际代码} ETX ='\ 003'(3 HEX)(文本结尾) LRC = 纵向冗余检查 消息示例如下: '\002014C50HELLO WORLD\003' 这里我们可以看到002为STX,014是从C50到D的长度,003是ETX。 我在C#中find了这样一个或者这个 ,甚至是Java中的一些algorithm,我甚至在Google的caching中看到了从SO上移除的这个问题 , 这个问题其实和我一样问,但没有例子或答案。 我也做了这个Javaalgorithm: private int calculateLRC(String str) { int result = 0; for (int i = 0; i < str.length(); i++) { String char1 = str.substring(i, i + 1); char[] […]

简化Node.js服务器的速率限制algorithm

我想出了一个针对Node.js服务器速率限制algorithm的天真解决scheme,我相信有一种方法可以简化它,但我不确定如何。 我们希望限制每秒50个请求。 所以如果最新的请求进来,最近的请求和50个位置之间的时间间隔小于1秒,我们应该拒绝新的请求。 实现这一点的天真的方法是有一个简单的数组,包含50个时间戳。 每次事件进来时,我们都给它赋值Date.now()/ process.hrtime()。 然后,我们查看队列中第50个(最后一个)时间戳的时间戳值以及新请求的Date.now()值,如果时间戳的差值大于1秒,那么我们接受新的请求并将其解除“队列”,并从队列中popup最早的时间戳。 但是,如果差值小于1秒,我们必须拒绝这个请求,而且我们也不会将其转移到队列中,也不会popup最早的时间戳。 这是我在Express服务器上的代码 var mostRecentRequestsTimestamps = []; app.use(function(req,res,next){ if(req.baymaxSource && String(req.baymaxSource).toUpperCase() === 'XRE'){ var now = process.hrtime(); //nanoseconds if(mostRecentRequestsTimestamps.length < 50){ mostRecentRequestsTimestamps.unshift(now); next(); } else{ var lastItem = mostRecentRequestsTimestamps.length -1; if(now – mostRecentRequestsTimestamps[lastItem] < 1000){ // 1000 milliseconds = 1 second res.status(503).json({error: 'Server overwhelmed by XRE events'}); } else{ […]