javascript

java

python

c#

node.js

reactjs

android

php

c++

ruby-on-rails

html

jquery

git

css

ios

sql

.net

c

<img src="//i.stack.imgur.com/bk9VA.png" alt="" class="sponsor-tag-img" width="18" height="16"/>android

string

javascript中快速稳定的排序算法实现

我正在寻找一个大约200-300个对象的数组,对特定的键和给定的顺序(asc / desc)进行排序。 结果的顺序必须一致且稳定。

什么是最好的算法,你能提供一个在javascript中实现它的例子吗?

谢谢!

trans by 2019-08-21T16:34:30Z

graph - 为什么使用Dijkstra算法如果广度优先搜索(BFS)可以更快地做同样的事情?

两者都可用于从单一来源找到最短路径。 BFS运行于O(E+V),而Dijkstra运行于O((V+E)*log(V))

此外,我已经看到Dijkstra在路由协议中使用了很多。

因此,如果BFS可以更快地做同样的事情,为什么要使用Dijkstra算法呢?

trans by 2019-08-21T10:58:25Z

算法 - 程序员拼图:在整个游戏中编码国际象棋棋盘状态

不是严格意义上的问题,更多的是谜题......

多年来,我参与了一些新员工的技术访谈。 除了询问标准&#34;你知道X技术&#34; 问题,我也试图了解他们如何解决问题。 通常情况下,我会在面试前一天通过电子邮件向他们发送问题,并期望他们在第二天提出解决方案。

通常结果会非常有趣 - 错误但有趣 - 如果他们能解释为什么采取特定的方法,那么这个人仍会得到我的建议。

所以我想我会向Stack Overflow的观众抛出我的一个问题。

问题:您可以想到最有效的方式来编码国际象棋游戏(或其子集)的状态是什么? 也就是说,给定具有合法排列的棋盘的棋盘,编码该初始状态和游戏中的玩家所采取的所有后续合法移动。

答案不需要代码,只是您将使用的算法的描述。

编辑:正如其中一张海报所指出的,我没有考虑移动之间的时间间隔。 随意作为一个可选的额外:)考虑到这一点:)

EDIT2:只是为了进一步说明......请记住,编码器/解码器是规则感知的。 唯一真正需要存储的是播放器的选择 - 编码器/解码器可以认为其他任何东西都是已知的。

编辑3:在这里挑选一名胜利者很难:)很多很棒的答案!

trans by 2019-08-21T08:19:11Z

big o - 什么会导致算法具有O(log log n)复杂度?

此早期问题解决了可能导致算法具有O(log n)复杂性的一些因素。

什么会导致算法具有时间复杂度O(log log n)?

trans by 2019-08-20T05:38:03Z

算法 - 将均匀分布转换为正态分布

如何将均匀分布(大多数随机数生成器产生,例如介于0.0和1.0之间)转换为正态分布? 如果我想要选择的平均值和标准偏差怎么办?

trans by 2019-08-14T09:06:15Z

我在哪里可以获得“有用的”C ++二进制搜索算法?

我需要一个与C ++ STL容器兼容的二进制搜索算法,如标准库的upper_bound标题中的boost::binary_search,但我需要它来返回指向结果的迭代器,而不是一个简单的布尔告诉我是否 元素存在。

(另一方面,当他们为binary_search定义API时,标准委员会在想什么?!)

我主要担心的是我需要二进制搜索的速度,所以尽管我可以用其他算法找到数据,如下所述,我想利用我的数据被排序以获得二进制的好处这一事实 搜索,而不是线性搜索。

到目前为止boost::binary_searchupper_bound如果缺少原点则失败:

//lousy pseudo code
vector(1,2,3,4,6,7,8,9,0) //notice no 5
iter = lower_bound_or_upper_bound(start,end,5)
iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6

注意:只要与容器兼容,我也可以使用不属于std命名空间的算法。 比方说,像boost::binary_search

trans by 2019-08-13T23:13:45Z

algorithm - 计算数组中的反转

我正在设计一个算法来执行以下操作:给定阵列A[1... n],对于每个i < j,找到所有的反转对,例如A[i] > A[j].我使用合并排序并将阵列A复制到阵列B,然后比较两个阵列 ,但是我很难看到如何使用它来查找反转次数。 任何提示或帮助将不胜感激。

trans by 2019-08-13T08:47:49Z

c# - 一起计算sin和cos的最快方法是什么?

我想一起计算一个值的正弦和正弦值(例如创建一个旋转矩阵)。 当然我可以像sincos一样一个接一个地计算它们,但我想知道在需要两个值时是否有更快的方法。

编辑:总结到目前为止的答案:

  • 弗拉德说,有asm命令sincos计算它们(几乎与单独调用sincosf的时间相同)

  • 像Chi注意到的那样,这种优化有时已经由编译器完成(当使用优化标志时)。

  • caf指出,功能sincossincosf可能是可用的,只需包括math.h即可直接调用

  • 讨论使用查找表的tanascius方法存在争议。 (但是在我的计算机和基准测试场景中,它运行速度比sincos快3倍,而32位浮点的精度几乎相同。)

  • Joel Goodwin与一种非常快速逼近技术的有趣方法相关联,具有非常好的准确性(对我来说,这比查表更快)

trans by 2019-08-13T03:54:44Z

算法 - 想要理解动态规划的人的一个简单例子

我正在为想要学习动态编程的人寻找一个易于理解的例子。 关于什么是动态编程,这里有很好的答案。 斐波那契序列是一个很好的例子,但它太小而不能划伤表面。 它看起来是一个很好的主题,虽然我还没有参加算法课程,但希望它在我的春季名单上。

trans by 2019-08-11T10:41:43Z

寻找一个好的世界地图生成算法

我正在开展类似文明的游戏,我正在寻找一种用于生成类似地球的世界地图的好算法。 我已经尝试了一些替代方案,但尚未找到真正的赢家。

一种选择是使用Perlin噪声生成高度图,并在一定水平上添加水,以便世界上大约30%的土地是土地。 虽然Perlin噪音(或类似的基于分形的技术)经常用于地形并且相当逼真,但它并没有提供太多控制结果的数量,大小和位置的方式,我和#39 ; d喜欢从游戏玩法的角度来看。

Perlin noise

第二种选择是从随机定位的单瓦种子开始(我在瓦片网格上工作),确定大陆的所需大小,每个回合添加一个水平或垂直邻近现有的瓦片 大陆,直到你达到所需的大小。 重复其他大陆。 这种技术是文明4中使用的算法的一部分。问题在于,在放置了前几个大陆之后,可以选择被其他大陆包围的起始位置,从而赢得了#。 适合新的。 此外,它有一种太靠近的地方产生大陆的趋势,导致看起来更像河流而不是大陆。

Random expansion

有没有人碰巧知道一个好的算法,用于在基于网格的地图上生成逼真的大陆,同时保持对其数量和相对大小的控制?

trans by 2019-08-10T03:50:21Z

algorithm - 存储千个电话号码的最有效方法

这是一个谷歌面试问题:

存储有大约一千个电话号码,每个电话号码具有10个数字。 您可以假设每个数字的前5位数字相同。 您必须执行以下操作:一个。 搜索是否存在给定数字。湾 打印所有号码

这样做最有效的节省空间的方法是什么?

我回答哈希表和后来的霍夫曼编码,但我的采访者说我没有朝着正确的方向前进。 请帮帮我。

可以使用后缀trie帮助吗?

理想情况下,1000个数字存储每个数字需要4个字节,因此总共需要4000个字节来存储1000个数字。 在数量上,我希望将存储减少到&lt; 这是我的采访者向我解释的4000字节。

trans by 2019-08-08T20:49:28Z

算法 - 哈希表真的可以是O(1)吗?

哈希表可以实现O(1)似乎是常识,但这对我来说从来没有意义。 有人可以解释一下吗? 以下是两种情况:

答:该值是一个小于哈希表大小的int。 因此,该值是它自己的哈希值,因此没有哈希表。 但如果有,那将是O(1)并且仍然是低效的。

B.您必须计算值的哈希值。 在这种情况下,查找数据大小的顺序为O(n)。 在你做O(n)工作之后,查找可能是O(1),但在我眼中仍然是O(n)。

除非你有一个完美的哈希表或一个大的哈希表,否则每个桶可能有几个项目。 因此,无论如何,它在某个时刻转变为一个小的线性搜索。

我认为哈希表很棒,但我没有得到O(1)的名称,除非它只是理论上的。

维基百科关于哈希表的文章始终引用常量查找时间并完全忽略哈希函数的成本。 这真是一个公平的衡量标准吗?


编辑:总结我学到的东西:

  • 这在技术上是正确的,因为哈希函数不需要使用密钥中的所有信息,因此可以是恒定时间,并且因为足够大的表可以将冲突降低到接近恒定的时间。

  • 在实践中确实如此,因为随着时间的推移,只要选择散列函数和表大小来最小化冲突,即使这通常意味着不使用常量时间散列函数,它也只会有效。

trans by 2019-08-07T15:54:31Z

算法 - LR,SLR和LALR解析器之间有什么区别?

LR,SLR和LALR解析器之间的实际区别是什么? 我知道SLR和LALR是LR解析器的类型,但就解析表而言,它们的实际区别是什么?

以及如何显示语法是LR,SLR还是LALR? 对于LL语法,我们只需要显示解析表的任何单元格都不应包含多个生产规则。 LALR,SLR和LR的任何类似规则?

例如,我们如何才能显示语法

S --> Aa | bAc | dc | bda
A --> d

是LALR(1)但不是SLR(1)?


编辑(ybungalobill):我没有得到一个满意的答案,LALR和LR之间有什么区别。 因此LALR的表格较小,但它只能识别LR语法的一个子集。 有人可以详细说明LALR和LR之间的区别吗? LALR(1)和LR(1)足以应答。 它们都使用1个令牌前瞻,两个都是表驱动的! 它们有何不同?

trans by 2019-08-05T23:32:00Z

python - 在sph上均匀分布n个点

我需要一个算法,可以给我一个球体周围的位置N点(可能小于20),模糊地将它们展开。 没有必要“完美”,但我只是需要它,所以没有一个被捆绑在一起。

  • 这个问题提供了很好的代码,但是我找不到制作这种制服的方法,因为这似乎是100%随机化的。
  • 这个博客文章推荐有两种方式允许输入球体上的点数,但Saff和Kuijlaars算法完全是我可以转录的伪代码,我发现的代码示例包含“node [k]”,我不能 看到解释并破坏了这种可能性。 第二个博客的例子是黄金分割螺旋,它给了我奇怪的,褶皱的结果,没有明确的方法来定义恒定的半径。
  • 这个问题的算法看起来似乎可能有效,但是我无法将该页面上的内容拼凑成伪代码或任何东西。

我遇到的一些其他问题主题是随机均匀分布,这增加了我不关心的复杂程度。 我很抱歉这是一个如此愚蠢的问题,但我想表明我真的很努力,但仍然很短暂。

所以,我正在寻找的是简单的伪代码,可以在单位球体周围均匀分布N个点,这些点可以返回球形或笛卡尔坐标。 如果它甚至可以通过一点随机分布来更好(想想围绕恒星的行星,分散得很好,但有余地的余地)。

trans by 2019-08-05T12:18:37Z

algorithm - 如何在两个排序数组的并集中找到第k个最小元素?

这是一个家庭作业问题。 他们说需要a[i],其中b[i]a[i]是数组长度。

我们将这些数组命名为a[i]b[i]。显然,我们可以忽略所有a[i]b[i],其中i>ķ。
首先让我们比较a[k/2]b[k/2]。设b[k/2]&gt; a[k/2].因此我们也可以丢弃所有b[i],其中i>K / 2。

现在我们全部a[i],其中i&lt; k和所有b[i],其中i&lt; k / 2找到答案。

你下一步怎么做?

trans by 2019-08-04T11:19:24Z

algorithm - 具有优先级的Equation(表达式)解析器?

我使用简单的堆栈算法开发了一个方程解析器,它将处理二进制(+, - ,|,&amp;,*,/等)运算符,一元(!)运算符和括号。

但是,使用这种方法会让我拥有相同优先级的所有内容 - 无论操作符如何,都会从左到右进行评估,尽管可以使用括号强制执行优先级。

所以现在“1 + 11 * 5”会返回60,而不是人们所期望的56。

虽然这适用于当前项目,但我希望有一个通用例程,我可以用于以后的项目。

编辑清晰:

解析具有优先级的方程的好算法是什么?

我对一些简单的实现感兴趣,并且理解我可以自己编写代码来避免使用可用代码的许可问题。

语法:

我不明白语法问题 - 我是手写的。 这很简单,我认为不需要YACC或Bison。 我只需要用诸如“2 + 3 *(42/13)”之类的方程计算字符串。

语言:

我在C中这样做,但我对算法感兴趣,而不是语言特定的解决方案。 C足够低,如果需要,很容易转换成另一种语言。

代码示例

我发布了上面讨论的简单表达式解析器的测试代码。 项目要求发生了变化,因此我从不需要优化性能或空间代码,因为它没有包含在项目中。 它是原始的详细形式,应该易于理解。 如果我在运算符优先级方面做了更多的事情,我可能会选择宏hack,因为它简单地匹配程序的其余部分。 但是,如果我在一个真实的项目中使用它,我将寻求一个更紧凑/更快速的解析器。

相关问题

数学解析器的智能设计?

-亚当

trans by 2019-08-03T22:11:07Z

算法 - 使用Mean Shift解释的图像分割

有谁可以帮我理解Mean Shift分割实际上是如何工作的?

这是我刚刚编写的8x8矩阵

  103  103  103  103  103  103  106  104   
  103  147  147  153  147  156  153  104   
  107  153  153  153  153  153  153  107   
  103  153  147  96   98   153  153  104   
  107  156  153  97   96   147  153  107   
  103  153  153  147  156  153  153  101   
  103  156  153  147  147  153  153  104   
  103  103  107  104  103  106  103  107

使用上面的矩阵可以解释Mean Shift分割如何将3个不同的数字水平分开?

trans by 2019-08-02T19:23:49Z

algorithm - 计算gam中的每秒帧数

什么是计算游戏中每秒帧数的好算法? 我想将它显示为屏幕一角的数字。 如果我只看一下渲染最后一帧所花费的时间,那么数字变化太快了。

如果您的答案更新每一帧,并且在帧速率增加而不是减少时不会收敛,则奖励积分。

trans by 2019-08-01T22:04:43Z

时间复杂度 - 具有O(1),O(n log n)和O(log n)复杂度的算法示例

我们每天使用的具有O(1),O(n log n)和O(log n)复杂度的算法是什么?

trans by 2019-08-01T19:03:42Z

c# - 舍入DateTime对象

我想将日期/时间舍入到图表应用程序的最近区间。 我想要一个像下面这样的扩展方法签名,以便可以获得任何精确度的舍入:

static DateTime Round(this DateTime date, TimeSpan span);

我的想法是,如果我通过十分钟的时间跨度,它将四舍五入到最接近的十分钟间隔。 我无法理解我的实施,并希望你们中的一个人之前会写过或使用类似的东西。

我认为楼层,天花板或最近的实施都可以。

有任何想法吗?

编辑:感谢@tvanfosson&amp; @ShuggyCoUk,实现如下:

public static class DateExtensions {
    public static DateTime Round(this DateTime date, TimeSpan span) {
        long ticks = (date.Ticks + (span.Ticks / 2) + 1)/ span.Ticks;
        return new DateTime(ticks * span.Ticks);
    }
    public static DateTime Floor(this DateTime date, TimeSpan span) {
        long ticks = (date.Ticks / span.Ticks);
        return new DateTime(ticks * span.Ticks);
    }
    public static DateTime Ceil(this DateTime date, TimeSpan span) {
        long ticks = (date.Ticks + span.Ticks - 1) / span.Ticks;
        return new DateTime(ticks * span.Ticks);
    }
}

被称为如此:

DateTime nearestHour = DateTime.Now.Round(new TimeSpan(1,0,0));
DateTime minuteCeiling = DateTime.Now.Ceil(new TimeSpan(0,1,0));
DateTime weekFloor = DateTime.Now.Floor(new TimeSpan(7,0,0,0));
...

干杯!

trans by 2019-08-01T18:23:10Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 下一页 共17页