在我的算法与数据结构类第一divide-and-conquer algorithm,即merge sort进行了介绍.
在为分配实现算法时,我想到了一些问题.
使用除法和征服范式实现的算法是否具有O(nlogn)的时间复杂度?
是否该方法中的递归部分能够压缩以O(n ^ 2)到O(nlogn)运行的算法?
是什么让这种算法首先在O(nlogn)中运行.
对于(3)我假设这与递归树和可能的递归数量有关.有人可能会用一个简单的分而治之算法来运行,该算法在O(nlogn)中运行如何实际计算复杂度?
干杯,安德鲁
在令人惊讶的书"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)
从我现在所知,我的意思是在你们流行之前是:
到目前为止这是有意义的,它服务垃圾收集,因为这种方法不维护对实际对象的引用.
从内部类的角度来看,它也是可以理解的,任何方法都可以通过引用改变任何可访问的字段.
但我并不怀疑这样做的两个原因是什么才真正超越了这个问题.
必须满足什么条件才能使两个方法正确地成为重载方法?
是否两个方法的参数列表至少必须不同,例如
public void A() { //... }
public void A(int val) { //.. }
Run Code Online (Sandbox Code Playgroud)
因此,仅改变return类型和/或access修饰符就不会产生两个重载方法吗?
在我的算法和数据结构类中,我们给了一些递归关系来解决或者我们可以看到算法的复杂性.
起初,我认为这些关系的单纯目的是为了记下递归分而治之算法的复杂度.然后我在麻省理工学院的作业中遇到了一个问题,其中一个被要求为迭代算法提供递归关系.
考虑到一些代码,我怎么能真正想出一个递归关系呢?有什么必要的步骤?
我是否可以记下任何情况,即最坏的,最好的,具有这种关系的平均情况,这是否正确?
有可能有人给出一个代码如何变成递归关系的简单例子吗?
干杯,安德鲁
我正在与一位同学争论,因为他想说服我,有可能在不使用递归的情况下实现分而治之的算法.
这是真的吗?
我是第一次使用Java进行序列化.
我已经读过Java递归序列化对象.
假设我有一个Diet持有objects of type水果which holds objects like苹果,香蕉,菠萝的课程.
据我所知,一旦我序列化了Dietjava 类型的对象,就会以同样的方式存储其他对象.
但是:我打算(联合)序列化的所有课程都必须实现Serializable或只实现"顶级"(这里:) Diet?
我现在正在读一本关于机器学习的书。
NaiveBayesClassifier在作者身上工作非常支持交叉验证方法。
他建议将数据分成十个桶(文件),并在每次保留一个不同的桶时对其中的九个进行训练。
到目前为止,我唯一熟悉的方法是将数据按 50%/50% 的比例拆分为训练集和测试集,然后简单地一次性训练分类器。
有人可以解释使用交叉验证的可能优势吗?
algorithm ×3
java ×3
big-o ×1
naivebayes ×1
overloading ×1
performance ×1
recurrence ×1
reference ×1
statistics ×1