You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

O(n^2)的时间复杂度

使用优化算法减小时间复杂度

示例代码:

  1. Bubble Sort

void bubbleSort(int arr[], int n) { int i, j; for (i = 0; i < n-1; i++)

for (j = 0; j < n-i-1; j++)
    if (arr[j] > arr[j+1])
        swap(&arr[j], &arr[j+1]);

}

时间复杂度为O(n^2)

  1. Selection Sort

void selectionSort(int arr[], int n) { int i, j, min_idx;

for (i = 0; i < n-1; i++)
{
    min_idx = i;
    for (j = i+1; j < n; j++)
      if (arr[j] < arr[min_idx])
        min_idx = j;

    swap(&arr[min_idx], &arr[i]);
}

}

时间复杂度为O(n^2)

优化算法:

  1. Merge Sort

void merge(int arr[], int l, int m, int r) { int i, j, k; int n1 = m - l + 1; int n2 = r - m;

/* create temp arrays */
int L[n1], R[n2];

/* Copy data to temp arrays L[] and R[] */
for (i = 0; i < n1; i++)
    L[i] = arr[l + i];
for (j = 0; j < n2; j++)
    R[j] = arr[m + 1+ j];

/* Merge the temp arrays back into arr[l..r]*/
i = 0; // Initial index of first subarray
j = 0; // Initial index of second subarray
k = l; // Initial index of merged subarray
while (i < n1 && j < n2)
{
    if (L[i] <= R[j])
    {
        arr[k] = L[i];
        i++;
    }
    else
    {
        arr[k] = R[j];
        j++;
    }
    k++;
}

/* Copy the remaining elements of L[], if there
   are any */
while (i < n1)
{
    arr[k] = L[i];
    i++;
    k++;
}

/* Copy the remaining elements of R[], if there
   are any */
while (j < n2)
{
    arr[k] = R[j];
    j++;
    k++;
}

}

/* left is for left index and right is right index of the

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

万字长文带你漫游数据结构世界|社区征文

[](https://markdownpicture.oss-cn-qingdao.aliyuncs.com/blog/20220108120726.png)但是如此,还是没有彻底解决问题,因为链表很长的情况,只能通过前后两部分查找。不如回到原则:`空间和时间,我们选择时间,那就要舍弃一部分空间`,我们每个节点再加一个指针,现在有 2 层指针(注意:**节点只有一份,都是同一个节点,只是为了好看,弄了两份,实际上是同一个节点,有两个指针,比如 1 ,既指向2,也指向5**):![](https://markdownpicture...

基于 LoserTree 的 Paimon 多路归并优化

(https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/13fcdebcdb514ba989c98c9dfe247c6b~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1714666884&x-signature=y4qJWdnIBWICTfwb0%2BfS8iGm7gg%3D)3. **复杂度分析**假设待排序列数为 N,待排元素总个数为 n,则:1)空间复杂度为 O(N);2)整体排序完成的时间复杂度O(nlogN);3)单次调整的时间复杂度O(logN),由于需要和两个子节点都进行比较,...

基于 LoserTree 的 Paimon 多路归并优化

(https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/6697bf821cca423cb708391cf9450cb9~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1714666849&x-signature=OMC6%2Bj7W3%2F2SNCK%2FXYAbZ7VMZ0k%3D)3. **复杂度分析**假设待排序列数为 N,待排元素总个数为 n,则:1)空间复杂度为 O(N);2)整体排序完成的时间复杂度O(nlogN);3)单次调整的时间复杂度O(logN),由于需要和两个子节...

数据库顶会 VLDB 2023 论文解读:Krypton: 字节跳动实时服务分析 SQL 引擎设计

出现次数(Occurrence)表示子字段出现次数的前缀和,从而可以在获取重复数据的偏移量和长度时实现 O(1)的时间复杂度。因此,即使在嵌套和重复数据的情况下,我们仍然可以实现 O(m)的查找效率,其中 m 是 Schema Tree 的深度。有效性(Validity)用来区分这个 Field 是空还是 NULL。对于 NULL Field 我们不会存储任何的数据,对于存储稀疏数据提高了效率。相比 Dremel,我们的算法有两个优势:1. 稀疏字段具有更高的存储效率。2. 对于复...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

O(n^2)的时间复杂度 -优选内容

万字长文带你漫游数据结构世界|社区征文
[](https://markdownpicture.oss-cn-qingdao.aliyuncs.com/blog/20220108120726.png)但是如此,还是没有彻底解决问题,因为链表很长的情况,只能通过前后两部分查找。不如回到原则:`空间和时间,我们选择时间,那就要舍弃一部分空间`,我们每个节点再加一个指针,现在有 2 层指针(注意:**节点只有一份,都是同一个节点,只是为了好看,弄了两份,实际上是同一个节点,有两个指针,比如 1 ,既指向2,也指向5**):![](https://markdownpicture...
基于 LoserTree 的 Paimon 多路归并优化
(https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/13fcdebcdb514ba989c98c9dfe247c6b~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1714666884&x-signature=y4qJWdnIBWICTfwb0%2BfS8iGm7gg%3D)3. **复杂度分析**假设待排序列数为 N,待排元素总个数为 n,则:1)空间复杂度为 O(N);2)整体排序完成的时间复杂度O(nlogN);3)单次调整的时间复杂度O(logN),由于需要和两个子节点都进行比较,...
基于 LoserTree 的 Paimon 多路归并优化
(https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/6697bf821cca423cb708391cf9450cb9~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1714666849&x-signature=OMC6%2Bj7W3%2F2SNCK%2FXYAbZ7VMZ0k%3D)3. **复杂度分析**假设待排序列数为 N,待排元素总个数为 n,则:1)空间复杂度为 O(N);2)整体排序完成的时间复杂度O(nlogN);3)单次调整的时间复杂度O(logN),由于需要和两个子节...
数据库顶会 VLDB 2023 论文解读:Krypton: 字节跳动实时服务分析 SQL 引擎设计
出现次数(Occurrence)表示子字段出现次数的前缀和,从而可以在获取重复数据的偏移量和长度时实现 O(1)的时间复杂度。因此,即使在嵌套和重复数据的情况下,我们仍然可以实现 O(m)的查找效率,其中 m 是 Schema Tree 的深度。有效性(Validity)用来区分这个 Field 是空还是 NULL。对于 NULL Field 我们不会存储任何的数据,对于存储稀疏数据提高了效率。相比 Dremel,我们的算法有两个优势:1. 稀疏字段具有更高的存储效率。2. 对于复...

O(n^2)的时间复杂度 -相关内容

数据库顶会 VLDB 2023 论文解读 - Krypton: 字节跳动实时服务分析 SQL 引擎设

Krypton 与 Dremel 不同,Dremel 只会存储叶子结点,Krypton 则会把所有的字段按照 B-tree 的方式组织,并把所有字段的数据顺序存储且独立分开。在非叶子结点中,存储了孩子节点的出现次数(Occurrence)和有效性(Validity)的信息;在叶子结点中,存储了数据。出现次数(Occurrence)表示子字段出现次数的前缀和,从而可以在获取重复数据的偏移量和长度时实现 O(1)的时间复杂度。因此,即使在嵌套和重复数据的情况下,我们仍然可以实现 O(m)的...

eBPF 完美搭档:连接云原生网络的 Cilium

其控制面性能是`O(n²)`。在数据面,规则是用链表组织的,其性能是`O(n)`。1. LB 调度算法仅支持随机转发。## **Ipvs 模式**IPVS 是专门为 LB 设计的。它用 hash table 管理 service,对 service 的增删查找都是 O(1)的时间复杂度。不过 IPVS 内核模块没有 SNAT 功能,因此借用了 iptables 的 SNAT 功能。IPVS 针对报文做 DNAT 后,将连接信息保存在 nf_conntrack 中,iptables 据此接力做 SNAT。该模式是目前 Kubernetes 网络...

干货 | 基于ClickHouse的复杂查询实现与优化

并且其生成的Pipeline在一些case下并不能充分并行。因此在某些场景下,难以发挥集群的全部资源。随着企业业务复杂度的不断提升,复杂查询,特别是有多轮的分布式Join,且有很多agg的计算的需求会越来越强烈。在这种... 每一个Stage的Worker在调度前就已经确定了,调度过程中有一个Worker出现连接异常,则整个Query都会失败。另一类情况,Stage在上游数据还没有ready,就被调度起来了,则需要较长时间等数据。例如Final的agg Stage,要等Pa...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

以 100GB SSB 性能测试为例,通过 ByteHouse 云数仓开启你的数据分析之路

随着数据量级和复杂度的增大,数据分析处理的技术架构也在不断演进。在面对海量数据分析时,传统 OLAP 技术架构中的痛点变得越来越明显,如扩容缩容耗时长,导致资源利用率偏低,成本居高不下;以及运维配置复杂,需要专业... ByteHouse 的架构总览如下。![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/f07eddc2aa9b47289d7cd066f12c5497~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=17...

精选文章|iOS内存泄漏监控实践

可以实现稀疏矩阵遍历的最佳时间复杂度O(n+e)。 #### **内存对象的数据结构定义** ``` typedef struct EdgeNode //弧结点的定义 { int tailvex; //弧尾结点的下标 int headvex; //弧头结点的下标 struct EdgeNode *headlink; //指向弧头相同的下一条弧的链域 struct EdgeNode *taillink; //指向...

社区征文|ChatGPT教我如何面试

时间复杂度O(n log n),空间复杂度O(n)。注意:快速排序算法不是稳定排序算法,这意味着它不保证相同元素的相对顺序不变。如果需要保证相对顺序不变,可以使用归并排序等稳定排序算法。###### Q:IP合法性校验代码IP 地址合法性校验可以使用正则表达式来实现。比如,下面是一个基于 Python 的实现,它可以用来判断一个字符串是否为合法的 IP 地址:```import re​def is_valid_ip(ip): pattern = r"^(25[0-5]|2[0-4][0-9...

一口气看完43个关于 ElasticSearch 的使用建议

不建议使用 `bucket\_sort`进行聚合深分页查询。**ES 的高 Cardinality 聚合查询非常消耗内存,超过百万基数的聚合很容易导致节点内存不够用以至 OOM。`bucket\_sort`使用桶排序算法,性能问题主要是由于它需要在内存中缓存所有的文档和聚合桶,然后才能进行排序和分页,随着文档数量增多和分页深度增加,性能会逐渐变差,有深分页问题。因为桶排序需要对所有文档进行整体排序,所以它的时间复杂度O(NlogN),其中 N 是文档总数。...

SoCC 论文解读:字节跳动如何在大规模集群中进行统一资源调度

(github.com/kubewharf/godel-scheduler) 调度器会在调度第一个 Pod 后缓存候选节点,并在下一轮调度中优先从缓存中搜索可用的节点。除非集群状态发生变化(增加或删除节点)或者碰到不同资源诉求的 Pod,不需要每一轮都重新扫描集群中的节点。在调度的过程中没有资源可分配的节点会被移除缓存,并根据集群状态调整排序。这一优化可以明显优化节点筛选的过程,当调度同一个业务用户的一组 Pod 时,理想情况下可以把**时间复杂度O(n) ...

Go 生态下的字节跳动大规模微服务性能优化实践

PProf 是通过采样方式,在一秒钟内默认打 100 个点,如果踩到了一个点就相当于占了 1% 时间。字节跳动基础架构语言团队在内部的 Go 发行版增加了 FuncProf 的功能,开始执行时进行计时,停止执行时按下暂停,最后将数据合并。下图展示了数据的流向,我们需要从业务集群拉取业务数据,同时可能还需要和监控系统、运维系统进行交互。![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/efbaaecf2d434...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询