高级算法日记2:第1次课笔记

算法记录日记:让刷题真正沉淀为可复用能力 刷题是程序员提升算法能力与备战面试的常见方式,但单纯的刷题往往导致遗忘率高、迁移能力弱。理解背后的核心概念——主动消化与结构化复盘,是真正掌握算法的关键。通过建立个人算法记录,将题目抽象为问题建模、边界条件、错误过程、正解与复杂度、可迁移模式等要素,能有效对抗遗忘并提升举一反三的能力。这种方法适用于数据结构与算法学习、代码质量提升、竞赛训练及技术面试等场景。本文分享一套经过长期实践验证的算法记录日记模板、标签体系与复盘节奏,帮助学习者把刷题经验沉淀为可复用的知识库,实现从“似懂非懂”到“真正掌握”的跨越。 阅读详情

第一次课笔记

lecture:沈孝钧

record:孙相国

time: 2017/05/06

复杂度分析;分治法;排序及下界

1.排序算法比较:

这里写图片描述

2. Divide and Conquer

2.1 Principle of Divide and Conquer

When the input size of a problem is small, one or two numbers for example, then this problem can be easily solved. However, when the input size is large, many problems become difficult to solve. Therefore, a basic methodology is to find the relationship between the solution for a large sized input and the solutions for small sized inputs. Divide and Conquer is a particular approach that follows this methodology. We will see two more approaches later, namely, the greedy approach and the dynamic programming which are also following this methodology but differ in the ways of implementation.
Briefly speaking, Divide and Conquer method follows the following steps:

  1. Divide the problem with a large input size into a number of subproblems that are smaller instances of the same problem.

  2. Conquer the subproblems by solving them recursively. If the size of a subproblem is small enough, then solve it in a straightforward manner which is called “bottom out.”

  3. Combine the solutions to the subproblems into the solution for the original problem.

2.2 Examples

Suppose we have a sorted array of n numbers, A[1]⩽A[2]⩽⋯⩽A[n]. Now, we need to design an algorithm that searches the array to see if this array contains a particular number x . If A[i]=x, then report index i , otherwise report nil. The following algorithm called binary search uses the divide and conquer approach. Note that a smaller subproblem corresponds to a segment of the array A , denoted by A[p],A[p+1],⋯,A[r], where 1⩽p⩽r⩽n . This notation allows us to represent any subproblem. When, p=1,r=n , this sequence represents the original problem.

import math


def BinarySearch(A,p,r,x):
    if p > r:
        return None
    midpoint = math.floor((p+r)/2)
    if A[midpoint] == x:
        return midpoint
    elif x < A[midpoint]:
        return BinarySearch(A,p,midpoint-1,x)
    else:
        return BinarySearch(A,midpoint+1,r,x)

A=[1,2,3,5,6,7]
print(BinarySearch(A,0,5,2))
Example 2: Find max and min

Given n numbers stored in A[1⋯n] , we wish to design a divide-and-conquer algorithm that finds both the maximum number and the minimum number in this array.

Solution:

We design a procedure that finds the maximum and minimum numbers in the range of A[p, r].

import math


def Max_Min(A,p,r):
    if p == r:
        Max = A[p]
        Min = A[p]
        return Max,Min
    if p == r-1:
        Max = max(A[p],A[r])
        Min = min(A[p],A[r])
        return Max,Min
    q = math.floor((p+r)/2)
    Max1 ,Min1 = Max_Min(A,p,q)
    Max2,Min2 = Max_Min(A,p+1,r)
    Max = max(Max1,Max2)
    Min = min(Min1,Min2)
    return Max,Min

A=[1,3,4,5,6,7,8]
print(Max_Min(A,0,6))

By calling Max-Min (A[1.. n], Max, Min) , we will get the maximum and minimum numbers in A[1.. n].

The complexity follows the recurrence relation T(n)=T(⌊n/2⌋)+T(⌈n/2⌉)+2 .

We can prove by induction that for any n ,T(n)⩽2n–2.

Basis. When n=1 or n=2 , T(n)⩽2n–2 is obviously true.
Induction step. When n>2 , we have
T(n)=T(⌊n/2⌋)+T(⌈n/2⌉)+2
By induction,

T(n)⩽(2⌊n/2⌋−2)+(2⌈n/2⌉−2)+2=2(⌊n/2⌋+⌈n/2⌉)−4+2=2n−2.

Obviously, in the worst case, T(n)=2n–2 .

另一种方法:

每相邻两个为一组,得到每一组的max,和min,再和上一次得到的max,min做比较,一共要做3次比较。

T(n)=3×n2−2

摸底作业题第2/3题:dominating number

巴基斯坦老兄的解法(Boyer-Moore Algorithm):

用stack数据结构,算法思想同第3题

证明:因为配对一共 ⩽n/2 ,这意味着,任何配对的数字都不可能是dominating number.只有剩下的数字才是dominating number

note:

another version Boyer-Moore Algorithm is used for string matching

游戏策划学习:开发者日记研究 游戏策划学习第一天 在经历了一阵子的算法学习后,偶然在牛客看到几篇策划面经,顿时感受到了策划这一行业的魅力,也发觉比起算法的优化和效果的实现,我更想发挥自己综合性的能力去构想一个游戏的组成,分析游戏和玩家交互的各个环节,因此从4月15日开始进行策划方面的学习和研究。 以下是第一天的学习笔记: 开发者日志是非常重要的研究素材,也是从玩家思维转换到开发者思维的一个跳板,要多读多看多思考 1、云顶之弈S... 阅读详情

相关推荐

Solve the following recurrence relation by repeated substitution

Solve the following recurrence relation by repeated substitution T(n) = 2T(n/2) + n^3, T(1) = 1

埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 F-1+2=3?

链接:https://www.nowcoder.com/acm/contest/91/F来源:牛客网题目描述 小Y在研究数字的时候,发现了一个神奇的等式方程,他屈指算了一下有很多正整数x满足这个等式,比如1和2,现在问题来了,他想知道从小到大第N个满足这个等式的正整数,请你用程序帮他计算一下。 (表示按位异或运算) 输入描述:第一行是一个正整数,表示查询次数。接着有T行,每行有一个正整...

albertluf的博客 647

Simplicity Studio V5与EFR32BG22蓝牙开发环境实战指南

本文详细介绍了Simplicity Studio V5集成开发环境与EFR32BG22蓝牙芯片的开发实战指南。内容涵盖开发环境安装、SDK配置、项目创建、调试烧录、外设驱动集成及常见问题解决方案,帮助开发者快速上手物联网蓝牙应用开发,并充分利用EFR32BG22的低功耗与高集成度特性。

v5w6x的博客 320

largest number java_数据结构与算法分析:第一章:find the kth largest number | 学步园...

书中首先介绍了两种简单的方法:One way to solve this problem would be to read the n numbers into an array, sort the array in decreasing order by some simple algorithm such as bubble sort, and then return the element ...

weixin_42407739的博客 215

从一个过气考渣的角度看LLM智能化测试用例生成

根据业务需求生成测试用例,会涉及到相关上下文的召回、用例生成等场景。除了用例生成之外,也可以考虑应用LLM进行用例评审。因此,本文将涉及以下内容。

software_test010的博客 830

LSTM模型 轨迹经纬度预测

原始时间序列数据如下所示,我们只取前两列纬度和经度作为输入数据 我们设定用前六个位置信息预测下一个位置,则两个样本的输入输出数据如下所示: 创建LSTM网络训练模型: import numpy as np from keras.layers.core import Dense, Activation, Dropout from keras.layers import LS...

Muzi_Water的博客 2万+

沈孝钧计算机算法基础答案,计算机算法基础

出版信息沈孝钧 / 机械工业出版社 / 2013-11 / 45.00元内容简介计算机算法是计算机科学的一个重要分支,也是一个难点。本书作者根据自己20多年在国内、国外的教学与科研实践,系统地总结了计算机算法的设计与分析方法,覆盖了大部分最主要的算法技术,包括:分治法、贪心法、动态规划、图的遍历技术、穷举搜索等,涉及一系列重要的算法问题,包括排序问题、选择问题、最小生成树问题、最短路径问题、网络流...

weixin_42651281的博客 956

【SAM2系列】windows单GPU复现时的bug解决记录

windows运行sam2,就感觉在开一艘破破烂烂的船,每走一步报一个错,bug源源不断的冒出来😭😭😭😭😭。

weixin_43571113的博客 1317

Algorithm backup ---- Find the kth largest number(寻找第K大数)

  Here is a way to find the k-th largest number from an ayyay based on the theory of quick sort with an algorithmic complexity of O(n).   First we find a base element from the array randomly, an...

361

用STM32手搓一个体温计

市面上大多额温计、测温计精度。

m0_61687959的博客 2375

手把手教你用CANopen SDO报文控制步进电机(附CIA402协议详解)

本文详细解析了如何通过CANopen SDO报文控制步进电机,深入讲解CIA402协议的核心架构、状态机模型及对象字典管理,并提供实战代码示例。从SDO报文构造到多轴同步控制,帮助开发者掌握工业级步进电机的精确控制技术,适用于自动化设备开发。

weixin_33737774的博客 485

对Dijkstra名字发音的看法

Dijkstra是计算机科学大师,但其名字长期以来不会念。大学的最后一年,鄙人决定研究研究,有不妥之处,还请列位看官指正。 由于Dijkstra是荷兰人,因此应按荷兰语来发音。 经调研,ij在荷兰语相当于y,发音近似于德语的ei,或英语的ai。 荷兰语跟德语实际上是一种语言,故应念作/'daik stra/,注意/r/音要发成颤音。 个人认为译作中文“狄克斯特拉”是比较合话的。念...

dlt34687的博客 2967

3D高斯泼溅实战:如何用自采数据集训练出高质量3D模型(附COLMAP避坑指南)

本文详细介绍了使用自采数据集训练高质量3D高斯泼溅模型的完整实战流程。从数据采集规范、COLMAP稀疏重建的深度配置与避坑指南,到数据格式转换及3DGS训练调优策略,提供了针对自采数据的关键参数调整与问题排查方案,帮助读者高效构建专属3D场景。

g9h0i1的博客 977

高级算法日记4:第2次课笔记

lecture:沈孝钧 record:孙相国 time:2017/06/071. 排序n−1+⌈lgn⌉n-1+\lceil lgn \rceil 对排序 基数排序 counting排序 tournament sorting决策树找到没有重复的数。 不可能有线性时间得到频率最高的数字,否则的话,用线性时间可以找到一组数列中的频率最高的数字,如果不是1,那么就说明这组数列有重复的数字。然

相国大人 454

VCS NLP 低功耗验证系列(六):功耗分析与优化——SAIF 报告与验证效率提升

本文是VCS NLP低功耗验证系列的第六篇,主要解决功耗数据采集和验证效率优化问题。文章首先介绍了SAIF(Switching Activity Interchange Format)文件在功耗分析中的作用,详细讲解了VCS的Region-Based SAIF功能,包括三个关键系统任务($saif_region_create、$saif_region_exclude、$saif_region_monitor)的使用方法和工程实践建议。接着从编译侧、运行侧和方法学侧三个维度提出了NLP验证效率优化策略,特别强

元直的博客 472

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Python学习日记:求解一个数的n次方根的方法

求解一个数的某一次方根,对于某些特殊的数字的特殊次方根而言,我们可以口头进行计算;但是通常情况下,我们都只能借助适当的数学工具来进行计算。本次就是基于Python中求解一个数的n次方根的方法的学习总结。 1、利用Python中的内置函数(pow函数)求解 Python中的pow函数一般有两种形式:pow(x,y)与pow(x,y,z);其中pow(x,y)表示x的y次方的值,pow(x,y,z)则表示x的y次方除以z的余数。 具体代码如下: #导入必要的库 import numpy as np i

m0_66542076的博客 6502

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

高级算法日记1:摸底课

第一次上课之前,沈教授留了一次摸底作业。下面对这次作业做一个总结。 习题的解答整合了:我自己的作业,其他同学更好的作业以及沈教授的讲解。 Dear all, our lecturer has assigned the first homework for background knowledge assessment, all of you are asked to download the

相国大人 1012

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

DataStructure课设日记

"哎呀~~,明天数据结构的课设就开始啦。" 2019-01-13 19:06:45 多云 上次的面向对象课设可谓是给我的心灵带来了极大的创伤,所以这次一定要做好了准备才行,首先就是千万不要生病。想想我就头疼,一旦感冒那就不太可能在这么高强度的课设下恢复了,所以Reno你一定要照顾好你自己啊,那俗话说得好,身体才是革命的本钱嘛。不管是风是雨,只要你迎头上,就算是一把鼻涕一把泪滴,那只要能把山头给...

weixin_30528371的博客 251

Leetcode算法训练日记 | day34

Leetcode:第 1005 题 给你一个整数数组nums和一个整数k,按以下方法修改该数组:选择某个下标i并将nums[i]替换为-nums[i]。重复这个过程恰好k次。可以多次选择同一个下标i。以这种方式修改数组后,返回数组可能的最大和。 Leetcode:第 134 题 在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。 Leetcode:第 135 题 n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。

m0_74882777的博客 1517

jrnl命令行日记加密性能对比:如何选择最佳加密算法

jrnl是一个强大的命令行日记工具,让你无需离开终端就能收集想法和笔记。对于注重隐私的用户来说,加密功能至关重要。本文将深入分析jrnl的三种加密算法性能差异,帮助你做出明智的选择。 ## 🔒 jrnl加密算法概述 jrnl提供了三种不同的加密方法,每种都有其独特的安全特性和性能特点: - **无加密模式**:不进行任何加密处理,性能最优 - **Jrnlv1加密**:使用AES-CBC模

gitblog_00611的博客 447

算法日记:提升开发者效率的思维记录法

算法日记作为一种技术实践方法,通过结构化记录算法问题的解决过程,帮助开发者建立个人知识体系。其核心原理在于将碎片化的思考系统化,采用问题描述、数学建模、优化过程等标准化模板,实现思维的可视化与复用。在工程实践中,这种方法能显著提升算法设计能力,尤其适用于需要频繁解决复杂问题的场景,如推荐系统优化、动态规划等。结合热词“时间复杂度”和“数学建模”,算法日记不仅优化了开发流程,还形成了可追溯的技术资产。

weixin_31960565的博客 299

蓝桥杯真题之13省1-高斯日记 题解

题目描述 大数学家高斯有个好习惯:无论如何都要记日记。 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日。 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:17...

fucheng的博客 1783

如何养成记日记的习惯

在吴军的《阅读与写作50讲》中,讲到如何通过写日记提升写作能力。然而对于大多数程序员而言,写作能力并非必要技能,也没有想到有意识的去提升。吴军老师的课很精彩,但本文并非对吴军老师课程的总...

云水木石 993

日记管理系统

/* 日记管理系统*/ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #define ESC 27 //退出键 #define Enter 13 //回车键 #define BackSpace 8 /*定义日记结构体*/ ty...

u011256974的博客 1109

算法记录日记:从KMP到PID,用外挂大脑真正掌握每一个算法

算法学习最忌“看了就忘”。从艾宾浩斯遗忘曲线到费曼学习法,主动记录与输出比被动输入更能加深理解。通过为每个算法建立包含问题背景、核心思路、图解推导、代码实现与踩坑记录的结构化日记,可以把零散知识转化为个人知识库。KMP的前缀函数、动态规划的转移方程、PID的调参逻辑,都能在反复记录与复盘中形成长期记忆。这种学习方法不仅适用于面试刷题,也能反哺工程实践——从排序二分到图论搜索,从机器学习到控制优化,算法日记让每一个难点都有迹可循。本文分享一套完整的算法日记方法论与模板,帮你在“学了又忘”的循环中找到突破口。

weixin_33423874的博客 382

高斯日记

高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日。 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。 高斯获得博士学位的那天日记上标着:8113 请你算出高斯获得博士学位的年月日。 答案.

qq_51877651的博客 304
上一篇: 卷积神经网络CNN理论到实践(5)
下一篇: 循环神经网络理论到实践(1)
相国大人
博客等级 码龄10年 1009粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值