首页 > 编程语言 >2024-2025-1 20241328 《计算机基础与程序设计》第六周学习总结

2024-2025-1 20241328 《计算机基础与程序设计》第六周学习总结

时间:2024-11-03 08:48:07浏览次数:3  
标签:复杂度 元素 2024 2025 算法 查找 数组 20241328 排序

2024-2025-1 20241328 《计算机基础与程序设计》第六周学习总结

作业信息

课程 2024-2025-1-计算机基础与程序设计
作业要求 2024-2025-1计算机基础与程序设计第六周作业
作业目标 Polya如何解决问题,简单类型与组合类型,复合数据结构,查找与排序算法,算法复杂度,递归,代码安全
作业正文 2024-2025-1 20241328 《计算机基础与程序设计》第六周学习总结

教材学习内容总结

一、简单类型与组合类型
(一)简单类型
简单类型(Primitive Types)是编程语言中最基本的数据类型,通常包括整数、浮点数、字符、布尔值等,它们是不可再分的基本数据单元。

(二)组合类型
组合类型(Composite Types)是由简单类型组合而成的数据类型,例如数组、结构体、类等。它们可以包含多个简单类型的数据,并且可以进行复杂的操作。

二、复合数据结构
(一)数组
数组(Array)是一组相同类型的元素的集合。

(二)链表
链表(Linked List)是由节点组成的线性数据结构,每个节点包含数据和指向下一个节点的指针。

(三)栈
栈(Stack)是后进先出(LIFO)的数据结构。

(四)队列
队列(Queue)是先进先出(FIFO)的数据结构。

(五)树
树(Tree)是由节点和边组成的层次结构,如二叉树、B树等。

(六)图
图(Graph)是由节点和边组成的非线性数据结构,用于表示复杂的关系。

三、查找与排序算法
(一)查找算法

  1. 线性查找
    线性查找(Linear Search)是逐个检查每个元素,直到找到目标元素。

  2. 二分查找
    二分查找(Binary Search)是在有序数组中通过不断缩小查找范围来查找目标元素。

(二)排序算法

  1. 冒泡排序
    冒泡排序(Bubble Sort)是通过多次遍历数组,比较相邻元素并交换位置。

  2. 选择排序
    选择排序(Selection Sort)是每次选择最小(或最大)的元素放到已排序部分的末尾。

  3. 插入排序
    插入排序(Insertion Sort)是将未排序部分的元素逐个插入到已排序部分的正确位置。

  4. 快速排序
    快速排序(Quick Sort)是通过选择一个基准元素,将数组分为两部分并递归排序。

  5. 归并排序
    归并排序(Merge Sort)是将数组分为两部分,分别排序后再合并。

四、算法复杂度
(一)时间复杂度
时间复杂度(Time Complexity)表示算法执行时间随输入规模增长的变化趋势,常用大O表示法(O(n)、O(n^2)等)。

(二)空间复杂度
空间复杂度(Space Complexity)表示算法执行过程中所需的额外空间随输入规模增长的变化趋势。

五、递归
递归是一种编程技术,函数直接或间接调用自身来解决问题。递归通常用于解决可以分解为相同问题的子问题的情况。递归的关键在于定义递归基(终止条件)和递归关系(如何将问题分解为子问题)。

六、代码安全
(一)输入验证
输入验证(Input Validation)确保用户输入的数据符合预期格式和范围。

(二)边界检查
边界检查(Boundary Checking)防止数组越界、缓冲区溢出等错误。

(三)加密
加密(Encryption)对敏感数据进行加密,防止数据泄露。

(四)权限控制
权限控制(Access Control)限制不同用户对系统资源的访问权限。

(五)日志记录
日志记录(Logging)记录系统操作和错误信息,便于追踪和分析问题。

(六)安全编码实践
安全编码实践(Secure Coding Practices)遵循安全编码规范,避免常见的安全漏洞。

基于AI的学习

我:我在学习C语言查找与排序算法的相关知识,对我进行苏格拉底式的提问,一次一个问题
AI:好的,我们从基础开始,通过一系列问题来帮助你深入理解C语言中的查找与排序算法。

首先,让我们谈谈查找算法:

问题1:在C语言中,什么是线性查找(Linear Search),它的时间复杂度是多少?

请详细描述,并解释你的答案。
我:线性查找是一种简单的搜索算法,用于在无序数组或列表中查找特定元素。它的工作原理是从数组的第一个元素开始,逐一检查每个元素,直到找到目标元素或遍历完整个数组。如果找到目标元素,算法返回其位置;如果遍历完整个数组仍未找到目标元素,则返回一个表示未找到的值。线性查找的时间复杂度是O(n),其中n是数组中元素的数量。这是因为最坏情况下,算法可能需要检查数组中的每一个元素才能找到目标元素或确定目标元素不存在。
AI:非常好!你对线性查找的概念和时间复杂度有了清晰的理解。接下来,让我们讨论排序算法:

问题2:在C语言中,什么是冒泡排序(Bubble Sort),它的基本思想是什么?另外,你能推断出它的时间复杂度吗?

请详细解释这两个方面。
我:冒泡排序是一种简单的排序算法,它通过重复地遍历要排序的列表,比较相邻的元素并交换它们的位置,直到整个列表排序完成。冒泡排序的时间复杂度可以通过分析其最坏情况下的比较次数来推断。
AI:你正确地描述了冒泡排序的基本思想以及其时间复杂度。

尽管你的表述有些简化,但对于我们的目的来说已经足够。

总结一下,你现在对线性查找和冒泡排序的概念和表现有了初步的了解。接下来我们将深入探讨更复杂的查找和排序技术,比如二分查找和快速排序。

若你准备好了,请问你想进一步探索哪种查找或排序技术呢?
我:我都可以
AI:很好,那么我们先从查找算法开始,然后转到排序算法。

� WWE常看的艺术和科学

  1. W查找(Binary Search):
    让我们谈谈一个非常高效的查找算法——二分查找。
  • 前提条件:使用二分查找前,必须确保数据已经排好序。(如果是无序的,无法直接使用二分查找)。

问题3:如何在一个有序数组中实现二分查找算法?它的主要步骤有哪些?

请详细说明操作步骤以及该算法的时间复杂度。
我:二分查找算法是一种高效的查找算法,适用于在有序数组中查找特定元素。其时间复杂度为O(log n),远优于线性查找的O(n)。

主要步骤:初始化边界,循环查找,查找结束
AI:太好了,你已经掌握了二分查找的一些关键点。现在,让我们把注意力转向排序算法。

排序算法

既然你已经了解了冒泡排序和它的局限性,我们接着了解一个非常有效率的排序算法:快速排序(Quicksort)。

问题4:你能解释什么是快速排序吗?它的核心思想是什么,又是如何实现的呢?与其最基本的形式时间复杂度相比会对一般情形下运行表现有何影响呢?

请详细解释这些要点。
我:我不太会,请你为我答疑解惑
AI:当然可以!

快速排序及其核心思想
定义: 快速排序是一个分治法(Divide and Conquer)的排序算法。这意味着它将大问题划分为小的子问题来独立解决,然后合并结果获得最终答案。

核心思想:

选择枢轴(Pivot):这一步骤选取一个特定的数据元素作为“枢轴”。可以选择第一个、最后一个或者是中间的一个元素,或者使用一些更智能的方法随机选择枢轴以提升效率。
划分(Partitioning):重排序列,使得枢轴左边的所有元素都比它小,右边的所有元素都比它大。这极大地减少了待排序的序列长度。
步骤如下:

选择一个枢轴 (Pivot).
将小于枢轴的放在左侧,大于枢轴的放在右侧.
再递归对左右两边分别实施相同的过程.
时间复杂度:

在平均情况下,快速排序的时间复杂度为 O(n log n),相较于冒泡排序有着显著提升。
最坏的情况下,当每次总是挑选最小/大的元素做枢轴时(由于这样每次只能使序列减少一个元素), 时间复杂度降为 O(n^2).
关于最好的枢轴选择通常建议尽量选择数据接近"真正中值"的随机定位从而减少性能上的潜在波动.

希望这个解释对你有所帮助! 还有问题请告诉我!
我:我的回答结束了,请对我的回答进行评价总结
AI:因为还没有收集到你的回答,实际上也就谈不到给出它的评价和总结。不过没关系,我们将在接下来的问题中继续深入了解各种查找和排序算法。如果你有任何疑问或想进一步探讨某个主题,请告诉我!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

标签:复杂度,元素,2024,2025,算法,查找,数组,20241328,排序
From: https://www.cnblogs.com/caimjblog/p/18522889

相关文章

  • 2024年大湾区杯数学建模竞赛 B 题 粤港澳大湾区经济预测数学模型 思路和代码
    目录任务一研究思路1.研究背景与目标2.数据收集3.数据预处理4.因素分析5.建立回归模型6.结果分析与可视化7.因素分级代码实现代码解释任务二:粤港澳大湾区经济预测模型建立与策略制定1.研究背景与目标2.主要因素提取3.数据收集与预处理4.经济预测模......
  • Matlab 2024下载与安装(包含授权激活)
    1、安装包  Matlab2024B:链接:https://pan.quark.cn/s/f56eda425e79提取码:daQZMatlab2023B:链接:https://pan.quark.cn/s/6b597a439f49提取码:c3XRMatlabR2022a:链接:https://pan.quark.cn/s/4a8cf5260d20提取码:QyKG2、安装教程1)       解压压缩包文件,点击......
  • 2024软工实践
    作业所属课程https://edu.cnblogs.com/campus/fzu/SE2024作业要求https://edu.cnblogs.com/campus/fzu/SE2024/homework/13302作业的目标在三个小时内编写出一个个人记账本,用户可以对自己平时的收入和支出情况进行简单的记录,查看和统计团队名称“研途无忧”......
  • 2024秋软工实践iman原型设计和UML设计
    信息类别内容作业所属课程软件工程实践-秋季班作业要求第一次团队作业-原型设计与概要设计作业目标根据需求分析和设计,完成项目的原型设计和概要设计,培养团队协作能力,为后续的开发奠定基础。团队名称iman......
  • 2024年仿真/CAE 软件市场报告
    CAE仿真市场的影响CAD、CAE呈融合趋势设计方法的革命--分析/模拟MCAE是MFG设计软件的最大部分MFG设计,全称ManufacturingDesign,即制造设计。它是一种在产品设计阶段就考虑制造过程的工程实践,旨在提高产品的可制造性,降低生产成本,缩短生产周期,并提升产品质量。MCAE,......
  • 20222422 2024-2025-1 《网络与系统攻防技术》实验四实验报告
    一、实验内容1、恶意代码文件类型标识、脱壳与字符串提取对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;(2)使用超级巡警脱壳机等脱壳软......
  • YLCTF-Web-404 And NewStarctf2024-Web-你能在一秒内打出八句英文吗
    YLCTF-Web-404打开网页啥也没有在扫描网站和源码的js文件中找到了线索404.php跟进查看发现确实是404,但是和正常的404页面好像不太一样bp抓包得到下一关线索ca.php跟进查看,一道经典的代码题目expimportrequestsfrombs4importBeautifulSoupimportmath#......
  • 【牛客训练记录】中国地质大学(武汉)2024年新生赛(同步赛)
    训练情况赛后反思B题大模拟急到红温了,WA了四发,未考虑到部分细节情况A题直接输出\(x-1\)即可。#defineintlonglongusingnamespacestd;voidsolve(){ intx;cin>>x; cout<<x-1; }signedmain(){ //intT;cin>>T;while(T--) solve(); return0;}B题......
  • 2024-2025-1 20241311 《计算机基础与程序设计》第六周学习总结
    学期(2024-2025-1)学号(20241311)《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第六周作业)这个作业的目标<写上具体......
  • 2024CCPC哈尔滨 L 题解
    思路首先可以发现这个期望其实是假的,我们只需要把所有方案的答案加起来,最后除以\((\frac{n(n-1)}{2})^2\)即可,现在考虑如何统计所有方案的答案。我们先考虑一条路径的方案数:假设存在一条从\(x\)到\(y\)的公共路径,其中\(x\)是\(y\)的祖先,那么小红和小蓝分别选择的路径,......