Questions tagged «algorithm»

算法是定义明确的问题解决方案的一系列明确定义的步骤。当您的问题与算法设计有关时,请使用此标签。


14
使用按键A,Ctrl + A,Ctrl + C和Ctrl + V的最大字符数
这是谷歌的采访问题。我自己无法解决。有人可以照亮吗? 编写一个程序来打印击键序列,以使其生成最大数量的字符“ A”。您只能使用4个键:A,Ctrl+ A,Ctrl+ C和Ctrl+ V。仅允许N次击键。所有Ctrl+字符都被视为一次击键,因此Ctrl+ A是一次击键。 例如,序列A,Ctrl+ A,Ctrl+ C,Ctrl+ V在4次击键中生成两个A。 Ctrl + A为全选 Ctrl + C为复制 Ctrl + V为粘贴 我做了一些数学。对于任何N,使用x个数字的A,一个Ctrl+ A,一个Ctrl+ C和y Ctrl+ V,我们可以生成最大((N-1)/ 2)2个数字的A。对于某些N> M,最好使用尽可能多的Ctrl+ A,Ctrl+ C和Ctrl+ V序列,因为它将A的数量加倍。 序列Ctrl+ A,Ctrl+ V,Ctrl+ C不会覆盖现有选择。它将复制的选区附加到所选的选区。
106 algorithm 

6
什么会导致算法具有O(log n)复杂度?
我对big-O的知识是有限的,当对数项出现在等式中时,甚至会使我失望得多。 有人可以简单地向我解释什么是O(log n)算法吗?对数从何而来? 当我尝试解决这个期中练习问题时,特别是这样: 令X(1..n)和Y(1..n)包含两个整数列表,每个列表以非降序排列。给出O(log n)时间算法以查找所有2n个组合元素的中值(或第n个最小整数)。例如,X =(4、5、7、8、9),Y =(3、5、8、9、10),则7是合并列表的中位数(3、4、5、5、7 ,8、8、9、9、10)。[提示:使用二进制搜索的概念]

16
如何将没有空格的文本分割成单词列表?
输入: "tableapplechairtablecupboard..."很多单词 将此类文本拆分为单词列表并获得以下内容的有效算法是什么? 输出: ["table", "apple", "chair", "table", ["cupboard", ["cup", "board"]], ...] 首先想到的是遍历所有可能的单词(从第一个字母开始)并找到可能的最长单词,然后从 position=word_position+len(word) PS: 我们列出了所有可能的单词。 单词“ cupboard”可以是“ cup”和“ board”,选择时间最长。 语言:python,但主要是算法本身。
106 python  algorithm  text  split 


2
JavaScript数组的大O
JavaScript中的数组很容易通过添加和删除项来进行修改。它在某种程度上掩盖了一个事实,即大多数语言数组都是固定大小的,并且需要复杂的操作来调整大小。看起来,JavaScript使编写性能不佳的数组代码变得容易。这导致了一个问题: 对于数组性能,我可以从JavaScript实现中获得什么样的性能(就O时间复杂度而言)? 我假设所有合理的JavaScript实现最多都具有以下大O。 存取权-O(1) 追加-O(n) 前置-O(n) 插入-O(n) 删除-O(n) 交换-O(1) JavaScript使您可以使用以下命令将数组预填充为特定大小 new Array(length)语法。(奖金问题:是以O(1)或O(n)的方式创建数组)这更像是常规数组,并且如果用作预大小数组,则可以允许添加O(1)。如果添加了循环缓冲区逻辑,则可以实现O(1)前置。如果使用动态扩展数组,则O(log n)将是这两种情况的平均情况。 我可以期望某些事情比我的假设有更好的性能吗?我不希望任何规范概述任何内容,但实际上,可能是所有主要实现都在幕后使用了优化的数组。是否在工作中动态扩展数组或其他一些提高性能的算法? 聚苯乙烯 我想知道这是因为我正在研究一些排序算法,当描述它们的整体大O时,大多数似乎都假定追加和删除是O(1)运算。

5
舍入DateTime对象
我想将日期/时间四舍五入到制图应用程序的最近间隔。我想要如下扩展方法签名,以便可以达到任何精度级别的舍入: static DateTime Round(this DateTime date, TimeSpan span); 这个想法是,如果我经过十分钟的时间间隔,它将四舍五入到最接近的十分钟间隔。我无法理解实现,希望你们中的一位以前曾经写过或使用过类似的东西。 我认为采用地板,天花板或最近的安装方式都可以。 有任何想法吗? 编辑:感谢@tvanfosson和@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 …
105 c#  algorithm 


16
获取数的所有除数的最佳方法是什么?
这是非常愚蠢的方式: def divisorGenerator(n): for i in xrange(1,n/2+1): if n%i == 0: yield i yield n 我想要得到的结果与此类似,但是我想要一个更智能的算法(这个算法太慢而且太笨了:-) 我可以很快找到主要因素及其多样性。我有一个生成器以这种方式生成因子: (因数1,多重性1)(因数 2,多重性2) (因数3,多重性3) 等等... 即输出 for i in factorGenerator(100): print i 是: (2, 2) (5, 2) 我不知道这对我想做的事情有多大帮助(我为其他问题编写了代码),无论如何,我都希望有一种更聪明的制作方法 for i in divisorGen(100): print i 输出: 1 2 4 5 10 20 25 50 100 …
105 python  algorithm  math 

14
检查列表中的所有元素是否唯一
检查列表中所有元素是否唯一的最佳方法(与传统方法一样最佳)是什么? 我目前使用的方法Counter是: >>> x = [1, 1, 1, 2, 3, 4, 5, 6, 2] >>> counter = Counter(x) >>> for values in counter.itervalues(): if values > 1: # do something 我可以做得更好吗?
104 python  algorithm  list  unique 



22
具有优先级的方程式(表达式)解析器?
我已经开发了一种使用简单堆栈算法的方程式解析器,该算法将处理二进制(+,-,|,&,*,/等)运算符,一元(!)运算符和括号。 但是,使用此方法会使我拥有所有具有相同优先级的内容-尽管可以使用括号强制执行优先级,但无论运算符如何,它都是从左到右求值的。 因此,现在“ 1 + 11 * 5”返回60,而不是人们期望的56。 尽管这适用于当前项目,但我希望有一个通用例程,可以用于以后的项目。 为清楚起见进行了编辑: 解析具有优先级的方程的最佳算法是什么? 我对一些易于实现的东西感兴趣,并且了解我可以自己编写代码,以避免可用代码出现许可问题。 语法: 我不懂语法问题-我是用手写的。非常简单,我认为不需要YACC或Bison。我只需要使用诸如“ 2 + 3 *(42/13)”之类的方程式来计算字符串。 语言: 我正在用C进行此操作,但是我对算法感兴趣,而不对特定于语言的解决方案感兴趣。C足够低,可以根据需要轻松转换为另一种语言。 代码示例 我在上面发布了简单表达式解析器的测试代码。项目需求发生了变化,因此我不需要针对性能或空间进行代码优化,因为它没有合并到项目中。它采用原始的冗长形式,应该易于理解。如果我在运算符优先级方面做进一步的事情,我可能会选择宏技巧,因为它可以简单地与程序的其余部分匹配。但是,如果我在实际项目中使用过它,那么我将寻求一个更紧凑/更快速的解析器。 相关问题 数学解析器的智能设计? -亚当



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.