小编Ste*_*eve的帖子

我在哪里可以找到"算法设计手册"的解决方案?

这本书充满了有趣的问题,但由于我自己学习,如果我能找到至少一些问题的解决方案,那将是一个很大的帮助.

谁知道这个呢?

algorithm

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

在C#中舍入double值

我想在C#中对double值进行舍入方法.它需要能够将double值舍入到任何舍入精度值.我手边的代码看起来像:

public static double RoundI(double number, double roundingInterval) {

    if (roundingInterval == 0.0)
    {
        return;
    }

    double intv = Math.Abs(roundingInterval);
    double sign = Math.Sign(number);
    double val = Math.Abs(number);

    double valIntvRatio = val / intv;
    double k = Math.Floor(valIntvRatio);
    double m = valIntvRatio - k;

    bool mGreaterThanMidPoint = ((m - 0.5) >= 1e-14) ? true : false;
    bool mInMidpoint = (Math.Abs(m - 0.5) < 1e-14) ? true : false;
    return (mGreaterThanMidPoint || mInMidpoint) ? sign * ((k + 1) * intv) …
Run Code Online (Sandbox Code Playgroud)

c# double rounding

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

从不断增长的集合中找出中值

我在一次采访中遇到了一个有趣的算法问题.我给出了答案,但不确定是否有更好的主意.所以我欢迎大家写一些他/她的想法.

你有一个空集.现在元素逐个放入集合中.我们假设所有元素都是整数,它们是不同的(根据集合的定义,我们不考虑具有相同值的两个元素).

每次将新元素添加到集合中时,都会询问集合的中值.中值定义与数学中的相同:排序列表中的中间元素.这里,特别地,当集合的大小是偶数时,假设set = 2*x的大小,中值元素是集合的第x个元素.

一个例子:从空集开始,当添加12时,中位数为12,当添加7时,中位数为7,当添加8时,中位数为8,当添加11时,中位数为8,当添加5,中位数为8,当加16时,中位数为8,...

请注意,首先,元素被添加到逐个设置,其次,我们不知道要添加的元素.

我的答案.

由于这是一个关于寻找中位数的问题,因此需要进行排序.最简单的解决方案是使用普通数组并保持数组排序.当新元素到来时,使用二进制搜索来查找元素的位置(log_n)并将元素添加到数组中.由于它是一个普通的数组,因此需要移动阵列的其余部分,其时间复杂度为n.插入元素后,我们可以使用实例时间立即获得中位数.

最糟糕的时间复杂度是:log_n + n + 1.

另一种解决方案是使用链接列表.使用链接列表的原因是消除了移动阵列的需要.但是找到新元素的位置需要线性搜索.添加元素需要立即时间,然后我们需要通过遍历数组的一半来找到中值,这总是需要n/2次.

最差时间复杂度为:n + 1 + n/2.

第三种解决方案是使用二叉搜索树.使用树,我们避免移动数组.但是使用二叉搜索树来查找中位数并不是很有吸引力.所以我改变二叉搜索树的方式总是左子树和右子树是平衡的.这意味着在任何时候,左子树和右子树都具有相同数量的节点,或者右子树比左子树中的节点多一个节点.换句话说,确保在任何时候,根元素是中值.当然,这需要改变树的构建方式.技术细节类似于旋转红黑树.

如果树被正确维护,则确保WORST时间复杂度为O(n).

因此,这三种算法都与集合的大小成线性关系.如果不存在子线性算法,则可以将这三种算法视为最优解.由于它们彼此之间没有太大区别,因此最好的是使用链接列表最容易实现,这是第二个.

所以我真的很想知道,这个问题是否会有一个亚线性算法,如果是这样的话会是什么样的.有什么想法吗?

史蒂夫.

algorithm

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

如何降级AWS EC2?

我有一个大型的Amazon Web Service EC2虚拟服务器.现在我想把它降级为小型.我想保留硬盘信息,但只需下载服务器的配置.主要原因是节省了一些钱.我怎样才能做到这一点?

我想我应该:

  1. 停止当前实例.
  2. 从当前实例中分离卷.
  3. 终止实例.
  4. 从头开始重新创建一个新的小型实例.
  5. 将卷附加到小型实例.

我不确定这是否是降级的正确方法,或者他们有正式的方法来做到这一点.我试图从文档中查找,但找不到任何有用的东西.我想这里有人必须能够帮助我.非常感谢你.

amazon-ec2

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

为什么我们需要Spring框架?

嗨,我是String的新手,正在阅读Martin Fowler撰写的文章:http://martinfowler.com/articles/injection.html

他举了一个MovieLister的例子,使用MovieFinder来寻找电影.在这个例子中,他首先提供了代码:

class MovieLister...
    private MovieFinder finder;
    public MovieLister() {
        finder = new ColonDelimitedMovieFinder("movies1.txt");
    }
}
Run Code Online (Sandbox Code Playgroud)

他指出,除非你的朋友使用相同的MovieFinder实现并将电影放在同一个txt文件中,否则你不能将MovieLister给你的朋友重复使用.

是的,当然,这不是你编写组件的方式,希望有人可以重用它.相反,随着他的进步,你应该写:

class MovieLister...
    public MovieLister(MovieFinder finder) {
        this.finder = finder;       
    }
}
Run Code Online (Sandbox Code Playgroud)

是的,那更好.现在你的朋友可以接管你的MovieLister并插入他自己的代码.对我来说,故事是完整的.我想念你为什么需要一个Spring框架来注入依赖项.依赖关系由朋友的代码注入MovieLister.完全停止.所有Spring设置等同于简单地实现MovieFinder接口并进行这样的调用:

MovieFinder myMovieFinder = new MyMovieFinderImpl();
MovieLister myMovieLister = new MovieLister(myMovieFinder);
Run Code Online (Sandbox Code Playgroud)

简单,容易.我知道你在代码中硬编码MyMovieFinderImpl实例的创建.但是将这一点转移到XML上又有什么意义呢?程序员是否因为害怕编译代码而更喜欢更改XML而不编译以完成所有工作?对不起,我想我只是错过了这一点.几十年前,每个程序都使用依赖注入.但是在过去,依赖是由程序使用库,DOS命令行或GUI注入的.为什么现在我们需要另一种方式来注入依赖?

谢谢.

更新:

好吧,你们很多人带来了注释.在我对Spring的理解中,我可能会更习惯使用XML而不是注释.至少有一个中心位置,以更容易理解的方式列出依赖关系.有了注释,没有这样的中心位置.相反,只是魔术发生.想知道传入的参数是什么?自己去弄清楚,祝你好运.是的,我知道有智能IDE插件可以帮助导航代码.但是,为什么我们首先让一件事变得复杂,并庆祝另一件让我们的生活更轻松的事情呢?事实上,注释使代码更难以浏览和理解,因此人们为此创建IDE插件是显而易见的,我们可能首先创建不必要的东西,不是吗?

java spring

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

如何在JUnit安装方法中处理异常

我有一个单元测试用例,它涉及创建一些包含随机内容的文件,然后使用这些文件进行测试并清理,删除文件.

所以我需要在@Before方法中创建文件并写入文件.我该如何处理异常?

java junit

17
推荐指数
1
解决办法
8742
查看次数

为什么本机DLL不会复制到输出目录

我有一个C#项目A,它使用.net包装器DLL和本机DLL.我将.net包装器DLL添加到项目A的引用列表中.由于包装器DLL仅在本机DLL处于同一文件夹时使用,因此应将本机DLL复制到项目A的输出目录中.我实现了这一点通过将本机DLL添加为项目A下的内容文件,并将其复制操作设置为在较新时复制.这可以.

如果一个C#项目B具有直接的参考项目A,VS将复制使用项目A到B项目的输出目录这意味着包装DLL和本地DLL将被复制到B项目的输出目录,以及所有相关文件.这也很好.

然后我还有另一个C#项目C,它只直接引用项目B,而不是项目A.有趣的是,VS不会将本机DLL复制到项目C的输出目录,否则我打算这样做当项目C使用项目B的功能并查找本机DLL以使用包装器DLL时,它将找不到它.

有人可以解释为什么VS不将本机DLL复制到项目C的输出目录中?在VS中复制依赖链的文件的机制是什么?非常感谢.

c# dll visual-studio-2008

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

数据绑定是否对隐形控制起作用?

这是winforms的.net问题,而不是asp.net.

我有一个带有几个标签的窗体.我在加载表单时设置所有控件的数据绑定.但我注意到第二个选项卡上的控件的数据绑定不起作用.这些绑定仅在加载表单和选择第二个选项卡时起作用.这给我带来了怀疑:数据绑定仅在绑定控件可见时才起作用.

任何人都可以告诉我这是否属实?测试这个并不难,但我想知道一些确认.

谢谢

.net c# winforms

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

在Java中,如何将对象列表转换为字节数组?

可能重复:
将任何对象转换为java中的字节数组

我有一个需要缓存的类.缓存API提供缓存的接口byte[].我的类包含一个字段List<Author>,Author另一个类在哪里.什么是正确的办法,我把List<Author>byte[]缓存?并检索byte[]从缓存重建List<Author>

关于Author类的更多细节:它非常简单,只有两个String字段.一个String领域是可能的null.

java caching

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

如何在DataGridView中更改单元格值时监视?

这是一个WinForms C#问题.

我有一个从标准DataGridView类继承的自定义DataGridView控件.我想监视每当单元格添加到网格时的情况,在网格中更改单元格值.我不知道该怎么做.

DataBindingCompleted事件在单元格/行/列级别无能为力.CellValueChanged事件本身令人困惑,因为它仅在用户修改UI中的值时触发,如果从基础数据源更新值,则无助.听什么是正确的事件?

我知道DataGridViewCell类有一个ValueChanging事件.但是在自定义的DataGridView中,如何将我的事件监听器挂钩到每个单元?

谢谢您的帮助.

c# datagridview winforms

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