Время выполнения и место для кода 1202: Наименьшая строка со свопом

#algorithm #time-complexity #complexity-theory #space-complexity

Вопрос:

У меня возникли проблемы с пониманием времени выполнения следующего решения для кода 1202.

 class Solution {
public String smallestStringWithSwaps(String s, List<List<Integer>> pairs) {
    
    Map<Integer, List<Integer>> g = new HashMap<>();
    // O(V E)
    for(List<Integer> pair : pairs) {
        if(!g.containsKey(pair.get(0))) {
            g.put(pair.get(0), new ArrayList<>());
        }
        if(!g.containsKey(pair.get(1))) {
            g.put(pair.get(1), new ArrayList<>());
        }
        g.get(pair.get(0)).add(pair.get(1));
        g.get(pair.get(1)).add(pair.get(0));
    }
    
    char[] c = s.toCharArray();
    
    Set<Integer> seen = new HashSet<>();
    
    // O(V E * (VlogV))
    for(int i = 0; i < c.length; i  ) {
        if(seen.contains(i)) continue;
        List<Integer> index = new ArrayList<>();
        List<Character> temp = new ArrayList<>();
        dfs(i, g, seen, s, index, temp);
        Collections.sort(temp);
        Collections.sort(index);
        for(int j = 0; j < temp.size(); j  ) {
            c[index.get(j)] = temp.get(j);
        }
    }
    return new String(c);
    
}


private void dfs(int curr_node, Map<Integer, List<Integer>> g, Set<Integer> seen, 
                 String s, List<Integer> index, List<Character> temp) {
    
    if(seen.contains(curr_node)) return;
    index.add(curr_node);
    seen.add(curr_node);
    temp.add(s.charAt(curr_node));
    if(g.containsKey(curr_node)) {
        for (int i = 0; i < g.get(curr_node).size(); i  ) {
            dfs(g.get(curr_node).get(i), g, seen, s, index, temp);
        }   
    }
}
 

}

Пространство, которое я думаю, равно O(V E), где V-число отступов в строке, а E-число пар, когда мы строим наш график или dfs в каждом связном компоненте. Однако для среды выполнения я немного сбит с толку, поскольку построение графика в хэш-карте выполняется во время выполнения O(V E), им можно пренебречь из-за асимметричного поведения, поскольку оно меньше, чем время выполнения для приведенной ниже части кода для цикла. Я думаю, что время выполнения равно O(VlogV K * (V E)), где K-количество подключенных компонентов. VlogV-это время выполнения сортировки всех букв в строке, где V E-время выполнения DFS, так как мы выполняем DFS для всех подключенных компонентов, собираем индексы и символы и в конечном итоге сортируем все строки в подключенном компоненте и будем менять индексы строк ответов на основе нашего результата для каждого подключенного компонента. Что вы, ребята, думаете?