相关疑难解决方法(0)

Swift 集合包含复杂性

集合有 contains 函数,如果集合中存在成员,则返回 true;否则为假。

其复杂度为O(1)。

我想知道它的复杂度如何是恒定的 O(1) 即它不依赖于大小

以下是文档:https://developer.apple.com/documentation/swift/set/1540013-contains

time-complexity data-structures swift

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

拆分字符串没有string.Split

我正在做一个家庭工作问题,不使用框架方法拆分字符串.

以下是我提出的工作代码.

我想知道如何改善O(n)的运行时间?

此外,欢迎任何改进建议.

public static string[] split(string txt, char[] delim)
{
    char[] text = txt.ToCharArray();
    string[] result = new string[0];
    int count = 0;
    int i = 0;
    StringBuilder buff = new StringBuilder(); 
    while(i < text.Length)
    {
        bool found = false;
        foreach(char del in delim)
        {
            if(del == txt[i])
            {
                found = true;
                break;
            }
        }
        if(found)
        {
            count++;
            Array.Resize(ref result, count);
            result[count - 1] = buff.ToString();
            buff = new StringBuilder();                 
        }
        else
        {
            buff.Append(txt[i]);
        }

        i++;
    }

    if(buff.Length …
Run Code Online (Sandbox Code Playgroud)

c# string

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

散列如何对 python 集工作

我完全熟悉哈希表和哈希的工作原理,但我试图完全理解O(1)是如何完全来自的。

set1 = {'s','t'}
print('x' in set1)
print('s' in set1)
set2 = {'s'}
print('s' in set2)
Run Code Online (Sandbox Code Playgroud)

我被告知要检查是否's'在 set1 中,if 将检查 的哈希值的内存分配's',并检查它是否在O(1)中的 set1 中并返回布尔值。因此两个 O(1) 操作,但我的问题是:散列实际上如何深入工作。我的意思是,当您 hash 时's',该散列是否有类似的东西set1set2并且您正在检查是否set1set1set2,或者每个集合是否具有不同的散列's'并且您正在检查's'每个不同集合的散列。

python complexity-theory set

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

带有字符串键的 HashMap 真的比 Trie 具有更低的时间复杂度吗?

假设我想存储一个字符串字典,我想知道某个字符串是否存在。我可以使用Trie或 HashMap。HashMap 的时间复杂度为 O(1),概率很高,而在这种情况下,Trie 的时间复杂度为 O(k),其中 k 是字符串的长度。

现在我的问题是:计算字符串的哈希值是否具有 O(k) 的时间复杂度,从而使 HashMap 的复杂度相同?如果不是,为什么?

我的看法是,这里的 Trie 比查找字符串的 HashMap 具有更低的时间复杂度,因为 HashMap - 除了计算哈希值 - 可能会发生冲突。我错过了什么吗?

更新:在构建字典时,您会使用哪种数据结构来优化速度?

algorithm data-structures

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

为什么在评估散列函数时散列查找的成本可能比这花费更多时间?

HashMap(或)HashTable 是键控数组的一个示例。这里,索引是用户定义的键而不是通常的索引号。例如,arr["first"]=99是一个哈希映射的示例,其中 b 键为第一个,值为 99。

由于使用了键,因此需要哈希函数将键转换为索引元素,然后在数组中插入/搜索数据。此过程假设不存在冲突

现在,给定一个要在数组中搜索的键,如果存在,则必须获取数据。因此,每次搜索之前,都必须将键转换为数组的索引号。那么如何花费 O(1) 时间呢?因为,时间复杂度也取决于哈希函数。所以时间复杂度一定是O(哈希函数的时间)。

hash big-o hashtable time-complexity

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

std :: unordered_map如何处理冲突?

std::unordered_map 保证O(1)时间搜索,但它如何管理碰撞?

Cppreference声称

无序映射是一个关联容器,包含具有唯一键的键值对.元素的搜索,插入和删除具有平均的恒定时间复杂度.

假设所有哈希码都相同的情况,内部如何处理冲突?

如果哈希码对每个键都是唯一的,那么我的假设将完全错误.在这种情况下,如何在没有冲突的情况下创建唯一的哈希码?

std::unordered_map哈希函数采用什么方法来保证O(1)搜索?

c++ unordered-map hashmap c++11

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

为什么HashMap的运算复杂度没有考虑hash函数的复杂度?

对于HashMap<String, String> map每次键-值对被插入到散列计算地图-

java.lang.String#hashCode

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}
Run Code Online (Sandbox Code Playgroud)

由于不言自明,put 操作的复杂性基本上就是哈希计算的复杂性。

那么,为 put/get 操作定义 hashmap 最坏情况时间复杂度的适当方法应该是什么?

如果您从哈希冲突的角度有同样的问题,在这里您可以找到答案: Java 哈希映射真的是 O(1) 吗?

java hashmap

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

更有效的“删除重复项”功能

我管理的Google表格列表有时超过10,000行。对于行数最多为5,000的工作表,下面提到的删除重复项功能可以正常工作。但是对于超过5,000的任何内容,我都会收到“超出最大执行时间”错误。我希望能获得一些有关如何提高代码效率的说明,即使对于具有10k +行的工作表也可以平稳运行。

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = new Array();
  for(i in data){
    var row = data[i];
    var duplicate = false;
    for(j in newData){
      if(row.join() == newData[j].join()){
        duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
Run Code Online (Sandbox Code Playgroud)

javascript google-sheets google-apps-script

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

是在哈希表O(1)中查找?

如果散列表包含N个不同的项,并且没有重载,则N个项的散列必须具有大约lg(N)位,否则太多项将获得相同的散列值.

但是哈希表查找通常被认为平均花费O(1)时间.

在O(1)时间内不可能生成lg(N)位,因此散列表复杂性的标准结果是错误的.

我的推理有什么问题?

complexity-theory

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