Questions tagged «language-agnostic»

将此标签用于独立于任何特定编程语言的编程问题。

1
寻找最少的矩形以覆盖一组矩形而不重叠的算法
我有一组矩形,我想“减少”该矩形,所以我用最少的矩形来描述与原始矩形相同的区域。如果可能的话,我希望它也很快,但是我更关心的是使矩形的数量越少越好。我现在有一种方法在大多数时间都有效。 目前,我从最左上角的矩形开始,看看是否可以在保持矩形的同时向右和向下扩展它。我这样做直到它无法再扩展,然后删除并拆分所有相交的矩形,然后将扩展的矩形添加回列表中。然后,我使用最左上角的下一个矩形再次开始该过程,依此类推。但是在某些情况下,它不起作用。例如: 使用这组三个矩形,正确的解决方案将以两个矩形结束,如下所示: 但是,在这种情况下,我的算法从处理蓝色矩形开始。这会向下扩展并分裂黄色矩形(正确)。但是,当处理完黄色矩形的其余部分时,它没有向下扩展,而是先向右扩展,然后取回先前拆分的部分。然后处理最后一个矩形,它不能向右或向下扩展,因此保留了原来的矩形集。我可以调整算法,使其首先向下扩展,然后再向右扩展。这样可以解决这种情况,但是在翻转的类似情况下会导致相同的问题。 编辑:只是为了澄清,原始的矩形集不重叠,也不必连接。如果连接了矩形的子集,则完全覆盖矩形的多边形可能会在其中带有孔。

8
多少抽象太多了?
在面向对象的程序中:抽象太多了?多少才对? 我一直都是个小人物。我了解高级封装和抽象背后的概念,但总是本能地认为添加太多内容只会使程序感到困惑。 我总是尝试拍摄一些抽象的东西,而没有留下任何空白的类或层。如有疑问,我将尝试在现有层中添加一些内容,而不是在层次结构中添加新层。 但是,最近我遇到了更多高度抽象的系统。一种系统,其中可能需要在层次结构中稍后进行表示的所有内容都预先放置了。这导致了很多空层,一开始似乎是不好的设计。但是,经过深思熟虑,我逐渐意识到,保留那些空的层将使您有更多的空间可以在将来使用而无需进行大量重构。它使您拥有了在旧功能之上添加新功能的更大能力,而无需进行几乎相同的调整旧功能。 这样做的两个风险似乎是您可能弄错了您需要的图层。在这种情况下,仍然需要进行大量的重构以扩展代码,并且仍然会有大量的未使用层。但是,取决于您花费多少时间来进行初始抽象,将其搞砸的机会以及如果正确就可以在以后节省的时间-仍然值得尝试。 我能想到的另一个风险是过度执行该风险而永远不需要所有额外层的风险。但这真的很糟糕吗?额外的类层真的那么贵吗,如果不使用它们,会造成很大的损失吗?这里最大的开销和损失将是时间,这些时间是与各个层一起预先损失的。但是,当人们可以使用抽象代码而不是更底层的代码时,大部分时间仍可以节省下来。 那么什么时候太多呢?在什么时候空层和多余的“可能需要”抽象变得过大?多少太少?最好的地方在哪里? 您在职业生涯中是否找到可靠的经验法则来帮助您判断所需的抽象量?

15
什么是环复杂性?
我时不时看到的一个术语是“循环复杂性”。在SO上,我看到了一些有关“如何计算语言X的CC”或“如何用最小的CC来做Y”的问题,但是我不确定我是否真正理解它是什么。 在NDepend网站上,我看到一个解释,基本上是这样说的:“方法中的决策数。每个if,for,&&等都将CC的“分数”加+1)。真的吗?如果是,为什么呢?我可以看到有人可能希望将if语句的数量保持在相当低的水平,以使代码易于理解,但这真的是要解决的一切吗? 还是有一些更深层次的概念?


12
如何从条形码中查找有关书籍的数据?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 2年前关闭。 改善这个问题 我正在构建世界上最简单的库应用程序。我想要做的就是使用典型的扫描仪(只需在字段中键入条形码的编号)在书籍的UPC(条形码)中进行扫描,然后使用它来查找有关书籍的数据...最小值,标题,作者,出版年份,以及Dewey十进制或国会图书馆的目录号。 目的是打印出一个很小的标签(带有“书脊标签”),上面贴有我可以粘贴在书脊上的卡片目录号,然后我可以通过公司图书馆书架上的卡片目录号对书籍进行分类。这样一来,类似主题的书就趋于彼此靠近,例如,如果您知道要查找有关会计的书,那么您所要做的就是找到一些有关会计的书,而您会看到另一半紧挨着它,这使浏览图书馆变得很方便。 似乎有很多Web API可以做到这一点,包括亚马逊和国会图书馆。但是这些都让我非常困惑。我真正想要的是一个单一的高级函数,该函数采用UPC条形码编号并返回有关该书的一些基本数据。

10
您从这种随机打乱中得到什么分布?
著名的Fisher-Yates随机播放算法可用于随机排列长度为N的数组A: For k = 1 to N Pick a random integer j from k to N Swap A[k] and A[j] 一遍又一遍地告诉我不要犯的一个常见错误是: For k = 1 to N Pick a random integer j from 1 to N Swap A[k] and A[j] 也就是说,您不是从k到N中选择一个随机整数,而是从1到N中选择了一个随机整数。 如果您犯了这个错误怎么办?我知道结果排列不是均匀分布的,但是我不知道对结果分布有什么保证。特别是,是否有人对元素的最终位置上的概率分布有表达式?

11
智能进度条ETA计算
在许多应用程序中,我们都有一些进度条,用于文件下载,压缩任务,搜索等。我们都经常使用进度条让用户知道正在发生的事情。而且,如果我们知道一些细节,例如已完成的工作量和剩余的工作量,我们甚至可以给出时间估计,通常可以通过推断达到当前进度所需的时间来推断。 (来源:jameslao.com) 但是,我们还看到了这个“ ETA”时间显示的程序,可笑的是糟糕的。它声称将在20秒内完成文件复制,然后一秒钟后它说将需要4天,然后又闪烁了20分钟。这不仅无益,而且令人困惑!ETA变化很大的原因是,进度本身可能变化,并且程序员的数学可能过于敏感。 苹果通过避免任何准确的预测并仅给出模糊的估计来避开这种情况! (来源:autodesk.com) 这也很烦人,我是否有时间快速休息,还是我的任务将在2秒内完成?如果预测过于模糊,则根本无法进行任何预测。 简单但错误的方法 作为首轮ETA计算,大概我们都可以做一个函数,例如如果p是已经完成的小数百分比,而t是到目前为止所花费的时间,我们输出t *(1-p)/ p作为对p的估计。需要多长时间才能完成。这个简单的比率可以“正常”运行,但也很糟糕,尤其是在计算结束时。如果您的缓慢下载速度使副本在一整夜里缓慢前进,最后在早晨,则出现了一些情况,并且副本开始以全速以100倍的速度全速运行,您的ETA完成了90%时可能会说“ 1小时”和10秒后来您达到95%,ETA会说“ 30分钟”,这显然是一个令人尴尬的猜测。.在这种情况下,“ 10秒”是一个更好得多的估计。 发生这种情况时,您可能会考虑将计算更改为使用最新速度而非平均速度来估计ETA。您可以获取最近10秒钟的平均下载速率或完成率,并使用该速率来预测完成时间。在之前的过夜下载(最终速度加快)示例中,该方法的效果很好,因为最终它会给出非常好的最终完成估算值。但这仍然有很大的问题..当您的速率在短时间内快速变化时,它会导致您的ETA剧烈反弹,并且您得到“在20秒内完成,在2小时内完成,在2秒内完成,在30秒内完成分钟”迅速显示出编程的耻辱。 实际问题: 给定计算的时间历史,计算任务完成时间的最佳方法是什么?我不是在寻找指向GUI工具包或Qt库的链接。我问的算法来生成最明智的和准确的完成时间估计。 数学公式是否成功?某种平均,可能是通过使用10秒以上的速率的平均值,1分钟以上的速率和1小时以上的速率的平均值?某种人工过滤,例如“如果我的新估计值与先前的估计值相差太大,将其调低,不要让其反弹太多”?某种花式历史分析,您可以在其中整合进度与时间进度,以找到费率的标准偏差,从而在完成时提供统计误差指标? 您尝试过什么,什么最有效?

16
了解封装和抽象的简单方法
学习特别感兴趣的OOP概念,以深入了解抽象和封装。 已经检查了以下内容 抽象VS信息隐藏VS封装 和封装之间的区别? 我发现很难用一个真实而简单的示例类/代码片段来理解这些概念。 我的一位同事说,抽象只不过是创建抽象类和使用范围保护其成员变量的普通类,称为封装。 有没有一种简单的方法可以使我理解并帮助他人了解他们的确切身份,而不是重复以下内容? 抽象和封装是互补的概念:抽象集中于对象的可观察行为...封装着重于引起这种行为的实现...封装通常是通过信息隐藏来实现的,信息隐藏是隐藏所有对象的过程。对物体的本质没有帮助的秘密。


20
以编程方式减轻颜色
动机 我想找到一种方法来采用任意一种颜色并将其变浅一些阴影,以便可以以编程方式创建一个从一种颜色到较浅版本的渐变。渐变将用作UI中的背景。 可能性1 显然,我可以将RGB值分开并分别增加一定数量。这真的是我想要的吗? 可能性2 我的第二个想法是将RGB转换为HSV / HSB / HSL(色相,饱和度,值/亮度/亮度),稍微提高亮度,降低饱和度,然后再将其转换回RGB。总体上会达到预期的效果吗?

11
元编程的用途是什么?
我读了: 维基百科 代码生成与元编程 元编程的艺术 在c2.com进行元编程 我承认元编程/代码生成背后的目的有些混乱。 有没有人提供在哪里使用元编程/代码生成的具体示例?更好的解释是为什么它比其他方法更好。 编辑:将蓟视为元编程吗?

5
什么是缓存命中和缓存未命中?为什么上下文切换会导致高速缓存未命中?
从第11章(性能和可伸缩性)以及JCIP书籍中名为上下文切换的部分开始: 切入新线程时,所需的数据不太可能位于本地处理器高速缓存中,因此上下文切换会导致大量高速缓存未命中,因此在首次调度线程时,它们的运行速度会稍微慢一些。 有人能以一种易于理解的方式解释高速缓存未命中的概念及其可能的对立面(高速缓存命中)吗? 为什么上下文切换会导致很多缓存丢失?

8
真的不适合钱吗?
我总是在c#中告诉您double类型的变量不适合钱。所有奇怪的事情都可能发生。但是我似乎无法创建一个示例来演示其中的一些问题。谁能提供这样的例子? (编辑;此帖子最初被标记为C#;一些回复涉及的具体细节decimal,因此,这意味着System.Decimal)。 (编辑2:我是专门要求一些C#代码的,所以我不认为这仅与语言无关)

2
单子vs箭
我对函数式编程中使用的monad和箭头的概念非常熟悉。我也了解它们可以用来解决类似的问题。 但是,对于在任何给定情况下如何选择要使用的选项,我仍然有些困惑。 什么时候应该使用monad,什么时候应该使用箭头?

8
创建色轮的功能[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 这是我多次伪解决过的事情,但从未找到解决方案。 问题是想出一种生成N颜色的方法,该颜色在N参数处尽可能地可区分。

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.