小编Mee*_*ary的帖子

了解Dijkstra算法的时间复杂度计算

根据我的理解,我使用下面给出的邻接表将Dijkstra算法的时间复杂度计算为big-O表示法.它没有像它应该的那样出来,这让我逐步理解它.

  1. 每个顶点可以连接到(V-1)个顶点,因此每个顶点的相邻边的数量是V-1.让我们说E代表连接到每个顶点的V-1边.
  2. 在最小堆中查找和更新每个相邻顶点的权重是O(log(V))+ O(1)或O(log(V)).
  3. 因此,从上面的步骤1和步骤2,更新顶点的所有相邻顶点的时间复杂度是E*(logV).或E*logV.
  4. 因此,所有V顶点的时间复杂度是V*(E*logV),即O(VElogV).

但是Dijkstra算法的时间复杂度是O(ElogV).为什么?

algorithm big-o graph dijkstra time-complexity

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

广度优先搜索时间复杂度分析

例如,遍历顶点的每个相邻边的时间复杂度O(N),其中N是相邻边的数量.因此,对于V个顶点,时间复杂度变为O(V*N)= O(E),其中E是图中边的总数.由于从队列中删除和添加顶点是O(1),为什么它被添加到BFS的总体时间复杂度中O(V+E).

algorithm graph breadth-first-search time-complexity

35
推荐指数
4
解决办法
5万
查看次数

错误:在为Spring Controller执行@WebMvcTest时无法找到@SpringBootConfiguration

我正在测试下面给出的控制器

@Controller
public class MasterController {

@GetMapping("/")
public String goLoginPage(){
    return "index";
}
}
Run Code Online (Sandbox Code Playgroud)

我下面这个春天文件来测试我的控制器.现在,我想通过实例化Web层而不是文档中给出的整个Spring上下文来测试我的控制器.下面是我的相同代码.

@RunWith(SpringRunner.class)
@WebMvcTest
public class MasterControllerTestWithWebLayer {

@Autowired
MockMvc mockMvc;

@Autowired
MasterController masterController;


@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

@Test
public void testLoginHome() throws Exception{
    mockMvc.perform(get("/"))
    .andExpect(status().isOk())
    .andExpect(view().name("index"));
}

}
Run Code Online (Sandbox Code Playgroud)

当我运行此测试时,我收到错误Unable to find @SpringBootConfiguration,...etc.但我很困惑为什么当我们不希望它实例化它但只想使用Web层时它要求Spring配置.请指出正确的方向,这里发生了什么.以及如何解决这个问题.谢谢

java spring-mvc spring-test spring-boot

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

界面可以随时间演变吗?

从灵活性的角度来看,接口非常棒.但万一,大量客户端使用接口.在保持旧的mehtod完整性的同时向接口添加新方法将破坏所有客户端的代码,因为客户端中不会出现新方法.如下所示:

public interface CustomInterface {

    public void method1();

}

public class CustomImplementation implements CustomInterface {

    @Override
    public void method1() {
        System.out.println("This is method1");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在某个时间点,我们在此接口中添加另一个方法,所有客户端的代码都会中断.

public interface CustomInterface {

    public void method1();

    public void method2();

}
Run Code Online (Sandbox Code Playgroud)

为避免这种情况,我们必须在所有客户端代码中明确实现新方法.

所以我认为接口和这个场景如下:

  1. 曾经写过的界面就像雕刻在石头上.他们很少被认为,并且有望改变.如果他们这样做,他们会花费巨大的成本(重写整个代码),程序员应该为此做好准备.
  2. 继续上述观点,是否有可能编写经得起时间考验的接口?
  3. 如何在未来期望其他功能的接口中处理这种情况?这预示着所有客户都被绑定的合同变更.

编辑:Default方法确实是Java接口的一个很好的补充,很多人在他们的答案中提到过.但我的问题更多的是在代码设计的背景下.如何在客户端上强制实现方法是接口的固有特性.但是,接口和客户端之间的这种合同似乎很脆弱,因为功能最终会发展.

java interface

24
推荐指数
4
解决办法
1413
查看次数

LinkedList与ArrayList在维护有序列表时的性能

我想维持一个List<Integer>大小<= 10 ^ 6 的有序.每次添加一个新元素时,我都会调用Collections.sort()方法对列表中的新元素进行排序.据我所知,ArrayList表现要好于LinkedList.但是由于我会sort()经常调用方法,所以我已经明白,linkedList在对列表进行排序时会表现得更好并且将是更好的选择ArrayList,因为没有像ArrayList(array作为底层数据结构使用)的情况那样移动元素.任何更有效的建议.

java sorting linked-list arraylist

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

直觉与设计原则

我有这样的类层次结构Beverage -> Coffee-> Latte.哪里Beverageabstract超被延长Coffee.Coffee然后类增加了一些行为,但也是abstract.Latte扩展Coffee类,是一个具体的类.我已经使用继承来添加行为.并且继承确实有缺点,如超类方法的可见性,使代码易碎,代码紧密耦合.因此,编程原则Composition应该优先考虑Inheritance.但在这种情况下inheritance感觉如此自然Latte,Coffee并且Coffee是一种类型的Beverage使用composition添加行为感觉错误,尽管它的好处.所以这里的问题是 应该直觉覆盖设计原则吗?

饮料:

public abstract class Beverage {

    private final String name;
    private final double price;

    Beverage(String name, double price){
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }
    public double getPrice() {
        return price;
    }

    public abstract void …
Run Code Online (Sandbox Code Playgroud)

java inheritance design-patterns composition

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

在Map中查找最小值的有效方法

我试图找到key最小值,Map如下所示.

 Map<Node, Integer> freeMap = new TreeMap<>();
 Node minNode = null;
        for (Map.Entry<Node, Integer> entry : freeMap.entrySet()) {
            if (minNode == null) {
                minNode = entry.getKey();
            } else {
                if (entry.getValue() < freeMap.get(minNode)) {
                    minNode = entry.getKey();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

首先,是否有一种直接的方法来找到key最小的value比使用foreach循环.其次,你能否提出一些可用于存储Node对象和相关Integer值的备用数据结构方法,因此我可以entry在恒定时间O(1)中以最小值获取.

java map min

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

@Value("${local.server.port}") 在 Spring Boot 1.5 中不起作用

我正在将 Spring Boot 从 1.3 升级到 1.5。为了升级到 1.5 我已经更换了

@SpringApplicationConfiguration(classes = TestConfig.class) @WebIntegrationTest

@SpringBootTest(classes = TestConfig.class)

另外,我正在使用

@Value("${local.server.port}") protected int port;

获取application.properties文件中定义的端口号。我进一步使用这个端口号来构建一个 REST URL。

但是升级后我收到以下错误,而1.3Spring Boot Test也可以正常工作。

引起:java.lang.IllegalArgumentException:无法在 org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) 处解析值“${local.server.port}”中的占位符“local.server.port”

我是否错过了为此工作所需的任何更改。

java spring spring-boot spring-boot-test

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

Travis CI SonarCloud 错误“从未分析过项目。在分支分析之前需要定期分析”

嗨,我正在使用 Travis CI 为Maven应用程序自动化 SonarCloud 上的代码覆盖率。

现在,在sonar:sonar本地运行该命令会在 SoundCloud 上提交报告,我可以使用 Branch 看到它,如下所示master

在此处输入图片说明

现在我还配置了.travis.yml文件以在每次构建时自动将报告推送到SoundCloud,如下所示

在此处输入图片说明

但是当构建由 Travis CI 触发时,它会失败并出现以下错误

[INFO] Load project branches
[INFO] Load project branches (done) | time=114ms
[INFO] Load project pull requests
[INFO] Load project pull requests (done) | time=116ms
[INFO] Load branch configuration
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 27.884 s
[INFO] Finished at: 2019-05-19T16:47:23Z
[INFO] Final Memory: 93M/496M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal …
Run Code Online (Sandbox Code Playgroud)

code-coverage maven travis-ci sonarqube sonarcloud

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

在java web应用程序中使用静态方法和变量

我的 Web 应用程序的标题中有一个搜索框,并使用自动完成功能来帮助用户按作者姓名或书名查找书籍。根据用户输入,函数通过oninput()调用 servlet 。servlet 调用类的静态方法,该方法返回与输入字符串匹配的书籍数组。FindBooksajaxFindBookssuggest()SuggestionBook

FindBooks.java

 JSONArray books = SuggestionBook.suggest(inputString);
 out.print(books);
Run Code Online (Sandbox Code Playgroud)

建议书.java

 private static boolean isTernaryEmpty = true;
 private static Ternary ternary;

 private static void fillTernary() {
  // fills ternary search tree with data.
  isTernaryEmpty = false;
 }

 public static JSONArray suggest(String searchString) {
  if(isTernaryEmpty) {
    fillTernary();
  }
  return ternary.find(searchString);
 } 
Run Code Online (Sandbox Code Playgroud)

我在类中使用了static方法SuggestionBook.java,以避免为应用程序的每个会话加载数据。因此它只会被加载一次,然后就可以被不同的会话共享。但由于静态方法只有一份副本,并且所有会话都使用相同的static方法来获取数据。当其他会话正在使用该方法时,他们是否必须等待,或者所有会话可以同时访问该方法?如果是,是否会影响应用程序的性能。如果否,JVM 如何管理单个副本的并发访问?最后,根据我的理解,只要类SuggestionBook没有被垃圾收集,数据就会保留在内存中。使用数据结构 as class variablesnot是正确的方法吗instance variables,因为它们会阻塞可用内存更长时间。

java static web-applications autocomplete

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