Tag: algorithm

找出j和i指标之间的最大差异,使得在O(n)中j> i和a > a

给定一个未sorting的数组,找出max j – i之间的差异,使得在O(n)中j > i和a[j] > a[i] 。 我能够findj和i在O(n^2)复杂性中使用微不足道的方法,但是想知道如何在O(n)做到这一点? input:{9,2,3,4,5,6,7,8,18,0} 输出:8(j = 8,i = 0) input:{1,2,3,4,5,6} 输出:5(j = 5,i = 0)

在不同的STL实现中,哪些algorithm用于C ++ 11 std :: sort?

C ++ 11标准保证std::sort 在最坏的情况下具有O(n logn)的复杂性 。 这与C ++ 98/03中的平均保证有所不同,在这种情况下 std::sort可以用Quicksort来实现(可能与小n的插入sorting相结合),在最坏的情况下有O(n ^ 2) (对于一些特定的input,例如sorting的input)。 不同的STL库中的std::sort实现有没有改变? C ++ 11的std::sort如何在不同的STL中实现?

为什么不平滑更普遍?

从阅读维基百科关于sortingalgorithm的文章,似乎smoothsort是最好的sortingalgorithm。 它在所有类别中都有顶级的performance:最好的,平均的和最差的。 没有什么比它在任何类别中都要好。 它也有不断的内存需求。 唯一的缺点是它不稳定。 它在内存中击败timsort,在最坏的情况下性能和内存都能快速跳动。 但是我从来没有听说过smoothsort。 没有人提到过,大多数讨论似乎围绕着其他sortingalgorithm。 这是为什么?

统一STO检测

在ISO Prolog中,统一只针对NSTO(不受发生检查)的情况定义。 背后的想法是涵盖主要在程序中使用并且实际上由所有Prolog系统支持的统一的情况。 更具体地说,ISO / IEC 13211-1:1995的内容如下: 7.3.3发生检查(STO)而不是主题 发生检查(NSTO) 一组方程(或两个项)是“可能发生的 – 检查“(STO)是否有办法进行 Herbrandalgorithm的步骤使得7.3.2g 发生。 一组方程(或两个方程)是“不受限制的” 发生检查“(NSTO),如果没有办法进行 通过Herbrandalgorithm的步骤 7.3.2克发生。 … 这一步7.3.2克读取: g)如果有一个forms为X = t这样的方程 X是一个variables, t是一个非variables项 其中包含这个variables,然后退出失败( 不是 统一的 , 积极的发生检查 )。 完整的algorithm被称为Herbrandalgorithm,通常被称为Martelli-Montanari统一algorithm ,它基本上是通过以非确定性方式重写一组方程来进行的。 请注意,新方程引入: d)如果存在formsf(a 1 ,a 2 ,… a N )=的方程, f(b 1 ,b 2 ,… b N ),然后用方程组代替它 a i = b i […]

经验估计大哦时间效率

背景 我想通过基准来评估库中某些方法的大噢performance。 我不需要精确度 – 只要certificateO(1),O(logn),O(n),O(nlogn),O(n ^ 2)或者更糟。 由于大哦表示上限,估计O(logn)是O(log logn)的东西不是问题。 现在,我正在考虑find最适合每个大数据的恒定乘数k(但是会将所有结果置顶),然后select最合适的大数。 问题 有没有更好的办法比我所做的更好? 如果是这样,他们是什么? 否则,任何人都可以指点我的algorithm来估计k为最佳拟合,并比较每条曲线如何适合数据? 注意和限制 鉴于迄今为止的意见,我需要澄清一些事情: 这需要自动化。 我不能“看”数据并做出判断。 我将要用多个n大小来对这些方法进行基准testing。 对于每个规模n ,我将使用经过validation的基准框架,提供可靠的统计结果。 事实上,我事先知道大多数将被testing的方法。 我的主要目的是为他们提供性能回归testing。 代码将用Scala编写,任何免费的Java库都可以使用。 例 这是我想测量的东西的一个例子。 我有这个签名的方法: def apply(n: Int): A 给定一个n ,它将返回一个序列的第n个元素。 在现有的实现中,这个方法可以有O(1),O(logn)或者O(n),而小的修改可以让它错误地使用次优的实现。 或者,更容易的,可以得到一些依赖于它的其他方法来使用它的次优版本。

创build自己的MD5碰撞

我正在做关于MD5碰撞的演示,我想让人们知道碰撞的可能性有多大。 有两块文本散列到同一个东西,并解释在碰撞之前需要多less个[a-zA-Z]组合。 明显的答案是哈希每个可能的组合,直到命中两个哈希相同。 那么你怎么去编码呢。 作为一个快速的实验,我尝试了哈希[AZ]的5列的每一个组合,将其存储在.net哈希表中,并捕获冲突exception。 有两个问题 – 哈希表最终超时,我很确定我将需要很多字符。 显然这个数据结构太大,无法在内存中处理,所以现在我必须得到一个数据库。 这听起来像是一个很好的项目来testing蔚蓝 – 有点像这些家伙 。 任何人都可以指出我这样做的有效方法吗?

从文本中检测短语和关键字的algorithm

我有大约100兆字节的文本,没有任何标记,分为大约10,000条目。 我想自动生成一个“标签”列表。 问题是,有一些词组(即短语)在分组在一起时才有意义。 如果我只是把这些单词计算在内,我会得到大量真正常见的单词(是,在,在,等等)。 我已经统计了之前和之后的单词和其他单词的数量,但现在我真的不知道下一步该怎么做了。关于2和3个单词短语的信息是存在的,但是如何提取这些数据呢?

find所有的4位数的吸血鬼号码

我正在解决一个问题,找出所有的4位数的吸血鬼号码。 吸血鬼号码 v = x * y被定义为一个具有“n”偶数个数字的数字,通过乘以一对“n / 2”数字数字(其中数字是从原始数字以任何顺序获得的)x和y在一起。 如果v是一个吸血鬼号码,那么x&y就称为它的“牙齿”。 吸血鬼数字的例子是: 1. 1260=21*60 2. 1395=15*93 3. 1530=30*51 我已经尝试过蛮力algorithm来合并给定数字的不同数字并将它们相乘。 但是这种方法效率很低,花费了很多时间。 有没有一个更有效的algorithm解决这个问题?

FSharp运行我的algorithm比Python慢

几年前,我通过dynamic编程解决了一个问题: https://www.thanassis.space/fillupDVD.html 该解决scheme是用Python编码的。 作为扩展我的视野的一部分,我最近开始学习OCaml / F#。 有什么更好的方法来testing水域,而不是通过直接移植我在Python中编写的命令代码到F#,然后从那里开始,逐步向function性编程解决scheme迈进。 这第一个直接港口的结果是令人不安的: 在Python下: bash$ time python fitToSize.py …. real 0m1.482s user 0m1.413s sys 0m0.067s 在FSharp下: bash$ time mono ./fitToSize.exe …. real 0m2.235s user 0m2.427s sys 0m0.063s (如果你注意到上面的“单声道”:我也在Windows下testing,与Visual Studio – 相同的速度)。 我很困惑,至less可以说。 Python比F#更快地运行代码? 使用.NET运行库的已编译二进制文件比Python的解释代码运行SLOWER?!?! 我知道VM的启动成本(在这种情况下是单声道),以及JIT如何改进像Python这样的语言的东西,但仍然…我期望加速,而不是放缓! 我可能做错了吗? 我已经在这里上传了代码: https://www.thanassis.space/fsharp.slower.than.python.tar.gz 请注意,F#代码或多或less是对Python代码的直接逐行转换。 PS当然还有其他的收益,例如F#提供的静态types安全性,但是如果F#下的命令式algorithm的结果速度更糟……我很失望,至less可以说。 编辑 :直接访问,在评论中的要求: Python代码: https : //gist.github.com/950697 FSharp代码: https : //gist.github.com/950699

“近似”最大公约数

例如,假设您有一个浮点数的列表,这些浮点数的数量大约是公共数量的倍数 2.468,3.700,6.1699 这几乎是1.234的整数倍。 你如何描述这个“近似的gcd”,你将如何继续计算或估计它? 与我对这个问题的回答严格相关。