Tag: 语言不可知的

就地基数sorting

这是一个长文本。 请多多包涵。 下来,问题是: 是否有一个可行的就地基数sortingalgorithm ? 初步 我有很多小的固定长度的string,只使用我想分类的字母“A”,“C”,“G”和“T”(是的,你猜对了)。 目前,我使用std::sort ,它在STL的所有常见实现中使用introsort 。 这工作得很好。 不过,我确信基数sorting完全适合我的问题,在实践中应该更好。 细节 我已经用非常幼稚的实现来testing这个假设,对于相对较小的input(大约为10,000),这是真实的(至less是两倍以上)。 但是,当问题规模变大( N > 5,000,000)时,运行时间会严重恶化。 原因很明显:基数sorting需要复制整个数据(实际上我的幼稚实现不止一次)。 这意味着我已经将〜4 GiB放入了我的主内存,这显然会导致性能下降。 即使没有,我也不能使用这么多的记忆,因为问题的规模实际上变得更大了。 用例 理想的情况下,这个algorithm应该适用于DNA和DNA5(它允许一个额外的通配符“N”),甚至是带有IUPAC 模糊代码的 DNA(导致16个不同的值)。 但是,我意识到所有这些情况都不能被覆盖,所以我对任何速度的改善感到满意。 代码可以dynamic地决定分派给哪个algorithm。 研究 不幸的是, 关于基数sorting的维基百科文章是无用的。 关于就地变体的部分是完整的垃圾。 基数sorting的NIST-DADS部分几乎不存在。 有一种看起来很有前途的论文,称为高效自适应就地基sorting ,它描述了“MSL”algorithm。 不幸的是,这篇论文也令人失望。 具体来说,有以下几点。 首先,该algorithm包含几个错误,并留下很多原因。 特别是,它没有详细说明recursion调用(我简单地假设它递增或减less一些指针来计算当前的移位和掩码值)。 而且,它使用函数dest_group和dest_address而不给定义。 我没有看到如何有效地实现这些(即在O(1);至lessdest_address是不平凡的)。 最后但并非最不重要的是,该algorithm通过将数组索引与input数组内的元素交换来实现就地性。 这显然只适用于数值数组。 我需要在string上使用它。 当然,我可以拧紧打字,然后继续前进,假设内存将容忍我存储一个不属于它的索引。 但是,只要我能把我的string压缩到32位内存(假设是32位整数),这个工作就行得通。 那只有16个字符(让我们暂且忽略16> log(5,000,000))。 其中一位作者的另一篇论文根本没有给出准确的描述,但是它使得MSL的运行时呈现出平坦的错误。 回顾一下 :有没有希望find一个工作的参考实现,或至less有一个良好的伪代码/描述工作在地方基数sorting的DNAstring?

“foo”究竟意味着什么?

我希望这可以作为一个编程问题,就像在任何编程教程中一样,你最终会在代码示例中遇到'foo'。 (是的,对吧?) “foo”究竟意味着什么? 如果它意味着什么都没有 ,那么它是什么时候开始被使用的呢?

什么时候应该使用Debug.Assert()?

大约一年以来,我一直是一个专业的软件工程师,gradle于CS学位。 我已经知道关于C ++和C一段时间的断言,但直到最近才知道它们存在于C#和.NET中。 我们的产品代码没有任何断言,我的问题是这个… 我应该在生产代码中使用Asserts吗? 如果是这样,它的用途何时最合适? 这样做会更有意义吗? Debug.Assert(val != null); 要么 if ( val == null ) throw new exception();

每个开发者应该知道什么数据库?

无论我们是否喜欢,如果不是我们大多数开发人员,或者不是经常使用数据库,或者有一天可能需要使用数据库。 考虑到野外滥用和滥用的数量,以及每天出现的数据库相关问题的数量,公平地说,开发人员应该知道某些概念 – 即使他们不devise或使用数据库今天。 所以: 开发人员和其他软件专业人员应该了解的关于数据库的重要概念是什么? 回应指引: 保持你的名单短。 每个答案的一个概念是最好的。 具体 。 “数据build模”可能是一项重要技能 ,但究竟意味着什么呢? 解释你的理由。 为什么你的概念很重要? 不要只说“使用索引”。 不要陷入“最佳实践”。 说服你的听众去了解更多。 Upvote的答案你同意。 先阅读其他人的答案。 一个高排名的答案是比两个低排名的答案更有效的说法。 如果您有更多要添加,请添加评论或引用原件。 不要因为它不适用于你个人而降低某些东西。 我们都在不同的领域工作。 这里的目标是为数据库新手提供方向,以获得对数据库devise和数据库驱动开发的充分理解和全面的理解,而不是争夺最重要的头衔。

炸弹algorithm

我有一个由非负整数组成的nxmmatrix。 例如: 2 3 4 7 1 1 5 2 6 2 4 3 4 2 1 2 1 2 4 1 3 1 3 4 1 2 1 4 3 2 6 9 1 6 4 “放下炸弹”将目标单元和所有八个邻居的数量减less一个,最less为零。 xxxx X x xxx 什么是algorithm,将确定所需的最小数量的炸弹减less所有单元格为零? B选项(由于我不是一个仔细的读者) 其实问题的第一个版本不是我正在寻找的答案。 我没有仔细阅读整个任务,还有额外的限制,让我们说: 那简单的问题呢,在sorting时必须不增加: 8 7 6 6 5是可能的input顺序 7 8 5 […]

什么是不可变集合上的一个非变异的“添加”方法的最好的名字?

不好意思的是,如果我能拿出一个简洁的标题,我不会问这个问题。 假设我有一个不可变的列表types。 它有一个操作Foo(x) ,它返回一个带有指定参数的新的不可变列表作为最后一个额外的元素。 所以要build立一个值为“你好”,“不可变”,“世界”的string列表,你可以这样写: var empty = new ImmutableList<string>(); var list1 = empty.Foo("Hello"); var list2 = list1.Foo("immutable"); var list3 = list2.Foo("word"); (这是C#代码,如果你觉得这个语言很重要,我最感兴趣的是C#的build议,这不是一个基本的语言问题,但是这个语言的习惯用法可能很重要。 重要的是现有的列表不会被Foo修改,所以empty.Count仍然会返回0。 另一种(更习惯的)达到最终结果的方式是: var list = new ImmutableList<string>().Foo("Hello") .Foo("immutable") .Foo("word"); 我的问题是: Foo最好的名字是什么? 编辑3 :正如我后来透露,types的名称可能实际上不是ImmutableList<T> ,这使得位置清晰。 想象一下,它是TestSuite ,它是不可变的,因为它是整个框架的一部分是不可变的… (编辑结束3) 我到目前为止的选项: Add :在.NET中通用,但意味着原始列表的变化 Cons :我认为这是function语言中的普通名字,但对那些没有这种语言经验的人来说毫无意义 Plus :迄今为止我的最爱,这并不意味着我的变化 。 显然这也是在Haskell中使用的,但是期望稍有不同(Haskell程序员可能期望它将两个列表一起添加,而不是向另一个列表添加单个值)。 With :一致的一些其他不变的约定,但不具有相同的“增加”它IMO。 And :不是很具描述性。 运营商超负荷+:我真的不喜欢这么多; 我一般认为运营商只适用于较低层次的types。 […]

为什么处理sorting数组比sorting数组慢?

我有一个500000个随机生成的Tuple<long,long,string>对象的列表,我正在执行一个简单的“between”search: var data = new List<Tuple<long,long,string>>(500000); … var cnt = data.Count(t => t.Item1 <= x && t.Item2 >= x); 当我生成我的随机数组并运行search100个随机生成的x值时,search将在大约四秒钟内完成。 知道sortingsearch的好处 ,然而,我决定先sorting我的数据 – 首先是Item1 ,然后是Item2 ,最后是Item3 – 在运行我的100次search之前。 由于分支预测,我预计分类后的版本会执行得更快一些:我的想法是,一旦我们到达了Item1 == x ,对t.Item1 <= x所有进一步检查都会正确地预测分支为“no采取“,加快了search的尾部。 令我惊讶的是, search花了两倍的时间在一个有序的数组上 ! 我尝试转换我运行实验的顺序,并为随机数生成器使用了不同的种子,但效果相同:在未sorting数组中的search运行速度几乎是同一数组中search的两倍,但sorting! 有没有人有这个奇怪的效果很好的解释? 我的testing源代码如下; 我正在使用.NET 4.0。 private const int TotalCount = 500000; private const int TotalQueries = 100; private […]

什么是计算机科学的NP完整?

什么是NP完全问题? 为什么这是计算机科学中的一个重要话题?

在<10行简单代码中可以做的最酷的事情是什么? 帮助我激发初学者!

我正在寻找几行简单代码中最酷的东西。 我敢肯定,你可以在15行的Haskell中写一个Mandelbrot集,但是很难跟踪。 我的目标是激发学生编程很酷 。 我们知道编程很酷,因为您可以创build任何您想象的东西 – 这是最终的创意出路。 我想激励这些初学者,并尽可能多地学习早期的学习。 现在,我的理由是自私的。 我正在教授“ 计算入门”课程,课程包括60个半工半读的专业; 所有新生。 他们是来自贫困高中的学生。 从我以往的经验来看,这个小组大体上分为:几个摇滚明星 ,一些非常努力的人,一些很努力, 很less拿的人,还有一些不在乎的人。 我想尽可能多地接触到这些团体。 下面是一个如何使用计算机程序教学的例子: 下面是我正在寻找的一个例子:1行VBS脚本让您的计算机与您交谈: CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it") 我可以用这个来演示操作顺序。 我会显示代码,让他们玩,然后解释说,有很多事情在这一行,但计算机可以理解它,因为它知道规则。 然后我会向他们展示这样的事情: 4(5*5) / 10 + 9(.25 + .75) 你可以看到,首先我需要做的是(5 * 5)。 然后我可以乘以4.现在我已经创build了对象。 除以10与调用Speak相同 – 在有对象之前我不会说话,而在100之前我不能分开。然后在另一边,我首先创build一个InputBox,其中包含一些如何显示它的指令。 当我在input框中input时,它会评估或“返回”我input的内容。 (提示:'oooooo'发出一个有趣的声音)所以当我说话的时候,右边是说什么。 我从InputBox中获取。 所以当你在一行上做了几件事情,比如: x = 14 + y; 你需要了解事物的顺序。 首先我们添加14和y。 然后我们把结果(它所评估的或返回的)放到x中。 这是我的目标,有一堆这些很酷的例子来展示和教课,而他们玩得很开心。 我在室友身上试过这个例子,虽然我可能不会把这个作为第一课,但是她喜欢它并学到了一些东西。 […]

跟进:find颜色之间的准确“距离”

原来的问题 我正在寻找一个函数,试图量化“遥远”(或不同)两种颜色是如何。 这个问题真的有两个部分: 什么颜色空间最能代表人类视觉? 那个空间中的哪个距离度量最能代表人类的视觉(欧几里德?)