编程面试题

  • 如何测量影像杂讯

    为了解决我的问题,我使用了下一种方法: 我的噪声等级只是被识别为噪声的像素数。为了区分正常像素和噪声,我只是计算了它的相邻像素的中间值,如果它的值大于某个临界值,我们就说这是噪声。 if ABS1 - currentPixel.R+currentPixel.G+currentPixel.BneigborsMediumValues.R + neigboursMediumValues.G

  • 间隔树中的最大不重叠间隔

    这不是NP完全问题。我可以想到一种On * logn使用动态编程来解决此问题的算法。 假设我们有n个间隔。假设给定范围是S(在您的情况下为S = [0000, 2400])。假设所有间隔都在内S,或者消除所有不S在线性时间内的间隔。 预处理:

  • 在数组中仅出现一次的数字

    令在数组中仅出现一次的数字为 x x - a[1] for i - 2 to n x - x ^ a[i] return x 由于a ^ a = 0和a ^ 0 = a 成对出现的数字被抵消,结果存储在其中 x

  • 如何计算除数一定的最小数?

    您应该使用该公式计算整数的除数n: d(n)=(a 1 +1)(a 2 +1) … (a k +1) 哪里 n = p 1 a 1 * p 2 a 2 * p 3 a 3 * … * p k a k 通过其主要除数的幂来唯一表示每个整数。这是一个著名的公式,但如果人

  • 在未排序的数组中找到一对差值是输入值“ k”的数字对

    您可以使用哈希表在O(n)中执行此操作。将所有数字放在O(n)的哈希中,然后再次遍历它们以寻找number[i]+k。哈希表在O(1)中返回“是”或“否”,并且您需要遍历所有数字,因此总数为O(n)。具有O(1)设置和O(1)检查时间的任何集合结构都可以代替哈希表工作。

  • 用Kadane算法在O(N)中的最小和子数组

    我提到的方法是否可以找到最低金额? 是的,它会的。您可以将找到最小和的问题重新声明为找到具有最大绝对值的负和的问题。当您切换数字符号并将算法的其余部分保留在适当的位置时,这就是算法将要返回给您的数字。 我知道如果所有要素都是积极的就有问题 不,没有问题:当所有元素均为

  • 是什么让gcc std :: list排序实现如此之快?

    我一直在研究list ::sort(源代码)的有趣的GLibC实现,它似乎没有实现传统的合并排序算法(至少没有我以前见过

  • 实现软件的许可机制

    首先,没有什么是防黑客的,因此我不会花太多时间来保护您的软件。 基于硬件ID的机制的缺点是,当用户购买新计算机或升级其大部分计算机时,他也需要更新密钥。 HWHash 是一个很好的HardwareID实现,但是我想还有更多(免费)解决方案。 在工作中我们使用的硬件锁和a href="http:www.aladdi

  • 高效随机选择频率项目的算法

    好的,我找到了另一个算法:别名方法提到)。基本上,它创建概率空间的分区,使得: 有n分区,所有分区都具有相同的宽度rst nr = m。 每个分区以一定比例包含两个单词(与

  • 代码高尔夫:将多个排序列表合并为一个排序列表

    Common Lisp merge在语言标准中已经具有通用序列的功能,但仅适用于两个序列。对于升序排列的多个数字列表,可以在以下功能中使用它(97个基本字符)。 (defun m(&rest s) (如果(不是(cdr s)) (汽车) (应用#'m (cons(合并'list(car s)(cadr s ## <

  • 识别具有最小欧氏距离的点

    尝试scipy.spatial.distance.pdistmyArr。这将为您提供一个简化的距离矩阵。您可以argmin在其上使用并找到最小值的索引。可以将其转换为配对信息。

  • 用单个路径填充2D网格

    事实证明,尽管没有针对非随机图的证据,但由于Angluin和Valiant(1977)而导致的汉密尔顿路径的局部搜索算法在此方面非常出色。这是一个样本广场 99 98 101 103 105 106 129 132 133 140 135 136 97 100 102 104 107 130 131 128 141 134 139 137 95 96 109 108 112 122 127 126

  • 二叉树的垂直和

    首先,您应该找到头寸,您可以通过计算到达特定节点的左侧和右侧花费的数量来做到这一点: 1 : l = 0, r = 0 \ \ l=1,r=0 2 3 : l = 0, r = 1. \ \ ... 4...5 6...7

  • 了解OpenCV LBP实施

    我请您参考我过去的答案,该答案略微涉及到该主题,但是没有解释XML级联格式。 让我们看一个为 简化 而修改的 伪造 示例,该示例仅具有一个阶段和三个功能的级联。 __ !-- stage 0 -- _ maxWeakCount3maxWeakCount stage

  • C ++:如何将字符串拆分为大小均匀的较小字符串?

    要将N个项目划分为M个部分(长度在1个单位之内),可以将公式N*i+NM-N*iM用作i第n个部分的长度,如下所示。 #include string #include iostream using namespace std; int main { string text = "abcdefghij

  • 如何在给定的字符串中找到最长的回文?

    我已经找到了解决方案的明确解释这里 。感谢Justin提供此链接。 在这里,您可以找到该算法的Python和Java实现(C ++实现包含错误)。 这是C#实现,仅是这些

  • Java-Collections.sort()性能

    ON log N渐近地非常好也就是说,存在ON基于线性时间非比较的排序,例如计数排序和存储桶排序。例如,当您要对数百万个整数进行排序,但它们之间的整数在1..10之间时,此功能很有用。 同样,如果列表是“几乎已排序的”,则在某些情况下,其他情况下的二次插入排序实际上会更好。 这是否适用,甚至值得实施,取决于您的分析结果。我要说的是,除非它显示出瓶颈,否

  • 查找两个字符串共享的所有n字长的子字符串的最大长度

    这里仍然有歧义,我不想花时间争论它们。但是我想我仍然可以添加一些有用的东西;- 我写了Python的difflib.SequenceMatcher,并花了 很多 时间来寻找预期情况下快速的方法来找到最长的公共子字符串。从理论上讲,应该使用“后缀树”或相关的“后缀数组”(以“最长公共前缀数组”增强)来完成(如果您想向Google寻求更多信息,引号中的短语为搜索字词)。这些可以解

  • 以10为基数到以n为基数的转换

    我不明白问题出在哪里?进行基数转换非常简单且容易:您可以像手工那样进行。 将 数字 除以 基数 写下其余的 用除法的整数部分重复该过程 达到零时停止 余数以相反的顺序给出 基数 例: 1025(十进制)到15为

  • 如何使用新的C ++ 17执行策略?

    c ++ 17尚未完成。并且各种编译器尚未完全实现它。 -std=c++17 表示“将完成的所有C 17给我”,而不是“成为完全有效的C 17编译器”。 目前,编译器和或标准库不支持此功能。请在几周几

  • 对于大小为n的输入,insert-sort是否击败了merge-sort的n值?[关闭]

    由于您将发现插入排序优于合并排序 8n^2=64nlogn n^2=8nlogn n=8logn 在解决n-8logn = 0你得到 n = 43.411 因此,对于n=43插入排序,比合并排序更好。

  • 高效模拟滚动加权骰子(或遍历加权图),并进行频繁更新

    我认为您可以使用log(k)复杂度来做到这一点,其中k是骰子中的面孔数量。 对于一个特定的节点,令p1,p2,…,pk为相对概率。令p1 + p2,…,+ pk = p。 用这些相对概率作为叶子构造一个树结构。每个非叶节点的父节点是其子节点的相对概率之和。要“掷骰子”,请在0到p之间绘制一个随机值,然后沿着树进行跟踪。当您想要更新骰子面的相对概率时,只需更改相应的叶子节点值并将其传播到整个树中即可。

  • 如何在一秒钟内计算任意n <= 600的最短加法链?

    我刚刚获得了这个问题的黄金证书。我不会提供完整的解决方案,因为该问题仍然存在于网站上,而是给您一些提示: 您可以考虑进行深度优先搜索。 每个n 12509都有一个最小的星形链 您需要知道如何缩小搜索空间。 您需要一个合适的下限来寻找链的长度。 请记住,您只需要一种解决方案,而不是全部。 ol

  • 串连推文有什么好的启发式方法?

    由于只有一个答案,赏金截止日期快到了,我想我应该添加一个基线答案,这样赏金不会自动授予不会超出问题实质的答案。 显而易见的第一步是采用原始的一组推文,并遵循所有in_reply_to_status_id链接来构建许多有向无环图。您可以100%确定这些关系。(您甚至应该通过原始集合中没有的推文来跟踪这些链接,并将其添加到您正在考虑的状态更新集中。) 除了这一简单的步骤外,还必须处理“提法

  • 大O记号的总和

    好吧,因为O fn + O gn = O fn + gn 我们只是试图计算fn这样一个fn n + logn 由于随着n的增长,logn n我们可以说fn 2n n + logn 因此

  • 整数除以7

    该算法的第一部分是乘以7的倒数的近似值。在这种情况下,我们正在近似地计算带有整数乘法和右移的倒数。 首先,我们将值-1840700269(八进制-015555555555)视为32位整数。如果将其读取为无符号的32位整数,则其值为2454267027(octal 22222222223)。事实证明,2454

  • 多数投票算法-错误?

    该算法是正确的:您的示例中没有多数元素。仅当元素 大于 值的50%时才占多数。 如果您想检测最频繁的元素计数为的情况N2,那么我看不出有任何方法可以一次通过O1。我最好的尝试是: 运行与以前相同的算法,但也要记住前一个候选者。 如果您切换到最后一个元素,那么正确的答案就是您当前的

  • 用新随机生成的值替换数组中的重复值

    好的,这个问题实际上与线性序列有关。最小值为1时,请考虑以下顺序: fn = 1 + 2 + ... + n - 1 + n 这样一个序列的总和等于: fn = n * n + 1 2 因此,对于n = 4,例如,总和为10。这意味着,如果选择4个不同的数字,则没有零且没有负数的最

  • 使用Python优化的点积

    我只是为了好玩而写了一个使用numpy的“ d4”: from numpy import dot def d4v1, v2: checkv1, v2 return dotv1, v2 我的结果(Python 2.5.1,XP Pro sp3、2GHz Core2 Duo T7200): d0 elapsed:

  • 在C ++中生成N选择K排列

    前k个值重复nk个阶乘时间。这是避免重复的简单但有效的方法: int Factorialint n { int result = 1; while n1 { result *= n--; } return result; } void PermGeneratorint n, int k { std::vectorint dn; st

  • 解释这种针对Cat / Egg投掷问题的O(n log n)算法

    最高的解决方案实际上是OD*B(使用问题的术语),但是作者注意到,对于大多数人来说D,B答案将大于2^32并且-1可以返回。 所以,他介绍maxn等于1100 -最大D和F为它是有道理的计数。 因为D, B =

  • 给定一组点,我如何找到彼此最远的两个点?

    您要计算集合的 直径 。标准技术是首先计算凸包,这可以减少查找凸多边形直径的问题。即使在您没有消除任何要点的情况下,这些添加的信息也正是有效解决问题所需要的。但是,找到凸多边形的直径并不完全是简单的。几篇带有该算法的已发表论文被证明是不正确的。 这是针对该任务的正确O(n)算法的a href="http:www.facweb.iitkgp.ernet.in~arijit

  • 如何更新堆中的元素?(优先级队列)

    典型解决方案 通常的解决方案是将元素标记为无效并插入新元素,然后在弹出无效条目时消除它们。 替代解决方案 如果该方法不能满足要求, 则只要知道要更改的值的位置 , 就可以按O(log n)步骤还原最小堆不变式 。 回想一下,最小堆是使用两个基本变量“ siftup”和“ siftdown”构建

  • 生成统一的随机排列

    这个解决方案是有偏见的,您想要非偏见排列的Fisher Yates算法(类似)。[基本上,您需要与交换randomi,n而不是与random1,n]

  • 对数如何编程?[关闭]

    在任何体面的数学库中实现诸如自然对数之类的函数,都会使误差保持在ulp(最低精度单位)以下。数学库函数的实现者的目标是找到一些最佳近似值,该近似值可以通过尽可能少的计算来达到所需的精度。泰勒级数通常是一个糟糕的选择,因为要获得所需的精度需要太多的项。 选择的典型武器是将所有可表示的实数的范围减小到某个很小的区域,然后使用一些最佳近似值,从而在此窄范围内产生所需函数的精确近似值。最佳逼近的典型选择武器是多项式或有理多项式(两个多项

  • MATLAB的filtfilt()算法[关闭]

    filtfilt算法匹配过滤器上的初始条件,以最大程度地减少(从doc filtfilt)的开始和结束瞬变。如果您键入edit filtfilt,则可以看到代码- 有一个函数getCoeffsAndInitialConditionsb,a,Npts可以向您显示此代码的详细信息。

  • 具有信号强度的2D平面中的三边测量

    您必须首先对强度进行归一化,以便它们的总和变为1(分别是一个常数)。 如果每个角点的归一化强度为1(因此其他点为0),则它们将成为结果点。另一方面,如果此强度为0,则所得点将位于其他两个点之间的线上。在它们之间,它与该线平行,且具有相对的强度距离。计算其中两个强度的距离,即可找到结果点。第三强度是多余的(它通过归一化进入计算)。 编辑: 您可以简单地通过添加按归一化强度缩放的矢量来计算此值。以

  • QR分解解决CUDA中的线性系统

    void GEQRFint M,int N,T A,int LDA, T TAU, T* WORK,int LWORK,int INFO 在GEQRF之后,R存储在A的上三角部分。然后,可以使用xORGQR以A和TAU作为输入来生成Q。 更多说明:a href="http:www.culatools.comforumsviewtopic.php?f=15t=6

  • 如何将64位哈希值缩短为48位值?

    如果64位哈希很好,那么选择任何48位也将是一个好的哈希。@李丹尼尔。当然,信息会丢失并且不可逆。 unsigned long long Mask48 = 0xFFFFFFFFFFFFu; unsigned long long hash48 = hash64 Mask48; 如果64位哈希函数较弱,则按下的最大质数进行mod pow2,48co

  • 递归字符串置换函数的复杂度

    忽略打印​​,满足的重复关系是 Tn = n*Tn-1 + On 如果Gn = Tnn!我们得到 Gn = Gn-1 + O1n-1! 这给了Gn = Theta1。 这样Tn = Theta