计算机科学

为学生,研究人员和计算机科学从业者提供的问答

3
计算第个斐波那契数的高效算法
可以使用以下递归在线性时间中计算第个斐波那契数:nnn def fib(n): i, j = 1, 1 for k in {1...n-1}: i, j = j, i+j return i 第个斐波那契数也可以计算为。但是,这对于甚至较小的都有舍入问题。可能有一些解决方法,但我宁愿不这样做。[ φ Ñ / √nnnn[φn/5–√][φn/5]\left[\varphi^n / \sqrt{5}\right]nnn 是否有一种有效的算法(值为或更好的对数)来计算不依赖浮点算术的第个斐波那契数?假定整数运算(,,,)可在恒定的时间来执行。n + - × /nnnnnn+++−−-××\times///


3
广度优先搜索中的“宽度”是什么意思?
我正在学习广度优先搜索,我想到一个问题,为什么要这样称呼BFS。在《CLRS的算法简介》一书中,我读到了以下原因: 广度优先搜索之所以这么称呼是因为它在边界的宽度上均匀地扩展了已发现和未发现顶点之间的边界。 但是,我无法理解此声明的含义。我对这个“边界”一词以及该边界的广度感到困惑。 因此,有人能以一种像我这样的初学者容易理解的方式回答这个问题吗?


2
如何在具有恒定内存的线性时间内在字符串中找到所有不平衡的括号?
面试中给了我以下问题: 给出一个字符串,其中包含一些括号(不是方括号或大括号,仅是括号)与其他字母数字字符的混合,标识所有没有匹配括号的括号。 例如,在字符串“)(ab))中,索引0和5包含没有匹配括号的括号。 我提出了一个使用O(n)内存的有效O(n)解决方案,使用了堆栈,并在将括号添加到堆栈中并遍历字符串后,每当遇到封闭括号和堆栈顶部时,将其从堆栈中删除开场菜。 之后,访问员指出,可以使用恒定的内存在线性时间内解决问题(例如,除了输入占用的内存之外,没有其他内存使用)。 我问了如何,她说了一些关于从左边一次识别所有打开的parens,然后从右边再次识别所有闭合的parns ....或者相反的说法。我不是很了解,也不想让她手牵着我。 谁能澄清她建议的解决方案?
11 algorithms 


2
将HoTT中的产品简化为教堂/斯科特编码
因此,我目前正在与某些人一起阅读HoTT书。我声称,通过将递归的类型作为等效类型的灵感,我们将看到的大多数归纳类型都可以简化为仅包含依赖函数类型和Universe的类型。我开始勾勒出我认为这将如何工作的草图,经过一番绊脚石,我得出了我认为是答案的答案。 (⋅ ,⋅ )≡ λ 一个:甲。λ b :乙。λ Ç :ü。λ 克:甲→ 乙→ Ç 。g (a )(b )i n d⋅ × ⋅ ≡ ΠA ,B ,C:U(A → B → C)→ C⋅×⋅≡∏A,B,C:U(A→B→C)→C\cdot \times \cdot \equiv \prod_{A, B, C : \mathcal{U}} (A \to B \to C) \to C (⋅ ,⋅ )≡ λ 一个:甲。λ …

5
数据科学与运筹学
顾名思义,一般的问题是: DS和OR /优化之间有什么区别。 从概念上讲,我知道DS会尝试从可用数据中提取知识,并主要使用统计,机器学习技术。另一方面,“或” 使用数据以便基于数据做出决策,例如通过优化数据(输入)上的某些目标函数(准则)来进行决策。 我想知道这两种范例之间的比较。 是另一个子集吗? 他们在考虑互补领域吗? 是否有一个例子可以补充一个领域或将它们结合使用? 我特别对以下内容感兴趣: 是否有使用OR技术解决数据科学问题的示例?

3
代表5张扑克牌
一副牌是52张。一手是52张牌中的5张(不能重复)。 代表5张牌的最小位数是多少?如何? 一手不依赖于顺序(KQ = QK)。64329 = 96432 是的,可以使用52位。那可以代表任意数量的卡牌。 给定一手牌正好是5张牌,有一种方法可以用少于52位来表示它。 一张卡可以用6位= 64表示。所以可以只用6位* 5张卡= 30位。但这将取决于订单。我可以排序,这应该可以工作。如果那行不通,请告诉我。 有没有一种方法可以使密钥达到32位或以下,而不必对5卡元组进行排序。 这是用于扑克模拟,而与仅产生一手牌相比,分类会产生很多开销。如果我有一本具有每只手的相对值的字典,则它是两个简单的查找和一个比较以比较两只手的值的比较。如果我必须先对手进行排序,那将比两次查找和比较要大。在模拟中将比较数百万。我不会从模拟中得到排序。排序并不像52 51 50 49 47之前的52 51 50 49 48那样简单。您可以使用直冲四边形.... 有2598960张可能的5张牌。那就是行数。关键是5张卡。我想要一个32位或以下的卡密钥,不需要先对卡进行排序。 不能只订购尽可能多的领带。西装是锹,棍棒,钻石和心脏。7c 8c 2d 3d 4s = 7s 8s 2c 3c 4h。有很多联系。 下一步是64位,它将接受排序,而不是密钥大小的两倍。 我测试SortedSet<int> quickSort = new SortedSet<int>() { i, j, k, m, n };了手术时间并使其加倍,但是我仍然可以这样做。 它变得更加复杂。我需要能够将船表示为五分之二(22255)。因此,对它们进行分类就可以了。我知道你会说,但这很快。是的,它既快速又琐碎,但我需要尽可能快。 C#接受的答案: …

3
加法的时间复杂度
维基百科将加法的时间复杂度列为,其中是位数。nñnnñn 这是严格的理论下限吗?还是这仅仅是当前最快的已知算法的复杂性。我想知道,因为加法的复杂性强调了所有其他算术运算和使用它们的所有算法。 从理论上讲不可能获得在中运行的加法算法?还是我们必须将线性复杂度相加。o(n)Ø(ñ)o(n)

4
同时具有“空”和“也许”的概念是否有意义?
在C#中为Web API创建客户端时,我遇到了一个问题,该问题null是它代表两个不同的东西: 一无所有,例如foo可能有也可能没有bar 未知:默认情况下,API响应仅包含属性的子集,您必须指出所需的其他属性。因此,未知表示未从API请求该属性。 经过一番搜索,我发现了Maybe(或Option)类型,它在功能语言中的用法以及如何通过迫使用户考虑可能缺少值的方式来“解决” null取消引用问题。然而,所有的资源,我遇到谈到更换空与可能。我确实找到了三值逻辑的一些提及,但是我并不完全理解它,而且多数时候提到这是在“这是一件坏事”的背景下。 我现在想知道将null和Maybe的概念分别表示未知和什么都不有意义。这是我读过的三值逻辑,还是别的名字?还是在Maybe中嵌套Maybe的预期方式?

2
仅使用O(k)内存O(n)时间从给定序列中找到第k个最小元素
假设我们逐个读取数字的序列。如何仅使用单元存储器并在线性时间()中找到第个最小元素。我认为我们应该保存序列的前项,并在获得第个项时删除一个确定不能为第个最小元素的项,然后保存第个项。因此,我们应该有一个指标,在每个步骤中显示此不可用的术语,并且该指标应在每个步骤中快速更新。我从“ max”开始;但它无法快速更新;意味着如果我们考虑最大ķnnnkkkO (n )k k + 1 k k + 1O(k)O(k)O(k)O(n)O(n)O(n)kkkk+1k+1k+1kkkk+1k+1k+1然后在第一次删除中,我们错过了最大值,我们应该在搜索最大值,其原因时间不是线性的。也许我们应该更智能地保存前项。O(k)O(k)O(k)k(n−k)×O(k)(n−k)×O(k)(n-k)\times O(k)kkk 我该如何解决这个问题?

2
数学猜想相当于图灵机的停止
这个问题是关于每个数学定理是否可以简化为单个图灵机是否停止的问题。我特别对目前尚未得到证实的猜想感兴趣。 例如:维基百科说,目前尚不清楚是否有奇数个完美数字。由于可以确定一个给定的数字是否完美,因此可以编写一台图灵机,依次检查每个奇数,并在找到一个完美的数字时暂停。(此图灵机不接受任何输入。)如果我们知道该图灵机是否停止,那么我们将知道该猜想是否成立,反之亦然。 但是,作为另一个示例,双素数猜想呢?一个给定的数字是否是双胞胎对中的第一个素数是可以确定的,但是在这种情况下,我们不能仅在找到第一个对时停止,因为问题在于是否存在一个无限数。对我来说,尚不清楚是否有可能制造出并且仅当双素数猜想为真时才停止的图灵机。 我们可以肯定地使图灵机在且仅当双素数猜想在Peano算术或其他形式系统中可证明时才中止,但这是一个不同的问题,因为这可能是正确的,但在我们选择的特定系统中无法证明。 所以我的问题是 当且仅当双素数猜想为真时,才能使图灵机停止吗?(如果是这样,如何?) 通常,是否有可能使图灵机在且仅当某些给定的数学表达式为真时才停止运行?可以从正式声明中以算法方式构建图灵机吗? 如果通常不可能,是否有某种方法可以将数学语句分类为等同于停止单个Turing机器还是停止具有oracle的图灵机等?如果是这样,对于给定的语句,此分类是否可确定?


2
两组之间最接近的点对,以2D表示
我在二维平面上有两组点。我想找到最接近的双点小号,吨使得小号∈ 小号,吨∈ Ť,并且欧几里德距离之间小号,吨是尽可能小。如何有效地做到这一点?可以在O (n log n )时间内完成吗,其中n = | S | + | T | ?小号,ŤS,TS,T小号,Ťs,ts,t小号∈ 小号s∈Ss \in S吨∈ Ťt∈Tt \in T小号,Ťs,ts,tØ (ñ 日志n )O(nlog⁡n)O(n \log n)n = | 小号| + | Ť|n=|S|+|T|n = |S|+|T| 我知道,如果我给一组,那么就可以找到最接近的一对点小号,小号' ∈ 小号在Ø (ñ 日志ñ )使用的时间标准分而治之算法。但是,该算法似乎不能推广到两个集合的情况,因为S或T中两个最接近点之间的距离与这两个集合中两个最接近点之间的距离之间没有联系。小号SSs,s′∈Ss,s′∈Ss,s' \in SO(nlogn)O(nlog⁡n)O(n \log n)SSSTTT 我以为存储设置的在ķ -d树,然后为每个小号∈ 小号,使用最近邻查询找到的最近点牛逼到小号。但是,最坏情况下的运行时间可能与O (n 2)时间一样糟糕。结果表明,如果T的点是随机分布的,则每个查询的预期运行时间为O …

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.