CS50x 2024 - Lecture 3 - Algorithms

news2024/11/18 17:29:04

TABLE OF CONTENTS

00:00:00 - Introduction

一种统计班上人数的方法,全部站起来,两两配对,一个坐下,循环

00:01:01 - Overview

00:02:58 - Attendance

00:09:40 - Linear Search

00:24:58 - Binary Search 二分搜索

分而治之的方法

00:28:25 - Running Time

代表这些算法的效率
在这里插入图片描述
使用的算法将被描述为这些运动时间之一的数量级

大O代表可能计算步数的上限,考虑的是最坏的情况

O(1)代表恒定的步数,恒定时间算法
O(n) 线性搜索,一页一页翻书
O(n2) n个人与其他所有人握手

在这里插入图片描述
在这里插入图片描述

00:38:06 - search.c

#include <stdio.h>
#include <cs50.h>
#include <string.h>

int main() {
    string str[] = {"apple", "tree", "dog", "cat", "captital", "aoxue"};
    string n = get_string("input a string:");
    for (int i = 0; i < 6; i++) {
        if(strcmp(str[i], n) == 0) {
            printf("found\n");
            return 0;
        }
    }
    printf("not found\n");
    return 1;
}

00:51:29 - phonebook.c

#include <stdio.h>
#include <cs50.h>
#include <string.h>

int main(void) {
    string names[] = {"dc", "aoxue", "bubu", "pikaqiu"};
    string numbers[] = {"1818198", "11333","4343455", "5465356"};
    string n = get_string("input a name:");
    for (int i = 0; i< 4; i++) {
        if (strcmp(names[i], n) == 0) {
            printf("found %s\n", numbers[i]);
            return 0;
        }
    }
    printf("not found\n");
    return 1;

}

即使在英语中被称为数字,也应该用字符串存储
显然以上这样的code smell不对,不应该将名字和数字分开

00:53:42 - Structs

typedef意味着定义以下数据类型,我要发明这个数据类型

#include <stdio.h>
#include <cs50.h>
#include <string.h>

typedef struct {
    string name;
    string number;
}person;
int main(void) {
    // person people[3];
    // people[0].name = "dc";
    // people[0].number = "1919191";

    // people[1].name = "aoxue";
    // people[1].number = "423423";

    // people[2].name = "bubu";
    // people[2].number = "534543";

        person people[3] = {
        {"dc", "1919191"},
        {"aoxue", "423423"},
        {"bubu", "534543"}
    };

    string n = get_string("input a name:");
    for (int i = 0; i< 3; i++) {
        if (strcmp(people[i].name, n) == 0) {
            printf("found %s\n", people[i].number);
            return 0;
        }
    }
    printf("not found\n");
    return 1;

}

01:05:26 - Sorting

每次都检查整个列表,选择最小元素

01:12:43 - Selection Sort

在这里插入图片描述
脑子一次只记得一个元素
在这里插入图片描述

01:24:50 - Bubble Sort 冒泡排序

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

一次次比较邻接关系

01:33:10 - Recursion 递归

在这里插入图片描述
该搜索函数正在调用自身,只要有终止条件(基本情况),可以打破无限循环

是对调用自身的函数的描述

iterration.c

#include <stdio.h>
#include <cs50.h>

void draw(int n);

int main() {
    int height = get_int("input the height:");
    draw(height);

}

void draw(int n) {
    for (int i = 0; i < n; i++) {
        for (int j =0; j < i+1; j++) {
            printf("*");
        }
        printf("\n");
    }
}

recursion.c

#include <stdio.h>
#include <cs50.h>

void draw(int n);

int main() {
    int height = get_int("input he height:");
    draw(height);
}

void draw(int n) {
    if(n <= 0) {
        return;
    }
    draw(n - 1);
    for (int i = 0; i < n; i++) {
        printf("*");
    }
    printf("\n");
}

01:46:28 - Merge Sort 合并排序

在这里插入图片描述
选择排序和冒泡排序只允许自己使用恒定的内存,在计算机科学中,可以用一种资源换另一种资源,想节约时间,就扩展空间在这里插入图片描述

02:00:23 - Sort Race

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

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

相关文章

2.9日学习打卡----初学RabbitMQ(四)

2.9日学习打卡 一.RabbitMQ 死信队列 在MQ中&#xff0c;当消息成为死信&#xff08;Dead message&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而在RabbitMQ中&#xff0c;由于有交换机的概念&#xff0c;实…

Linux运行级别 | 管理Linux服务

Linux运行级别 级别&#xff1a; 0关机1单用户2多用户但是不运行nfs网路文件系统3默认的运行级别&#xff0c;给一个黑的屏幕&#xff0c;只能敲命令4未使用5默认的运行级别&#xff0c;图形界面6重启切换运行级别&#xff1a; init x管理Linux服务 systemctl命令&#xf…

springboot169基于vue的工厂车间管理系统的设计

基于VUE的工厂车间管理系统设计与实现 摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本…

微信小程序(四十)API的封装与调用

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.在单独的js文件中写js接口 2.以注册为全局wx的方式调用接口 源码&#xff1a; utils/testAPI.js const testAPI{/*** * param {*} title */simpleToast(title提示){//可传参&#xff0c;默认为‘提示’wx.sho…

新春快乐(烟花、春联)【附源码】

新春快乐 一&#xff1a; C语言 -- 烟花二&#xff1a;Python -- 春联三&#xff1a;Python -- 烟花四&#xff1a;HTML -- 烟花 一&#xff1a; C语言 – 烟花 运行效果&#xff1a; #include <graphics.h> #include <math.h> #include <time.h> #include…

BUUCTF LKWA

1.访问页面。 2.选择 Variables variable 关卡 3.获得flag http://357dab81-78b8-4d74-976a-4a69dd894542.node5.buuoj.cn:81/variables/variable.php?funcpassthru&inputcat%2Fflagflag{0020ced6-8166-4fa5-87a7-7d93ee687c3e}

跟着pink老师前端入门教程-day23

苏宁网首页案例制作 设置视口标签以及引入初始化样式 <meta name"viewport" content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"> <link rel"stylesheet" href"css/normaliz…

Days 26 ElfBoard RGB接口

1. RGB接口介绍 ELF 1支持并行24位LCD,最大RGB888 24位&#xff0c;最高分辨率支持WXGA&#xff08;1366x768&#xff09;&#xff0c;刷新频率为60Hz&#xff0c;底板采用的是RGB565的连接方式&#xff0c;通过一个0.5mm间距54P的FPC座&#xff08;P9&#xff09;引出&#x…

用python写个类

对类的简单概述 面向过程编程,是按照预定的顺序一步步执行,面向对象编程则是将相似的对象归为一类,定义它们的属性和行为,例如人有姓名,性别,年龄等属性,有吃饭,睡觉,学习等行为.这便是类,类是对象的模版,对象是类的实例,例如人是一个抽象的类,而张三是一个具体的对象. 学会用…

Spring Boot3统一结果封装

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 封装目的 常用格式 定义返回结果枚举类 定义返回结果封装类 对返回结果封装 测试封装 前置条件 已…

黄金交易策略(Nerve Knife):反趋势锁定单的处理机制

锁定单是由大趋势反转之后原来的趋势单转变而来的&#xff0c;会在趋势再次反转时变为趋势单或者转入保留单&#xff0c;也有很大概率在趋势识别到转变之前就被减仓减掉了。 完整EA&#xff1a;Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 一、锁定单怎么样来的&#xf…

旅游|基于Springboot的旅游管理系统设计与实现(源码+数据库+文档)

旅游管理系统目录 目录 基于Springboot的旅游管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户管理 2、景点分类管理 3、景点信息管理 4、酒店信息管理 5、景点信息 6、游记分享管理 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xf…

MySQL-视图(VIEW)

文章目录 1. 什么是视图&#xff1f;2. 视图 VS 数据表3. 视图的优点4. 视图相关语法4.1 创建视图4.2 查看视图4.3 修改视图4.4 删除视图4.5 检查选项 5. 案例6. 注意事项 1. 什么是视图&#xff1f; MySQL 视图&#xff08; View&#xff09;是一种虚拟存在的表&#xff0c;同…

Python实现计数排序

对于如果存在使用两个数组成员进行比较的操作&#xff0c;该方法会导致排序算法的时间复杂度会存在一个下界问题&#xff0c;该问题在使用计数排序的时候可以突破这个理论下界&#xff0c;也即是不适用元素比对的操作的算法之一&#xff0c;计数排序。 添加图片注释&#xff0c…

关于数字图像处理考试

我们学校这门科目是半学期就完结哦&#xff0c;同学们学习的时候要注意时间哦。 选择题不用管&#xff0c;到时候会有各种版本的复习资料的。 以下这些东西可能会是大题的重点&#xff1a; 我根据平时代码总结的&#xff0c;供参考 基本操作&#xff1a; 1.读图&#xff1a;…

【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…

【正式】今年第一篇CSDN(纯技术教学)

一、文件上传简介 文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff08;木马、病毒、恶意脚本、webshell等&#xff09;&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。上传点一般出现在头像、导入数据、上传压缩包等地方&#xff0c;由于程序对用户上传…

CSP-202009-1-称检测点查询

CSP-202009-1-称检测点查询 解题思路 本题的时间复杂度貌似没有限制&#xff0c;直接暴力枚举就能知识盲点&#xff1a;sort()函数-升序排序 #include <algorithm>给名为dis&#xff0c;长度为n的数组排序sort(new_dis, new_dis n); #include <iostream> #inc…

三、OpenAI所有模型介绍

1. 综述 OpenAI API开发了具有各种能力的模型。可以根据不同的需求选择不同的模型并进行精调。 模型描述GPT-4、GPT-4 Turbo一组从GPT-3.5升级后的模型&#xff0c;能够生成自然语言和代码GPT-3.5 Turbo一组从GPT-3.5升级后的模型&#xff0c;能够生成自然语言和代码DALL.E能…

搭建yum仓库服务器

安装 1.安装linux 1.1安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 1.2下载 cd /opt/nginx wget http://nginx.org/download/nginx-1.25.3.tar.gz 1.3解压 tar -xvf nginx-1.25.3.tar.gz 1.4配置 cd nginx-1.25.3 ./configure --pre…