0122 绪论

news2024/9/28 21:20:55

目录

1.绪论

1.1数据结构的基本概念

1.1部分习题

1.2算法和算法评价

1.2部分习题


1.绪论

1.1数据结构的基本概念

数据:信息的载体

数据元素:数据的基本单位,由若干数据项组成

数据项:构成数据元素的不可分割的最小单位

数据对象:具有相同性质的数据元素的集合,是数据的一个子集

数据类型:一个值的集合和定义在此集合上的一组操作的总称,原子类型、结构类型、抽象数据类型

数据结构:相互之间存在一种或多种特定关系的数据元素的集合,包括逻辑结构、存储结构、数据的运算

逻辑结构:集合、线性结构、树形结构、图状(网状)结构,可分为线性结构(线性表)和非线性结构(集合、树、图)

存储结构(物理结构):顺序存储、链式存储、索引存储和散列存储

数据的运算:施加在数据上的运算包括运算的定义和实现,运算定义针对逻辑结构,运算实现针对存储结构


1.1部分习题

1.可以用()定义一个完整的数据结构?

A 数据元素        B数据对象        C数据关系        D抽象数据类型

2.以下属于逻辑结构的是()

A顺序表        B哈希表        C有序表        D单链表

3.以下与数据存储结构无关的术语是()

A循环队列        B链表        C哈希表        D栈

4.链式存储设计时,结点内的存储单元地址()

A一定连续        B一定不连续        C不一定连续        D部分连续,部分不连续

5.对于两种不同的数据结构,逻辑结构或物理结构一定不相同吗?

6.举例说明对相同的逻辑结构,同一种运算在不同存储方式下实现时,其运算效率不同

1.D

抽象数据类型描述了数据的逻辑结构和抽象运算,通常用(数据对象,数据关系,基本操作集)这样的三元组来表示,从而构成一个完整的数据结构定义

2.C

顺序表、哈希表、单链表时三种不同的数据结构,既描述逻辑结构,又描述存储结构和数据运算。而有序表指关键字有序的线性表,仅描述元素之间的逻辑关系,既可以是链式存储,也可以是顺序存储

3.D

数据的存储结构:顺序存储,链式存储,索引存储和散列存储,循环队列是用顺序表表示的队列,是一种数据结构,栈是抽象数据类型,可采用顺序存储和链式存储,只表示逻辑结构

4.A

链式存储设计,各个结点的存储空间可以不连续,但结点内的存储单元地址必须连续

5.

对于两种不同的数据结构,它们的逻辑结构和物理结构完全有可能相同。

如二叉树和二叉排序树,二叉排序树可采用二叉树的逻辑表示和存储方式,但它们的运算定义不同,以查找结点为例,二叉树的时间复杂度为O(n),二叉排序树的时间复杂度为O(log_{2}n

6.

线性表既可以用顺序存储实现,又可用链式存储实现,在顺序存储下,插入和删除元素的时间复杂度为O(n),而在链式存储下,时间复杂度为O(1)


1.2算法和算法评价

算法:对特定问题求解步骤的一种描述,是指令的有限序列,有五个重要特性(有穷性、确定性、可行性、输入、输出)

“好”算法的目标:正确性、可读性、健壮性、高效率与低存储量需求

效率的度量:时间复杂度和空间复杂度

时间复杂度:一个语句的频度是指该语句在算法中被执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中基本运算(深层循环内的语句)的频度与T(n)同数量级,因此通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度。记为:T(n)=O(f(n)),其中O含义为T(n)数量级。

算法的时间复杂度不仅依赖于问题规模n,也取决于待输入数据的性质,一般总是考虑最坏情况下的时间复杂度。

加法规则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))

乘法规则:T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))

常见时间复杂度:常对幂指阶

O(1)<O(log_{2}n)<O(n)<O(nlog_{2}n)<O(n^{2})<O(n^{3})<O(2^{n})<O(n!)<O(n^{n})

空间复杂度:该算法所耗费的存储空间,是问题规模n的函数,记为S(n)=O(g(n))

算法原地工作:指算法所需的辅助空间为常量


1.2部分习题

1.以下算法的时间复杂度为()

void fun(int n){
    int i=1;
    while(i<=n)
        i=i*2;
}

2.以下算法的时间复杂度为()

void fun(int n){
    int i=0;
    while(i*i*i<=n)
        i++;
}

3.程序段如下,n为正整数,最后一行语句的频度在最坏情况下是()

for(i=n-1;i>1;i--)
    for(j=1;j<i;j++)
        if(A[j]>A[j+1])
            A[j]与A[j+1]对换

4.以下算法中最后一句的执行次数为()

int m=0,i,j;
for(i=1;i<=n;i++)
    for(j=1;j<=2*i;j++)
        m++;

5.设n是描述问题规模的非负整数,下面程序段的时间复杂度是()

x=2;
while(x<n/2)
x=2*x

6.求整数n(n>=0)的阶乘算法如下,其时间复杂度是()

int fact(int n){
    if(n<=1)    return 1
    return    n*fact(n-1);
}

7.已知两长度分别为m和n的升序链表,若将它们合并为长度m+n的一个降序链表,最坏情况下时间复杂度是()

8.下列程序段的时间复杂度是()

count=0;
for(k=1;k<=n;k*=2)
    for(j=1;j<=n;j++)
        count++;

9.下列函数的时间复杂度是()

int func(int n){
    int i=0,sum=0;
    while(sum<0)  sum += ++i;
    return i;
}

10.下列程序段的时间复杂度是()

x=0;
while(n>=(x+1)*(x+1))
x=x+1;

11.下列程序段的时间复杂度是()

int sum=0;
for(int i=1;i<n;i*=2)
    for(int j=0;j<i;j++)
        sum++;

12.一个算法所需时间由下述递归方程表示,试求出该算法的时间复杂度的级别(阶)

当n=1,T(n)=1
当n>1,T(n)=2T(n/2)+n

n是问题的规模,设n是2的整数次幂

1.O(log_{2}n)

基本运算i=i*2,设执行次数为t,2^{t}<=n,即t<=log_{2}n

2.O(\sqrt[3]{n})

基本运算i++,设执行次数为t,有t*t*t<=n,即t<=\sqrt[3]{n}

3.O(n^{2})

当所有相邻元素为逆序时,最后一行语句每次执行,此时\sum_{i=2}^{n-1}\sum_{j=1}^{i-1}1=\sum_{i=2}^{n-1}i-1=(n-2)(n-1)/2=O(n^{2})

4.n(n+1)

m++执行次数为

\sum_{i=1}^{n}\sum_{j=1}^{2i}1=\sum_{i=1}^{n}2i=2\sum_{i=1}^{n}i=n(n+1)

5.O(log_{2}n)

基本运算为x=2*x,设执行次数为t,有2^{t+1}<n/2,即t<log_{2}(n/2)-1=log_{2}n-2

6.O(n)

每次递归调用fact()的参数减一,递归出口为fact(1),一共执行n此递归调用fact()

7.O(max(m,n))

两个升序链表,两两比较,当一个链表比较完后,另一个链表的剩余元素插入即可。最坏情况是两个链表中的元素依次进行比较,2max(m,n)>=m+n

8.O(nlog_{2}n

内层循环条件j<=n与外层循环变量无关,各自独立,每执行一次j自增1,每次内层循环都执行n次,外层循环条件k<=n,增量定义为k*=2,可知循环次数t满足k=2^{t}<=n,即t<=log_{2}n,所以,内存循环时间复杂度为O(n),外层循环为O(log_{2}n),根据乘法规则,得出O(nlog_{2}n

9.O(\sqrt{n}

基本运算sum+=++i,等价于++i;sum=sum+i,每执行一次i自增1.i=1时,sum=0+1;i=2时,sum=0+1+2;以此类推,sum=0+1+2+3+....+i=(1+i)*i/2,循环次数t满足(1+t)*t/2<n,得出O(\sqrt{n}

10.O(\sqrt{n}

设循环k次,第k次执行时,(x+1)^{2}>n,x=k-1,即k^{2}>n

11.O(n)

当外层循环变量i取不同值时,内层循环就执行多少次。设外层循环执行k次,当i=1,2,4,8..2^{k-1}(2^{k-1}<n<2^{k}).时,内层循环执行i次,总循环次数=1+2+4+8+...+2^{k-1}=2^{k}-1,即n<T<2n

12.

时间复杂度为O(nlog_{2}n

n=2^{k}(k>=0)

T(2^{k})=2T(2^{k-1})+2^{k}=2^{2}T(2^{k-2})+2*2^{k}

一般递推公式T(2^{k})=2^{i}T(2^{k-i})+i*2^{k}

T(2^{k})=2^{k}T(2^{0})+k*2^{k}=(k+1)2^{k}

T(n)=2^{log_{2}n}+log_{2}n*n=n(log_{2}n+1)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode-060-排列序列

题目及测试 package pid060; /* 60. 排列序列 给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a;"123" "132" "213" "23…

银行数字化转型导师坚鹏:银行数字化营销面临的5大痛点

银行数字化营销在助力银行业实现转型与发展的同时&#xff0c;也面临一些痛点问题。以下是银行数字化营销必须解决的五大痛点&#xff1a; 1) 数据质量和完整性&#xff1a;银行在数字化营销中需要利用大数据技术&#xff0c;但数据质量和完整性仍然是一个关键问题。银行需要确…

最强的″矛″ 验关键的″盾″|赛宁数字孪生靶场验证湖南工业互联网安全

​​为深入推动“智赋万企”数字安全屏障工程&#xff0c;由工业和信息化部网络安全管理局指导&#xff0c;湖南省工信厅和湖南省通管局主办的“铸网—2023”湖南省工业互联网企业网络安全实战攻防演练&#xff0c;于近日圆满收官。赛宁网安以数字孪生靶场为基础&#xff0c;构…

SpringMVC (八) 拦截器+文件上传下载

学习回顾&#xff1a;SpringMVC &#xff08;七&#xff09; Ajax研究 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。 过滤器与拦截器的区别&#xff1a;拦截器是AOP思想的…

实现窗户特效的Unity Shader解析

本文将详细介绍一种使用Unity Shader实现窗户特效的方法。通过分析代码&#xff0c;我们将解释每个关键部分的作用&#xff0c;以及如何将其组合在一起以实现逼真的窗户效果。希望本文能为Shader编程初学者和Unity开发者提供一些有用的指导。 引言&#xff1a; 在游戏和虚拟现实…

taro 小程序自定义地图选点功能

效果&#xff1a; 1、添加中心点 icon, 保证icon 处于地图中间 .map-box {width: 100vw;height: 36vh;position: relative;// 中心icon.center-icon-box {position: absolute;top: calc(50% - 30rpx); // 保证icon 处于地图中心点left: 50%;transform: translate(-50%, -50%)…

JavaScript内存管理和闭包

1 JavaScript内存管理 2 垃圾回收机制算法 3 闭包的概念理解 4 闭包的形成过程 5 闭包的内存泄漏 一个函数只有调用了外部的变量&#xff0c;才算是闭包。函数内和函数外会写成闭包。 深入JS闭包-闭包的访问过程 <!DOCTYPE html> <html lang"en"> &l…

Jenkins用户权限设置和运行节点配置实战

这里写目录标题 一、Jenkins用户权限设置实战1、用户权限配置2、用户权限分配 二、Jenkins运行节点配置实战1、增加运行节点的好处2、实战B-1:添加Jenkins运行节点实战1、相关字段说明&#xff1a;2、SSH连接方式 实战B-2:配置不同类型的节点-Python 节点实战B-3:配置不同类型的…

STM32F4 读/写 EEPROM【EEPROM、串口显示】

将姓名&#xff08;拼音&#xff09;学号写入EEPROM并在启动时通过串口显示 本篇博客将介绍如何使用STM32F4开发板将姓名&#xff08;拼音&#xff09;学号写入EEPROM&#xff0c;并在启动时通过串口显示。我们将使用核心实现函数EEPROM_WR_Test来完成这个功能。 准备工作 在…

Dubbo【Dubbo实战(用户更新业务消费者实现、用户删除业务消费者实现、复习内容) 】(六)-全面详解(学习总结---从入门到深化)

目录 Dubbo实战_用户更新业务消费者实现 Dubbo实战_用户删除业务消费者实现 复习内容&#xff1a; Dubbo实战_用户更新业务消费者实现 在Consumer中调用更新用户业务 /*** 根据用户id修改用户名字* param users* return*/Integer updateUsers(User users);/*** 根据用户id查…

Apollo分布式配置中心(二)

上一篇&#xff1a; 上一篇已经知道Apollo是什么东西了&#xff0c;接下来实践一下 目录 一、创建应用 1、 新增配置 2、创建Namespace ​3、同步配置 4、灰度发布 添加灰度配置项 ​编辑 配置灰度规则 二、删除应用、集群、appNamespace 三、springBoot整合Apollo …

JAVA设计模式介绍

一、什么是设计模式 设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计…

前端Vue自定义手机号文本格式化组件手机号码文本转星号

前端Vue自定义手机号文本格式化组件, 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13231 效果图如下: # cc-format-phone #### 使用方法 使用方法 <!-- phone:手机号 isStar: 是否转星号 --> <cc-format-phone :phon…

2023.7.2

#include <iostream>using namespace std;class Complex { private:int age;int num; public://无参构造Complex(){}//有参构造Complex(int age,int num){this->age age;this->num num;}void show(){cout << "age" << age << "…

chatgpt赋能python:用Python根据IP地址查找具体地址:一个实用的SEO技巧

用Python根据IP地址查找具体地址&#xff1a;一个实用的SEO技巧 在数字化时代&#xff0c;IP地址是一个重要的数字标识符。使用IP地址来发现目标受众的位置是网络营销和搜索引擎优化策略的重要组成部分。在本文中&#xff0c;我们将介绍用Python编程语言根据IP地址查找具体地址…

4. MySQL多表查询练习题

数据库表 CREATE TABLE departments (dept_no CHAR(4) PRIMARY KEY COMMENT 部门编码,dept_name VARCHAR(40) NOT NULL UNIQUE COMMENT 部门名称 ) COMMENT 部门表;CREATE TABLE dept_emp (emp_no INT NOT NULL COMMENT 部门编码,dept_no …

vue路由配置公共布局layout

本篇实现三段式界面 公共布局文件 首先在src下新建layoutPc文件夹&#xff0c;再给layoutPc新建组件 header 、bottm、main三个文件基本确定了一个页面的基本架子&#xff0c;然后再新建一个index.vue文件 comment/AppMain.vue <template><section class"ap…

卷积神经网络狗猫数据集的分类

卷积神经网络狗猫数据集的分类 环境搭建 安装Anaconda 具体安装过程&#xff0c;请自行百度 配置TensorFlow、Keras 创建虚拟环境 输入下面命令&#xff1a; conda create -n ppqppl_tfl python3.6 #tf1是自己为创建虚拟环境取的名字&#xff0c;后面python的版本可以根据自己需…

MyBatis-Plus教程,不敢说是最详细的

一、MyBatis-Plus 1.简介 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档&…

基于SpringBoot+vue的在线动漫信息平台设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…