如果您恰好使用2的幂,则左右移位显然比大多数甚至所有CPU上的乘法和除法运算更快.但是,它可能会降低某些读取器和某些算法的代码清晰度.位移对于性能是否真的是必要的,或者我可以期望编译器或VM注意到这种情况并对其进行优化(特别是当2的幂是文字时)?我主要对Java和.NET行为感兴趣,但欢迎深入了解其他语言实现.
我的问题在概念上类似于解决字谜,除了我不能只使用字典查找.我试图找到合理的词而不是真实的词.
我已经基于一堆文本中的字母创建了一个N-gram模型(现在,N = 2).现在,给定一个随机的字母序列,我想根据转移概率将它们置于最可能的序列中.我认为在开始时我需要维特比算法,但随着我看起来更深入,维特比算法根据观察到的输出优化了一系列隐藏的随机变量.我正在尝试优化输出序列.
有没有一个众所周知的算法,我可以阅读?或者我是否与Viterbi走在正确的轨道上,我只是没有看到如何应用它?
更新
我已经添加了一笔赏金来要求更深入地了解这个问题.(分析解释为什么不能采用有效的方法,除模拟退火之外的其他启发式/近似等)
algorithm machine-learning mathematical-optimization markov n-gram
在a上使用.ToList()
扩展方法时Stack<T>
,结果与弹出每个元素并添加到新列表(推送的内容相反)相同吗?
如果是这样,这是因为它实际上是迭代每个元素,还是内部反向存储元素并将数组转换为新元素List<T>
?
我有一个二维锯齿状数组(虽然它总是矩形),我使用传统的循环初始化:
var myArr = new double[rowCount][];
for (int i = 0; i < rowCount; i++) {
myArr[i] = new double[colCount];
}
Run Code Online (Sandbox Code Playgroud)
我想也许一些LINQ函数会在一个语句中给我一个优雅的方法来做到这一点.但是,我能想出的最接近的是:
double[][] myArr = Enumerable.Repeat(new double[colCount], rowCount).ToArray();
Run Code Online (Sandbox Code Playgroud)
问题是它似乎正在创建一个单独的double[colCount]
并为每行分配一个新数组的intsead分配引用.有没有办法做到这一点,而不是太神秘?
可能重复:
计数与集合中的长度与大小
我是否忽略了"长度"和"计数"之间的语义差异,或者.NET Framework中的某些实现细节是否需要这些类似概念的不同名称?鉴于对命名和框架中的其他所有内容的密切关注,必须有一个很好的解释.
根据我的理解,global::
限定符允许您访问已被另一个具有相同名称隐藏的命名空间.该MSDN页面使用System
作为一个例子.如果您创建自己的命名空间System
,则可以使用global::System
.首先想到的是,为什么有人会调用他们的命名空间System
?该页面继续说这显然不推荐,但在大型项目中很可能使用命名空间重复.如果/何时发生这种情况,是否表明事情正朝着错误的方向前进,或者是否有正当理由存在冲突的命名空间?
如果异常一直传播到我的应用程序的顶部(当然,这绝不会发生),我想提供在程序崩溃之前向我发送错误报告的选项.我想到的是在一个try-catch中包装Main函数中的所有东西,以及一个将堆栈跟踪和其他信息发送到我的服务器的小类.这听起来很简单,但有了这样的话,我确信我还没有充分考虑过障碍(例如安全性,面向未来).
是否存在用于此目的的现有.NET库/项目?或者,这听起来像是正确的方法,只是在应用程序的入口点捕获所有异常?
我正在将一个开源Java库转换为C#,它有许多标记为已弃用的方法和类.这个项目是一个以干净的方式开始的机会,所以我打算完全删除它们.然而,作为大型项目的新手,我很紧张,情况会再次出现.由于敏捷开发的大部分内容都围绕着使某些东西现在正常工作并在以后需要时进行重构,因此API的弃用似乎必然是一个常见的问题.即使我不完全确定项目的未来发展方向,我是否可以采取预防措施来避免/尽量减少API弃用?
c# ×5
.net ×4
agile ×1
algorithm ×1
api ×1
arrays ×1
collections ×1
deprecated ×1
exception ×1
java ×1
linq ×1
list ×1
markov ×1
n-gram ×1
namespaces ×1
optimization ×1
stack ×1