小编And*_*bey的帖子

算法:分而治之和时间复杂度O(nlogn)如何联系?

在我的算法与数据结构类第一divide-and-conquer algorithm,即merge sort进行了介绍.

在为分配实现算法时,我想到了一些问题.

  1. 使用除法和征服范式实现的算法是否具有O(nlogn)的时间复杂度?

  2. 是否该方法中的递归部分能够压缩以O(n ^ 2)到O(nlogn)运行的算法?

  3. 是什么让这种算法首先在O(nlogn)中运行.

对于(3)我假设这与递归树和可能的递归数量有关.有人可能会用一个简单的分而治之算法来运行,该算法在O(nlogn)中运行如何实际计算复杂度?

干杯,安德鲁

algorithm performance big-o divide-and-conquer

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

返回私有数据的副本而不是引用

在令人惊讶的书"Java the Good Parts"中,作者给出了一些代码,这些代码在其getter方法中返回一个对象的副本(与一个封装良好的字段一起使用),然后说明:

这种方法试图返回私有数据的副本而不是对私有数据的引用,这通常是一个好主意

为什么会这样?我认为封装的目标是确保没有人能够真正改变私人成员.那我为什么要写这样的东西呢

private someType fieldName = new someType(); 

...
Run Code Online (Sandbox Code Playgroud)

同时定义它的getter(假设有某种复制构造函数)

someType getSomething() 
{
return new someType(fieldName); 
}
Run Code Online (Sandbox Code Playgroud)

从我现在所知,我的意思是在你们流行之前是:

到目前为止这是有意义的,它服务垃圾收集,因为这种方法不维护对实际对象的引用.

从内部类的角度来看,它也是可以理解的,任何方法都可以通过引用改变任何可访问的字段.

但我并不怀疑这样做的两个原因是什么才真正超越了这个问题.

java reference

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

Java中的重载方法

必须满足什么条件才能使两个方法正确地成为重载方法?

是否两个方法的参数列表至少必须不同,例如

public void A() { //... }
public void A(int val) { //.. } 
Run Code Online (Sandbox Code Playgroud)

因此,仅改变return类型和/或access修饰符就不会产生两个重载方法吗?

java overloading

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

如何为给定的代码片段编写递归关系

在我的算法和数据结构类中,我们给了一些递归关系来解决或者我们可以看到算法的复杂性.

起初,我认为这些关系的单纯目的是为了记下递归分而治之算法的复杂度.然后我在麻省理工学院的作业中遇到了一个问题,其中一个被要求为迭代算法提供递归关系.

考虑到一些代码,我怎么能真正想出一个递归关系呢?有什么必要的步骤?

我是否可以记下任何情况,即最坏的,最好的,具有这种关系的平均情况,这是否正确?

有可能有人给出一个代码如何变成递归关系的简单例子吗?

干杯,安德鲁

algorithm recurrence

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

任何分而治之算法都使用递归

我正在与一位同学争论,因为他想说服我,有可能在不使用递归的情况下实现分而治之的算法.

这是真的吗?

algorithm divide-and-conquer

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

java中的递归序列化

我是第一次使用Java进行序列化.

我已经读过Java递归序列化对象.

假设我有一个Diet持有objects of type水果which holds objects like苹果,香蕉,菠萝的课程.

据我所知,一旦我序列化了Dietjava 类型的对象,就会以同样的方式存储其他对象.

但是:我打算(联合)序列化的所有课程都必须实现Serializable或只实现"顶级"(这里:) Diet

java serialization

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

交叉验证的目的是什么?

我现在正在读一本关于机器学习的书。

NaiveBayesClassifier在作者身上工作非常支持交叉验证方法。

他建议将数据分成十个桶(文件),并在每次保留一个不同的桶时对其中的九个进行训练。

到目前为止,我唯一熟悉的方法是将数据按 50%/50% 的比例拆分为训练集和测试集,然后简单地一次性训练分类器。

有人可以解释使用交叉验证的可能优势吗?

statistics classification cross-validation naivebayes

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