小编sc_*_*ray的帖子

重构嵌套for循环

我有这种情况,我有两组数据之间的父子关系.我有一个父文档集合和一个子文档集合.要求是父母及其相应的孩子需要出口到'a'pdf文件中.上述情况的简单实现可以如下(java-ish伪代码如下):

for(Document parentDocument:Documents){
   ExportToPdf(parentDocument);
    for(Document childDocument:parentDocument.children()){
      AppendToParentPdf(childDocument);  
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的内容可能会解决问题,但突然之间需求会发生变化,现在每个父母及其相应的孩子都需要在单独的pdf中,所以通过更改以下内容AppendToParentPdf()来修改上面给出的片段ExportToPdf():

for(Document parentDocument:Documents){
   ExportToPdf(parentDocument);
    for(Document childDocument:parentDocument.children()){
      ExportToPdf(childDocument);  
  }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,不久之后,这个看似微不足道的片段就会遭遇一些严重的代码味道.

我对SO的问题是:

  1. 是否有更好的父母 - 孩子关系表示,如上所述,而不是以一种方式强行通过所有文件和他们的孩子O(n^2),我可以使用不同的数据结构或技术来遍历整个结构最佳时尚.

  2. 在上面描述的场景中,业务规则对于应该导出pdf的方式相当流畅,是否有更智能的方法来编写导出函数的性质?导出格式也是暂时的.PDF可以让位于*.docs/csvs/xmls等.

对此有所了解会很棒.

谢谢

java algorithm design-patterns export relationship

9
推荐指数
1
解决办法
3081
查看次数

在Scala ArrayBuffer中缺少扩展函数的参数类型

尝试从Scala运行以下代码片段时不耐烦:

val b = ArrayBuffer(1,7,2,9)
val bSorted = b.sorted(_ < _)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

 error: missing parameter type for expanded function ((x$1, x$2) => x$1.$less(x$2))
       val bSorted = b.sorted(_ < _)
Run Code Online (Sandbox Code Playgroud)

有人可以解释这里可能会发生什么.不应该从ArrayBuffer的内容中推断出参数类型,还是需要明确指定它?

谢谢

sorting parameters types scala

9
推荐指数
1
解决办法
1907
查看次数

了解自下而上的杆切割实施

算法导论(CLRS)中,Cormen等.谈论解决切杆问题如下(第369页)

EXTENDED-BOTTOM-UP-CUT-ROD(p, n)
    let r[0...n] and s[0....n] be new arrays
    r[0] = 0

    for j = 1 to n:
        q = -infinity   

        for i = 1 to j:
            if q < p[i] + r[j - i]:  // (6)
                q = p[i] + r[j - i]
                s[j] = i
        r[j] = q

    return r and s
Run Code Online (Sandbox Code Playgroud)

p[i]是在长度i切割杆的价格,r[i]是在长度i切割杆的收入,并且s[i]为我们提供了第一件切割的最佳尺寸.

我的问题是关于外部循环迭代是j1n和内循环i,从去1n为好.

在第6行,我们正在比较q(迄今为止获得的最大收入)与 …

language-agnostic algorithm dynamic-programming

8
推荐指数
1
解决办法
6955
查看次数

删除最少数量的刀片

最近,我在Timus在线评委中遇到了这个问题.对于不愿点击链接的人.问题如下:

乌拉尔锦标赛的经验丰富的参与者提前来到叶卡捷琳堡,以适应恶劣的天气条件,在城市中漫步,当然,还可以参观"林波波"水上公园.没有多少人知道水上乐园附近有404号植物,这个植物被当地人称为"错误404".这个工厂确实不容易找到,而且要了解那里发生的事情仍然更加困难.幸运的是,人们可以从附近的人行天桥上观看植物.由于植物看似静止和苍凉,人们可能会认为它已经停止运转,但事实并非如此.该工厂的主要工作区域是航空发动机的维修.不久前,该工厂收到了修理损坏的燃气涡轮发动机的命令.事实证明,一些叶片被撕掉,导致发动机轴上的负载过大.该工厂的专家已经决定,通过移除一些完整的叶片可以快速修复发动机,使剩余叶片的质量中心再次位于旋转轴上.为了使发动机功率尽可能大,应移除最少数量的叶片.必须留下至少一个叶片,否则发动机根本不起作用.专家断言,当所有叶片完好无损时,它们的端点形成一个正常的n-gon.告诉他们应该拆除哪些刀片.

> Input The first line contains the initial number of blades in the
> turbine n and the number of torn blades k (3 ? n ? 20000; 1 ? k ? n ?
> 1). The integer n has at most two distinct prime divisors. The next
> line contains k integers, which are the numbers of the torn blades in
> ascending order. The blades are numbered from 1 to n clockwise. 
Output
> …
Run Code Online (Sandbox Code Playgroud)

language-agnostic puzzle algorithm optimization

7
推荐指数
1
解决办法
276
查看次数

使用for和yield scala交换数组值

我试图使用for和yield交换我的数组中的每对值,到目前为止我非常不成功.我试过的内容如下:

val a = Array(1,2,3,4,5) //What I want is Array(2,1,4,3,5)

for(i<-0 until (a.length-1,2),r<- Array(i+1,i)) yield r
Run Code Online (Sandbox Code Playgroud)

上面给出的片段返回向量2,1,4,3(省略了5)

有人可以指出我在这里做错了什么以及如何使用for和yield得到正确的逆转?

谢谢

iteration swap for-loop scala yield

7
推荐指数
3
解决办法
6007
查看次数

Palindromes使用Scala

从CodeChef遇到了这个问题.问题表明如下:

如果正整数在从左到右和从右到左读取时在十进制系统中的表示相同,则称为回文.对于给定的正整数K不超过1000000个数字,写入大于K的最小回文值输出.

我可以定义一个isPalindrome方法如下:

def isPalindrome(someNumber:String):Boolean = someNumber.reverse.mkString == someNumber
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,当整数满足isPalindrome方法时,如何从初始给定数字循环并中断并返回第一个回文?另外,是否有更好(有效)的方法来编写isPalindrome方法?

在这里获得一些指导会很棒

iteration loops scala break palindrome

7
推荐指数
2
解决办法
5699
查看次数

懒惰的折扣,提前终止混乱

虽然会虽然在斯卡拉函数式编程,我碰到下面的代码片段:

def foldRight[A](z: => B)(f: (A,=>B) => B):B = uncons match {
  case Some((h,t)) => f(h,t.foldRight(z)(f))
  case None => z 
}
Run Code Online (Sandbox Code Playgroud)

然后,作者继续说明以下内容:

这看起来非常类似于我们为List编写的foldRight,但请注意我们的组合函数f在其第二个参数中是非严格的.如果f选择不评估其第二个参数,则会提前终止遍历.我们可以通过使用foldRight来实现exists来检查这一点,它检查Stream中的任何值是否与给定的谓词匹配.

然后作者陈述如下:

def exists(p: A => Boolean): Boolean =
  foldRight(false)((a, b) => p(a) || b)
Run Code Online (Sandbox Code Playgroud)

我的问题是组合函数f如何导致exists方法的提前终止?我不认为我能够理解文本中的情况.

functional-programming scala lazy-evaluation fold

7
推荐指数
1
解决办法
645
查看次数

无法对测试运行进行排队:无法启动代理进程(Visual Studio 2010)

在尝试在我的解决方案中运行所有单元测试时(Visual Studio 2010),我得到了"无法排队测试运行xxxx @ MACHINENAME 2010-06-23 14:01:36":无法启动代理进程错误.有谁知道导致这个特定错误的原因以及如何解决它以便我可以运行我的单元测试?

谢谢

.net ide unit-testing mstest visual-studio-2010

6
推荐指数
1
解决办法
6667
查看次数

Spring事务内部

情况如下:

  1. Method1中有四种数据库更新方法.Method1使用Spring事务管理语义进行注释.

  2. Method2中有一个数据库读取方法,并在Method1完成所有数据库更新后调用它.Method2也使用Spring事务语义进行注释.

  3. 有一个Web请求进入,控制器拦截请求并调用method1然后调用method2.

  4. 事务也包含在Web请求中.

我有兴趣知道的是:

1. Spring如何知道在成功交易时提交数据库更新?是否有一些引用进行事务管理的Spring实现?

2.由于我们有一个事务层次结构:围绕web-request-> Transaction with Propagation的事务= RequestNew for Method1-> Transaction with Propagation = Method2是必需的,Spring如何进行事务管理以确保事务在正确的上下文与正确的顺序?

简而言之,通过游戏来了解Spring如何在其所有最复杂的细节中执行事务管理或者不仅仅是手动挥动以JTA或其他缩写为中心的解释的文档的参考将是很棒的.

谢谢

java spring transactions internals

6
推荐指数
1
解决办法
2854
查看次数

执行DFS时在Boost :: graph中维护迭代器

Boost的大多数示例:图形库通过调用boost的深度优先搜索实用程序来执行深度优先搜索.在创建顶点和边之后,在图上调用DFS以深度优先的方式遍历整个图,如果我们有一个与之关联的访问者方法,它将调用visitor方法为每个遍历的节点执行一个动作.

我正在寻找的是一种在图形上维护迭代器的方法,而不是一次遍历图形,当客户端调用'next()'时,迭代器将移动到它将遍历的下一个顶点. DFS并在再次调用next时,迭代器将移动到DFS指示的下一个顶点.

是否有使用boost:graph执行上述操作的示例?

谢谢

c++ boost iterator graph depth-first-search

6
推荐指数
1
解决办法
213
查看次数