问题列表 - 第42715页

如何使用最相关的项目保留大型优先级队列?

在优化问题中,我在队列中保留了许多候选解决方案,我根据它们的优先级来检查.

每次我处理一个候选人时,它会从队列中删除,但它会产生几个新的候选人,使得候选人数呈指数级增长.为了处理这个问题,每当候选人被添加到队列中时,我就为每个候选人分配一个相关性,如果没有更多的空间可用,我用新的候选者替换(如果适当的话)队列中当前最不相关的候选人.

为了有效地做到这一点,我保留了一个大的(固定大小)数组与候选和两个链接的间接二进制堆:一个以递减的优先级顺序处理候选,另一个以递增的相关性处理候选.

这对我的目的来说足够有效,并且所需的补充空间大约是4个投注/候选人,这也是合理的.然而,编码很复杂,而且看起来并不是最佳的.

我的问题是,如果您知道更合适的数据结构或更自然的方式来执行此任务而不会降低效率.

c++ algorithm data-structures

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

简化const重载?

我已经教了很多年的C++编程课程,向学生解释的最棘手的事情之一是const重载.我通常使用类似矢量的类及其operator[]函数的示例:

template <typename T> class Vector {
public:
    T& operator[] (size_t index);
    const T& operator[] (size_t index) const;
};
Run Code Online (Sandbox Code Playgroud)

我很难解释为什么需要两个版本的operator[]函数,但在试图解释如何将两个实现统一起来时,我常常发现自己浪费了很多时间使用语言arcana.问题是,我知道如何使用const_cast/ static_casttrick 实现其中一个函数的唯一好的,可靠的方法是:/ trick:

template <typename T> const T& Vector<T>::operator[] (size_t index) const {
     /* ... your implementation here ... */
}
template <typename T> T& Vector<T>::operator[] (size_t index) {
    return const_cast<T&>(static_cast<const Vector&>(*this)[index]);
}
Run Code Online (Sandbox Code Playgroud)

这种设置的问题在于解释起来非常棘手,而且根本不明显.当你把它解释为"转换为const,然后调用const版本,然后去掉constness"时,它会更容易理解,但实际的语法是可怕的.解释什么const_cast是,为什么它的适当位置,以及它为什么几乎普遍不恰当的其他地方通常需要我五至十分钟的演讲时间,而这整个表达式的决策意识往往需要比之间的差异更多的精力const T*T* const.我觉得学生需要了解const-overloading以及如何在不必要地复制两个函数中的代码的情况下完成它,但是这个技巧在C++入门编程课程中似乎有些过分.

我的问题是 - 是否有一种更简单的方法来实现相互const重叠的功能?或者是否有更简单的方法向学生解释现有技巧?

c++ overloading const

42
推荐指数
4
解决办法
3962
查看次数

调试:到System.out.println()或不到System.out.println()

这是我的问题.更具体地说,我正在尝试习惯Eclipse的调试器,我想知道在某些情况下打印到控制台是否仍然完成,或者它是否被认为是一种应该完全避免的不良做法.还有什么可以被认为是整体调试的好方法?

java debugging

4
推荐指数
2
解决办法
1万
查看次数

UITextField不会显示清除按钮

我有一个UITextField,我想在其中显示一个清除按钮.UITextField的cornerRadius已被修改,没有边框.我还在文本区域的左侧和右侧添加了填充.以下代码没有明确的按钮.

searchField.layer.cornerRadius = 15;
searchField.clearButtonMode = UITextFieldViewModeAlways;
UIView *padding = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 8, 20)];
searchField.leftView = padding;
searchField.leftViewMode = UITextFieldViewModeAlways;
searchField.rightView = padding;
searchField.rightViewMode = UITextFieldViewModeAlways;
[padding release];
[searchField addTarget:self action:@selector(textFieldDidChange) forControlEvents:UIControlEventEditingChanged];
searchField.userInteractionEnabled = YES;
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么我无法显示按钮?我很感激任何帮助.

谢谢!

cocoa-touch uitextfield

3
推荐指数
1
解决办法
3458
查看次数

加快Visual Studio 2010/Resharper/ASP.NET MVC中的编译和单元测试

我正在使用Visual Studio 2010和Resharper开发中型ASP.NET MVC解决方案.当我在1年半前开始开发它时,该项目非常快,但随着时间的推移,它变得越来越慢 - 不仅是编译,而且是ASP.NET重新初始化网站所需的时间.由于我经常练习TDD和重构,我经常需要重新编译重新运行我的测试,所以我正在寻找方法来缓解这种情况,如果可能的话.

这个问题详细

从开始重新编译项目到能够在Web浏览器中查看结果,我需要大约20-25秒.

使用Resharper测试运行器运行单个单元测试(仅一个测试,而不是整个套件)也非常慢(大约15-20秒).出于一些奇怪的原因,似乎Resharper大部分时间都在初始化测试运行并且只花费很小一部分实际运行测试.

我已经做了什么:

  • 用SSD替换我的硬盘(巨大的影响)
  • 将ASP.NET的编译和Windows Temp目录目录移动到类似SSD的(硬件)RAM驱动器(影响很大,但那是在SSD之前)
  • 禁用自动编译我很少修改的一个项目(因为该项目的影响很小,无论如何).
  • 淘汰了对.NET和第三方库的不必要的引用(非常小的影响,如果有的话)
  • 这篇博文中讨论了一些黑魔法技巧.(影响很小,如果有的话).

然而,我仍然坚持上述(慢?)数字,我觉得这会损害我的生产力.现在我想知道下一步该做什么.

我目前的系统设置:

  • Core 2 Quad Q6600 CPU
  • 4GB DDR2 800 RAM
  • 120 GB SSD
  • Windows 7 x64
  • Visual Studio 2010 Ultimate与Resharper 5.5

我的解决方案的规格:

  • 22.000行.NET 4 C#代码
  • 3个项目:一个ASP.NET MVC,一个测试项目,一个小型通用库包含在另外两个中,除非发生变化,否则我不会编译.
  • 35个对其他库的引用(.NET框架和开源的东西)
  • ~200意见
  • 850单元测试

现在我的问题:

  • 将我的RAM升级到8GB可以给我带来显着的性能提升吗?
  • 这些数字是否正常?或许这可能是我的解决方案的问题?
  • 接下来你会尝试什么(除了购买一台全新的电脑)?

谢谢,

阿德里安

编辑:一个特别奇怪的事情是,当我点击"构建解决方案"按钮时,Visual Studio花了大约8秒钟向我显示一个等待符号,直到它实际开始编译并且正在更新编译窗口.在此期间,IDE是不受欢迎的.这是实际编译时间的很大一部分.我想知道Visual Studio在此期间做了什么?

.net asp.net hardware asp.net-mvc visual-studio

12
推荐指数
2
解决办法
5059
查看次数

识别正则表达式模式中的捕获组

Java中是否有一种方法(可能还有一个额外的开源库)来识别a中的捕获组java.util.regex.Pattern(即在创建匹配器之前)

Java文档中的示例:

捕获组通过从左到右计算它们的左括号来编号.在表达式((A)(B(C)))中,例如,有四个这样的组:

1         ((A)(B(C)))
2         (A)
3         (B(C))
4         (C)
Run Code Online (Sandbox Code Playgroud)

原则上应该可以从(编译的)模式中识别这些.

更新:从@Leniel和eslewhere看来,这个工具("命名组")将在2011年中期出现在Java 7中.如果我不能等待,我可以使用jregex虽然我不太确定API是什么是.

java regex capture-group

4
推荐指数
1
解决办法
4347
查看次数

Haskell:我的缩进错误是什么

我通过以下代码得到了我认为的缩进错误

152     -- find the first one who can refute the scenario
153     let cs = map ($scenario) [ Suspect . getWho, Room . getWhere, Weapon . getHow ]
154     let (qs,rss) = break (not . null . intersect cs . hand) ps
155     unless (null rss) $ do
156       let refuter:ss= rss
157       let valid = intersect cs $ hand refuter
158 
159       (refuter, shown) <- if cheated refuter
160                             -- if the refuter is a cheater, just choose …
Run Code Online (Sandbox Code Playgroud)

haskell indentation

0
推荐指数
1
解决办法
200
查看次数

在INSERT中复制主键是否在Oracle中复制?

我有一个简单的INSERT查询,当主键是重复时我需要使用UPDATE.在MySQL中这似乎更容易,在Oracle中我似乎需要使用MERGE.

我能找到的MERGE的所有例子都有某种"源"和"目标"表,在我的例子中,源和目标是同一个表.我无法理解创建自己的查询的示例.

MERGE是唯一的方式,还是有更好的解决方案?

INSERT INTO movie_ratings
VALUES (1, 3, 5)
Run Code Online (Sandbox Code Playgroud)

它基本上是这个,主键是前2个值,所以更新将是这样的:

UPDATE movie_ratings
SET rating = 8
WHERE mid = 1 AND aid = 3
Run Code Online (Sandbox Code Playgroud)

我想过使用一个触发器,它会在调用INSERT时自动执行UPDATE语句,但前提是主键是重复的.这样做有什么问题吗?我需要一些关于触发器的帮助,因为我在尝试理解它们并做我自己时遇到了一些困难.

oracle merge insert upsert

1
推荐指数
1
解决办法
2万
查看次数

需要在PHP中使用特殊字符将单词大写

ucwords不能大写öüäize等外国字符

所以我需要一个解决方案,它将“öösel”变成“Öösel”

是否有使用regexp的简单方法,还是我必须手动检查所有字符?

php capitalize

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

什么叫做与不可变对象一起使用的类工厂(java)方法

为"不可变对象"创建类时,不可变意味着无法更改实例状态; 用Java(和类似语言)在构造函数中分配的所有字段,有时仍然允许创建修改后的实例.也就是说,使用实例作为基础,并创建一个仅由一个属性值不同的新实例; 来自基本实例的其他值.举一个简单的例子,可以有类:

public class Circle {
  final double x, y; // location
  final double radius;

  public Circle(double x, double y, double r) {
    this.x = x;
    this.y = y;
    this.r = r;
  }

  // method for creating a new instance, moved in x-axis by specified amount
  public Circle withOffset(double deltaX) {
    return new Circle(x+deltaX, y, radius);
  }
}
Run Code Online (Sandbox Code Playgroud)

那么:应该调用什么方法"withOffset"?(注意:不应该是它的名字 - 但是这类方法叫做什么).从技术上讲,它是一种工厂方法,但对我来说似乎不太合适,因为工厂通常只给出基本属性(并且是静态方法,或者不是结果类型的成员,而是工厂类型).

所以我猜这些方法应该有一个更好的术语.既然这些方法可以用来实现" 流畅的界面 ",那么它们可能是"流利的工厂方法"吗?更好的建议?

编辑:正如其中一个答案所示,java.math.BigDecimal是一个很好的例子,它的'添加','减去'(等)方法.

另外:我注意到这个问题(Jon Skeet并没有减少)有点相关(虽然它询问方法的具体名称)

编辑,2014年5月:我目前最喜欢的是mutant factory,FWIW.

java oop terminology immutability

5
推荐指数
1
解决办法
1091
查看次数