我正在寻找一种算法将一系列正数分段为n个子序列,这样每个子集中数字之和的标准偏差就会最小化.
每个子序列中的数字的排序需要与原始序列中的排序相同
例如:
假设我有一个序列{1,1,1,1,1,1,10,1},我想分成2个子序列.
我相信最优解是{1,1,1,1,1,1},{10,1}.
第一个子序列的总和是6,第二个子序列的总和是11
这两个数字的标准差是~3.5,我相信这是最低的.
假设我有一个序列{4,1,1,1,1,6},我想分成3个子序列.
我相信最优解是{4},{1,1,1,1},{6}子
序列的总和是4,4和6.
3个数的标准差是~1.15,我是相信是最低的.
我能够想出的最好的算法是找到序列中每个数字的累积和,并在[totalSum/numSubsequences]的每个间隔处对序列进行分段.
例如,给定序列{4,1,1,1,1,6},每个序列的数量的累积和是{4,5,6,7,8,14}.序列中所有数字的总和为14,因此,假设我想要3个子序列,我应该在总数达到14/3 = 4.66和2*14/3 = 9.333333时对序列进行分段.
但是,累计总数等于4.66的序列中没有实际位置 - 第一个累计总数为4,下一个累计总数为5.那么我应该向上舍入还是应该向下舍入?在这种情况下,向下舍入为4会给出最佳解决方案,但情况并非总是如此.我能想到的最好的方法是尝试向上和向下舍入的每个组合,但这会导致O(2 ^ numSubsequences)复杂度.
这似乎是一种可以应用预先存在的算法的东西,但是我的谷歌搜索让我失望了.我知道分区问题,它是NP完全的,但它处理的是无序集,而不是有序序列.
任何帮助,将不胜感激.
多年来,我一直是测试驱动开发的实践者,总体而言我很满意.我还不了解的一个部分就是你应该总是对"最小可能的单位"进行单元测试.
单元测试的部分想法似乎是让你自信地重构,你不会破坏任何东西.但是,我发现测试非常小的代码片段的测试几乎不会在这些重构中存活下来,代码总是会发生很大变化,以至于小单元测试会被丢弃并且新的测试被编写.这些测试涵盖了似乎在这里提供最大价值的更大功能,因为更高级别的接口不会经常变化.
对于琐碎的重构,比如移动方法,这些只是通过IDE完成的,因为我使用的是静态类型语言,所以我从未遇到IDE无法完美地进行重构的情况.
其他人有相似或相反的经历吗?
我们目前正在评估不同的Java报告引擎,并且需要具有基于Web的临时报告设计器.
我们不需要任何太花哨的东西,但我们需要用户能够定义一个包含X列的报告,按Y分组,按Z排序等等...我们发现许多开源工具都有图形化报告设计师,但设计师通常不是基于网络的.(例如,来自JasperReports的iReport似乎是一个应用程序,而不是一个Web工具)
任何人都可以推荐符合此基于Web要求的报告工具吗?
我有一个 getStockQuote() 函数,它将从股票市场获取某个符号的当前股票报价。
我的目标是在 JTA 事务中,第一次调用 getStockQuote() 将获取股票报价,但同一事务中的所有后续调用将重用相同的股票报价(例如:它不会尝试获取新报价)。如果不同的事务开始,或者另一个事务同时运行,我希望另一个事务在第一次调用时获取自己的股票报价。
这是为了尽量确保交易内的一致性——以便交易内的所有计算都基于相同的股票价格。
这类似于如何将 JPA 提供程序配置为仅从数据库中获取数据库行一次,并使用缓存的值来后续访问事务中的同一数据库行。
有谁有关于如何实现这一目标的提示吗?
java ×2
algorithm ×1
jta ×1
reporting ×1
sequence ×1
testing ×1
transactions ×1
unit-testing ×1