算法在计算中的作用

前言

算法在基因工程,互联网,电子商务和制造业中都有广泛的应用。最近的智能驾驶和人工智能也处处有着算法的影子。

数据结构

数据结构是数据元素存在的一种形式,有线性和非线性的区别。常见的线性的有链表,数组,栈和队列,非线性的有树,图等等。每一种数据结构在特定情况下有它的优势,也有这不一样的局限性。

数组:在内存中的物理存储需要连续性,不便于增加元素和删除元素。但是访问的时间复杂度却是很高效。

链表:在内存中的存储位置可以是离散的,虽然在访问元素方面不如数组,但是增加和删除元素的时候极为方便,尤其是问题规模越大的时候。

散列表:也成哈希表,个人理解是数组和链表的一种结合体。数据元素的数据通过哈希函数与数组元素的下标一一对应,这样有助于提高查询访问的效率。同时这些数组并不存储数据,只是存储数据的关键字,它们通过链表来存储数据元素,每一个数组元素是一个数据链表的表头结点,这样也便于增删操作。下图为数组,链表的时间复杂度。

问题规模为n

查询时间复杂度

增删时间复杂度

存储密度

数组

O(1)

O(n)

100%

链表

O(n)

O(1)

50%

技术

算法也可以看作是一门技术,可以帮助工程师通过分析,推理证明设计合理的方法,来解决问题。如最小生成树问题,统计中的中位数问题,旅行商问题等等都需要算法这门技术来解决。

难题

算法可能有多个解,因此有最优解的概念。同时有些问题无法很好的解决,这些问题成为NP问题,在没有准确的解的情况下,就衍生除了近似解的方法了。

算法比较

插入排序:

数据结构:单链表

代码:

void insert_sort(linklist list, elemtype data[10]) {
 
    lnode *p = list;
    
    for(int i = 0; i < 10; i++) {
        while (p->next)
        {
            lnode *q = p->next;
            if(q->data > data[i]) {
                lnode *node = (lnode *) malloc(sizeof(lnode));
                node->data = data[i];
                node->next = q;
                p->next = node;
                break;
            }
            p = p->next;
        }
        if(!p->next) {
        lnode *node = (lnode *) malloc(sizeof(lnode));
        node->data = data[i];
        node->next = NULL;
        p->next = node;
        }
        p = list;
    }
}

输出结果:

归并排序:

数据结构: 数组

代码:

void merge(int a1[MAXSIZE], int b1[MAXSIZE], int low, int mid, int high) {
    int i = low, j = mid+1, k = low;
    while (i <= mid && j<= high)
    {
        if(a1[i] < a1[j]) {
            b1[k++] = a1[i++];
        }else {b1[k++] = a1[j++];
        }
    } 
    while(i <= mid) b1[k++] = a1[i++];
    while(j <= high) b1[k++] = a1[j++];
}

void merge_sort(int a[MAXSIZE], int b[MAXSIZE], int low, int high) {

    if(low == high) {
        b[low] = a[low];
        return;
    }
    int mid = (low + high) / 2;
    int temp[MAXSIZE] = {0};
    merge_sort(a, temp, low, mid);
    merge_sort(a, temp, mid + 1, high);
    merge(temp, b, low, mid, high);
}

 输出结果:

插入排序与归并排序的比较:

时间复杂度

空间复杂度

插入排序

O(n*n)

O(n)

归并排序

O(nlgn)

O(n)

分析得出两种排序的时间复杂度不一样,n与lgn在n值越大的情况下,n越大于lgn。所以归并排序更适合规模大的排序,而插入排序适合规模小的排序。

1000ms内以下函数的最大规模n:(inf是无穷大的意思,e的1000次方超出了double的表示范围)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/647584.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Modal.method() 不显示头部的问题

ant-design中的Modal组件有两种用法&#xff1a; 第一种是用标签&#xff1a;<a-modal></a-modal> 第二种是用Api&#xff1a;Modal.info、Modal.warning、Modal.confirm...... 一开始项目中这两种用法是混用的&#xff0c;后面UI改造&#xff0c;需要统一样式&…

C++第十七弹---string使用(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、标准库中的string类 1.1、string类的常用接口说明 1.1.1、string类对象的修改操作 1.1.2、string类对象非成员函数重载 总结 1、标准库中的…

修改元组元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 场景模拟&#xff1a;伊米咖啡馆&#xff0c;由于麝香猫咖啡需求量较大&#xff0c;库存不足&#xff0c;店长想把它换成拿铁咖啡。 实例08 将麝香猫…

[笔试训练](三十三)097:跳台台阶扩展问题098:包含不超过两种字符的最长子串099:字符串的排列

目录 097:跳台台阶扩展问题 098:包含不超过两种字符的最长子串 099:字符串的排列 097:跳台台阶扩展问题 题目链接:跳台阶扩展问题_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 规律题: 1.跳上n级台阶的跳法等于前面1~(n-1)级台阶跳法的总和1。 2.跳…

WWW 2024最佳论文|大型语言模型的机制设计

【摘要】我们研究拍卖机制以支持人工智能生成内容的新兴格式。我们特别研究如何以激励兼容的方式聚合多个法学硕士。在这个问题中&#xff0c;每个代理对随机生成的内容的偏好被描述/编码为 LLM。一个关键动机是为人工智能生成的广告创意设计一种拍卖格式&#xff0c;以结合不同…

GEC210编译环境搭建

一、下载编译工具链 下载&#xff1a;点击跳转 二、解压到 /usr/local/arm 目录 sudo mv gec210.zip /usr/local/arm cd /usr/local/arm sudo unzip gec210.zip 三、添加到环境变量 PATH/usr/local/arm/arm-cortex_a8-linux-gnueabi-4.7.3/bin:$PATH 四、测试验证 在终端…

网络原理-以太网协议和DNS协议

一、以太网协议 以太网协议会涉及到数据链路层和物理层。 如图&#xff1a; 这里面的目的地址和源地址指的并不是IP地址,而是MAC地址(物理地址)。长度为6个字节。即最多能表示2^48 个地址,也是非常大的,足够给全球每个设备都分配一个地址,因此在网卡出厂的时候都会带有一个唯…

Mysql之主从同步

1.BinLog同步机制 Mysql要去保证高可用&#xff0c;或者去分担请求压力&#xff0c;一般会去主从部署&#xff0c;读写分离。写库只负责写&#xff0c;而读库更多的去承担读的请求&#xff0c;从库不写数据&#xff0c;数据从主库同步&#xff0c;那么到底是怎么同步的呢&…

ant design pro 6.0列表渲实践demo

ant design pro 用户列表渲实践 用户页面&#xff1a; src\pages\Admin\User\index.tsx import { PlusOutlined } from ant-design/icons; import type { ActionType, ProColumns, ProDescriptionsItemProps } from ant-design/pro-components; import {PageContainer,ProDe…

Pycharm2024搭建QT6开发环境

创建pyqt6虚拟环境 首先&#xff0c;创建一个qt6的虚拟环境&#xff1a; conda create --name pyqt6 python3.11.7激活环境&#xff1a; conda activate pyqt6安装pyqt6 安装pyqt6&#xff1a; pip install pyqt6创建代码目录 创建目录&#xff1a; 使用pycharm打开这个…

springboot + Vue前后端项目(第十一记)

项目实战第十一记 1.写在前面2. 文件上传和下载后端2.1 数据库编写2.2 工具类CodeGenerator生成代码2.2.1 FileController2.2.2 application.yml2.2.3 拦截器InterceptorConfig 放行 3 文件上传和下载前端3.1 File.vue页面编写3.2 路由配置3.3 Aside.vue 最终效果图总结写在最后…

分享活动规划

前两天去参加菁英学院的一些辅导&#xff0c;是关于苏州久富农业机械的发展&#xff0c;看了他们企业的故事&#xff0c;我觉得我们农机很有前景和发展空间&#xff0c;我希望重新经过一次分享活动来分享我的感触&#xff0c;希望能够再次把我学到的内容传输到其他班的同学们 请…

主干网络篇 | YOLOv8更换主干网络之MobileNeXt | 新一代移动端模型MobileNeXt来了!

前言:Hello大家好,我是小哥谈。MobileNeXt是由微软研究院提出的一种高效的卷积神经网络结构,它在保持模型轻量级的同时,能够获得较高的性能。MobileNeXt采用了一种称为Inverted Residuals with Linear Bottlenecks(IRL)的结构,通过深度可分离卷积和快捷连接来减少模型的…

洗地机十大品牌排名:2024十大值得入手的洗地机盘点

随着生活水平的提高&#xff0c;智能清洁家电已经成为日常生活中的必需品。洗地机之所以在家庭清洁中大受欢迎&#xff0c;主要是因为它的多功能特性。传统的清洁方式通常需要扫帚、拖把和吸尘器分别进行操作&#xff0c;而洗地机将这些功能集成在一个设备中&#xff0c;使清洁…

谷歌Google广告投放优势和注意事项!

谷歌Google作为全球最大的搜索引擎&#xff0c;谷歌不仅拥有庞大的用户基础&#xff0c;还提供了高度精准的广告投放平台&#xff0c;让广告主能够高效触达目标受众&#xff0c;实现品牌曝光、流量增长乃至销售转化的多重目标&#xff0c;云衔科技以专业服务助力您谷歌Google广…

【mysql】in和exists的区别,not in、not exists、left join的相互转换

【mysql】in和exists的区别&#xff0c;not in、not exists、left join的相互转换 【一】in介绍【1】in中数据量的限制【2】null值不参与in或not in&#xff0c;也就是说in and not in 并不是全量值&#xff0c;排除了null值【3】in的执行逻辑 【二】exists介绍【1】exists no…

-bash: locate: 未找到命令(解决办法)

-bash: locate: 未找到命令的解决办法 一、解决办法二、什么是locate三 、locate命令的具体用法 一、解决办法 CentOS7默认没有安装locate命令&#xff0c;安装方式如下&#xff1a; 执行以下命令进行安装&#xff1a; yum install mlocate用 updatedb 指令创建 或更新locate …

Value-Based Reinforcement Learning(2)

Temporal Difference &#xff08;TD&#xff09; Learning 上节已经提到了如果我们有DQN&#xff0c;那么agent就知道每一步动作如何做了&#xff0c;那么DQN如何训练那&#xff1f;这里面使用TD算法。 简略分析&#xff1a; 是的估计 是的估计 所以&#xff1a; Deep Re…

【论文阅读】Prompt Fuzzing for Fuzz Driver Generation

文章目录 摘要一、介绍二、设计2.1、总览2.2、指导程序生成2.3、错误程序净化2.3.1、执行过程净化2.3.2、模糊净化2.3.3、覆盖净化 2.4、覆盖引导的突变2.4.1、功率调度2.4.2、变异策略 2.5、约束Fuzzer融合2.5.1、论据约束推理2.5.1、模糊驱动融合 三、评估3.1、与Hopper和OSS…

【真实项目中收获的提升】- 使用MybatisPlus框架 save一条字段中有主键id并且和以前重复会报错吗

问题描述&#xff1a; save一条数据中有主键id并且和以前重复会报错吗&#xff1f; 实际场景&#xff1a; 复制一条数据&#xff0c;修改其中一个字段&#xff0c;想让主键自增直接插入进数据库。 解决方案&#xff1a; 会报错&#xff0c; 直接把插入对象的主键id置为空…