自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 C#学习(四):表达式,你必须懂的编程基础知识

表达式是一个数学或逻辑的符号组合,可以用来表示一个具体的数值、一个关系或一个命题。在数学中,表达式通常由数、变量、运算符和括号组成,可以进行运算,得到一个具体的数值。在逻辑中,表达式通常由逻辑运算符和命题变量组成,可以表示一个逻辑命题的真假值。表达式是构成数学和逻辑推理的基础,可以用来描述数学关系、证明数学定理,以及进行逻辑推理和推断。

2024-07-20 14:37:17 701

原创 (超详细,超易懂)设计模式(十三):代理模式,悟空与观音的关系

代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对原始对象的访问。代理对象充当了客户端和原始对象之间的中介,并可以在访问原始对象之前或之后执行一些额外的操作。代理模式的主要目的是实现对原始对象的控制,可以用于控制对对象的访问权限、实现延迟加载、提供缓存机制等。代理模式可以分为静态代理和动态代理两种。静态代理是指在编译时已经确定代理对象和被代理对象的关系,代理对象和被代理对象都必须实现相同的接口或继承相同的抽象类。动态代理是指在运行时动态生成代理对象,不需要提前指定被代理对象的具体类型。

2024-07-20 14:14:55 1042

原创 (超详细,超易懂)设计模式(十二):享元模式,唐三藏的徒弟们

享元模式是一种结构型设计模式,旨在最小化内存使用和提高性能。该模式通过共享对象的方式,将大量细粒度的对象共享使用,以减少创建对象的数量和保存对象的内存。在享元模式中,将对象分为两类:内部状态和外部状态。内部状态是不依赖于外部环境的对象状态,可以在多个对象之间共享。外部状态是依赖于外部环境的对象状态,每个对象都需要单独保存。享元模式中的享元工厂用于管理共享对象的创建和使用。当需要新的对象时,先检查工厂是否已经有符合条件的对象,如果有则返回已有对象,如果没有则创建新对象并添加到工厂中。

2024-07-18 14:17:02 826

原创 (超详细,超易懂)设计模式(十一):外观模式,师兄弟组队去旅行

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问系统中的一组接口。外观模式隐藏了系统的复杂性,让客户端可以通过一个简单的接口来操作系统。外观模式通过定义一个高层接口,来封装一系列子系统的复杂操作。客户端只需要通过外观对象来与子系统进行交互,无需了解子系统的具体实现。外观模式的主要目的是简化系统的接口,将客户端与系统的耦合度降到最低。通过使用外观模式,客户端可以通过同一接口来调用系统的不同子系统,而不需要了解子系统之间的细节。

2024-07-17 16:34:50 611

原创 (超详细,超易懂)设计模式(十):装饰模式,飞行和变身能力

装饰模式是一种结构型设计模式,用于在不改变已有代码的情况下,动态地向一个对象添加新的功能。它通过创建一个装饰类,该类包装原始类实例,并提供与原始类相同的接口,以便能够透明地替代原始类。通过使用装饰模式,可以在运行时动态地向对象添加功能,而不必修改其代码。装饰模式的核心思想是将功能的装饰与被装饰的对象分离,使得二者可以独立地变化。装饰类继承自被装饰类,从而具有与被装饰对象相同的接口。装饰类中包含一个指向被装饰对象的引用,通过在调用装饰类的方法时,先调用被装饰对象的方法,再在其基础上添加新的功能。

2024-07-17 09:39:46 565

原创 C#学习(三):运算符,你必须懂的各种数学和逻辑操作

C#运算符用于执行各种数学和逻辑操作。下面是一些常见的C#运算符: 用于执行基本的数学运算,如加法 (+)、减法 (-)、乘法 (*)、除法 (/)、取余 (%) 和取负 (-)。 用于比较两个值的关系,如相等 (==)、不相等 (!=)、大于 (>)、小于 (=) 和小于等于 (

2024-06-28 19:59:03 1140

原创 (超详细,超易懂)设计模式(九):组合模式,孙悟空过桥的故事

组合模式是一种结构型设计模式,它允许将对象组合成树状结构,并以统一的方式对待树中的所有对象。组合模式使得客户端可以一致地使用单个对象或组合对象,无需关心对象的具体类型。在组合模式中,有两种基本角色:组合对象和叶子对象。组合对象可以包含其他组合对象或叶子对象,并且可以以相同的方式对待它们。叶子对象是不能再包含任何其他对象的最小单元。组合模式的核心思想是通过递归组合对象,形成树状结构。这样可以方便地对整个树进行操作,无论是对整个树还是其中的某个节点,都可以使用统一的方式进行处理。

2024-06-28 18:21:45 1113

原创 (超详细,超易懂)设计模式(八):桥接模式,孙悟空和他的金箍棒

桥接模式(Bridge Pattern)是一种软件设计模式,它通过将抽象部分与其具体实现部分分离,使它们能够独立地变化。桥接模式的核心思想是将抽象和实现解耦,使它们可以独立地变化,而不会相互影响。在桥接模式中,抽象部分和实现部分分别由抽象类和接口来定义,抽象类包含一个对接口的引用,通过该引用可以对具体实现进行调用。具体实现类实现了接口,并提供具体的实现方法。通过桥接模式,可以在不修改原有代码的情况下,扩展和变化抽象部分和实现部分。

2024-06-28 18:04:20 1066

原创 (超详细,超易懂)设计模式(七):适配器模式,孙悟空大战牛魔王

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将不兼容的接口转换为可用的接口。适配器模式通过创建一个中间层(适配器)来连接两个不兼容的接口,使它们能够协同工作。适配器模式的核心思想是在适配器类中实现目标接口,并通过组合或继承的方式,将被适配者的接口引入适配器类中。当客户端调用目标接口的方法时,适配器类会将请求转发给被适配者类,实现接口的适配。

2024-06-27 17:39:25 749

原创 C#学习(二):数据类型,开始认识家里的家具

C#是一种面向对象的编程语言,它提供了许多不同的数据类型来存储和处理各种类型的数据。下面是C#中一些常见的数据类型的简介:这些数据类型提供了不同的功能和存储能力,使我们能够更好地处理和操作各种数据。了解各种数据类型的特点和用途,可以帮助我们更有效地编写和调试C#程序。

2024-06-27 16:54:35 897

原创 C#学习(一):认识我的第一个程序,你好Malax

4.1 C#开发环境的安装搭建4.2 C#控制台应用程序的创建和执行4.3 C#在控制台输出的代码和等待用户按下任意键退出的代码t=N7T8VS2022安装器https://download.csdn.net/download/Malex2024/89462611。

2024-06-27 16:17:18 1429

原创 (超简单、超易懂、超详细)算法精讲(五十五): 梯度下降算法

梯度下降算法是一种常用的优化算法,用于求解目标函数的最小值。它的基本思想是通过不断迭代调整参数的值,以使目标函数的值趋于最小。具体来说,梯度下降算法是通过计算目标函数在当前参数值处的梯度(即偏导数),并根据梯度的方向和大小来更新参数的值。更新的过程可以通过以下公式表示:其中,θ表示参数的值,α表示学习率(即每次参数更新的步长),∇J(θ)表示目标函数在当前参数值处的梯度。

2024-06-26 19:10:58 903

原创 (超简单、超易懂、超详细)算法精讲(五十四): 期望最大化算法

期望最大化算法(Expectation-Maximization algorithm,简称EM算法)是一种迭代优化算法,用于在给定隐变量的情况下,估计模型参数的最大似然估计。EM算法的基本思想是通过迭代的方式,不断地求解两个步骤:E步和M步。在E步中,根据当前的参数估计值,计算隐变量的期望值;在M步中,根据E步计算得到的隐变量的期望值,求解出新的参数估计值。不断重复这两个步骤,直到参数收敛为止。具体来说,假设我们要估计一个包含隐变量的概率模型参数θ。

2024-06-26 18:58:32 674

原创 (超详细,超易懂)设计模式(六):单例模式,猴子八戒争蟠桃,唐僧建议共分享

单例模式是一种设计模式,它限制一个类只能创建一个实例,确保在全局范围内都能通过该实例访问该类的唯一对象。在单例模式中,类的构造方法是私有的,这意味着不能通过 new 关键字来创建类的实例。而是通过一个静态方法获取该类的唯一实例。单例模式的实现可以有多种方式,常见的有饿汉式、懒汉式、双重校验锁等。不同的实现方式有不同的优缺点,需要根据具体情况选择合适的方式。

2024-06-26 18:26:24 901

原创 (超简单、超易懂、超详细)算法精讲(五十三): 遗传算法

首先,需要定义一个目标函数,确定要解决的优化问题。这个函数可以是任何需要优化的问题,比如函数最大化或最小化、组合优化问题等。在这里,我们以一个简单的二进制字符串最大化问题为例进行讲解。

2024-06-26 14:31:22 1077

原创 (超简单、超易懂、超详细)算法精讲(五十二): 模拟退火算法

模拟退火算法是一种用于求解优化问题的随机算法。它的思想来源于金属冶炼过程中的退火过程,在金属冷却过程中,通过控制温度和冷却速度,可以使金属达到更稳定的状态。模拟退火算法模拟了这个退火过程,通过在解空间中搜索,逐渐接受更差解以避免陷入局部最优解,最终找到全局最优解或近似最优解。模拟退火算法的关键是控制退火过程中的温度降低速度和接受新解的概率。温度的降低速度决定了算法搜索空间的探索程度,过快的降温会导致陷入局部最优解,而过慢的降温会导致搜索时间过长。

2024-06-26 13:57:46 1189

原创 (超简单、超易懂、超详细)算法精讲(五十一): 佩林噪声算法

佩林噪声算法(Perlin noise algorithm)是一种生成连续、无缝、自然随机纹理的算法。它由肯尼斯·佩林(Ken Perlin)在1983年提出,主要应用于计算机图形学和模拟领域。佩林噪声算法通过在三维网格中生成一系列随机值,然后对这些值进行插值,从而产生具有连续性和自然感的噪声。:首先,在三维空间中生成一个网格,网格的每个节点都有一个随机向量。:对网格中的每个节点,计算其梯度向量,该向量为一个单位向量,指向一个随机方向。

2024-06-25 23:43:40 1028

原创 (超简单、超易懂、超详细)算法精讲(五十): Boyer-Moore算法

Boyer-Moore算法是一种用于串匹配的字符串查找算法,能够在最坏情况下以线性时间复杂度进行匹配。它通过在模式串中的字符比较中利用已匹配的信息,从而实现快速的匹配。Boyer-Moore算法的主要思想是从模式串的末尾开始向前匹配,将模式串与目标串逐个字符进行比较,并根据比较结果进行跳跃。具体来说,算法分为两个阶段:预处理阶段和匹配阶段。在预处理阶段,算法预先计算出每个字符在模式串中出现的最右位置,并根据这些信息生成两个跳跃表:坏字符规则表和好后缀规则表。

2024-06-25 23:11:43 626

原创 (超简单、超易懂、超详细)算法精讲(四十九): 布雷森汉姆直线算法

布雷森汉姆直线算法是一种用于计算两点之间直线的算法。它是一种数字化的算法,也被称为整数直线算法。该算法使用了一种称为“整数增量法”的方法来计算直线的像素。它从起点到终点的每个像素位置都使用整数坐标进行计算,避免了浮点数运算。算法的核心思想是通过计算直线在水平和垂直方向上的步长来确定下一个像素的位置。根据斜率和起点与终点之间的差异,算法中的步长可能是1或-1。布雷森汉姆直线算法具有高效和精确的特点。它可以用于绘制直线、画线段、线框和边界等应用。

2024-06-25 22:57:19 679

原创 (超简单、超易懂、超详细)算法精讲(四十八): 快速傅立叶变换算法

快速傅立叶变换(Fast Fourier Transform,FFT)是一种高效的计算离散傅立叶变换(Discrete Fourier Transform,DFT)的算法。傅立叶变换是一种将信号从时域转换到频域的方法,用于分析信号的频率成分。FFT算法利用了离散傅立叶变换的对称性和周期性,通过将原始信号分解为多个较小规模的DFT并组合求解,从而大大降低了计算复杂度。具体来讲,FFT算法的步骤如下:将输入信号序列分为偶数索引和奇数索引两部分,分别进行FFT。

2024-06-25 20:09:02 644

原创 (超简单、超易懂、超详细)算法精讲(四十七): PageRank算法

PageRank算法是由Google公司创始人之一拉里·佩奇(Larry Page)提出的一种网页排序算法。它是一种基于链接分析的算法,用于评估网页的重要性和权威性。PageRank算法的核心思想是基于互联网中网页之间的链接关系,根据一个网页被其他重要网页链接的数量和质量来评估该网页的重要性。具体而言,一个网页的PageRank值是由其他网页链接到该网页的数量和质量来决定的,而链接到该网页的网页的PageRank值也会影响该网页的PageRank值。

2024-06-25 18:52:12 622

原创 (超简单、超易懂、超详细)算法精讲(四十六): 迪菲-赫尔曼密钥交换算法

迪菲-赫尔曼(Diffie-Hellman)密钥交换算法是一种用于在公共网络上安全地交换密钥的算法。它是由惠特菲尔德·迪菲(Whitfield Diffie)和马丁·赫尔曼(Martin Hellman)在1976年提出的。迪菲-赫尔曼算法基于离散对数问题,它的主要思想是利用一个公开的素数模数和一个生成元,通过交换各自的部分秘密参数来生成一个共享的密钥。两个参与者可以在不泄露各自私钥的情况下,通过交换公开参数来计算出相同的共享密钥。

2024-06-25 18:35:04 1131

原创 (超详细,超易懂)设计模式(五):原型模式,猴子太调皮,竟然能变身八戒

原型模式(Prototype Pattern)是一种创建型设计模式,它允许在运行时复制对象,而不需要重新实例化。当创建一个对象的过程比较复杂或者耗费资源较多时,可以使用原型模式来提高创建对象的效率。在原型模式中,我们创建一个原型对象,然后通过复制这个原型对象来创建新的对象。原型对象通常是一个已经初始化好的对象,我们可以通过复制这个对象来快速创建新的对象,而不需要重新执行初始化的过程。

2024-06-25 18:15:13 1301

原创 (超简单、超易懂、超详细)算法精讲(四十五): RSA加密算法

RSA加密算法是一种非对称加密算法,其中RSA是由三位数学家(Ron Rivest、Adi Shamir和Leonard Adleman)的名字命名的。RSA算法使用两个密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。RSA算法的核心是。该难题是指将一个大数分解为其质数因子的过程,在当前计算机技术下,对于非常大的数,该过程是非常时间复杂度的。因此,RSA算法的安全性基于该因数分解问题的难解性。在RSA加密算法中,公钥是由两个数构成的:模数和公钥指数。

2024-06-25 17:07:30 1957

原创 (超简单、超易懂、超详细)算法精讲(四十四): LZW压缩算法

LZW(Lempel-Ziv-Welch)压缩算法是一种无损压缩算法,用于将数据文件压缩为较小的文件。它由雅各布·泽夫(Jacob Ziv)和阿伦·韦尔奇(Terry Welch)于1977年提出。LZW算法的核心思想是利用数据中存在的重复模式来进行压缩。它通过建立一个字典来存储已经出现的模式,并将每个模式映射到一个独特的编码。初始字典通常包含所有可能的单个字符。在压缩过程中,LZW算法逐步读取数据并将已经出现的模式添加到字典中。

2024-06-25 16:53:41 1104

原创 (超简单、超易懂、超详细)算法精讲(四十三):施特拉森矩阵乘法

施特拉森矩阵乘法是一种用于计算两个矩阵乘积的算法。它通过将原始矩阵划分为四个子矩阵,并使用递归的方式计算乘积。施特拉森矩阵乘法算法的基本思想是将矩阵乘法问题转化为更小规模的子问题,并利用这些子问题的解来计算原始问题的解。具体来说,施特拉森矩阵乘法算法的步骤如下:将两个待乘矩阵 A 和 B 分别划分为四个子矩阵 A11、A12、A21 和 A22,以及 B11、B12、B21 和 B22。

2024-06-25 16:39:42 587

原创 (超简单、超易懂、超详细)算法精讲(四十二):卡拉次巴乘法

卡拉次巴乘法(Karatsuba算法)是一种快速的大数乘法算法,由安德烈·阿列克谢耶维奇·卡拉次巴于1960年提出。传统的乘法算法是将两个大数按位相乘,然后进行进位运算得到结果。而卡拉次巴乘法算法则利用了“分治”的思想,通过将大数分解为更小的部分,减少了乘法的次数,从而提高了算法的效率。具体来说,卡拉次巴乘法将两个大数分别拆分为高位和低位两个部分,然后利用公式来计算乘法结果。其中 a、b、c、d 分别表示大数的高位和低位部分,n 表示大数的位数一半的位置。

2024-06-25 14:57:19 937

原创 (超简单、超易懂、超详细)算法精讲(四十一): 最小生成树之Prim算法和Kruskal算法

最小生成树算法是解决连通图中找出最小权重生成树的问题的一类算法,其中最著名的算法是Prim算法和Kruskal算法。Prim算法是一种贪心算法,从一个起始节点开始,逐步选择与当前生成树最近且权值最小的边,将该边加入到生成树中,并将该节点标记为已访问,然后继续在已访问的节点集合中寻找下一个满足条件的边,直到所有的节点都被访问到。Kruskal算法是一种基于边的贪心算法,它首先将所有的边按照权重从小到大排序,然后从权重最小的边开始,逐步将边加入生成树中,但要保证生成树不形成环路,直到生成树包含了所有的节点。

2024-06-25 14:41:04 1039

原创 (超简单、超易懂、超详细)算法精讲(四十): 背包问题

背包问题通常有两种形式,一种是01背包问题,即每种物品只能选择取或不取;另一种是完全背包问题,即每种物品可以选择取多次。在解决问题之前,需要明确问题的具体形式。

2024-06-24 21:03:11 771

原创 (超简单、超易懂、超详细)算法精讲(三十九): 编辑距离算法

编辑距离算法(Edit Distance Algorithm)是一种用于衡量两个字符串之间相似度的算法。它衡量的是从一个字符串转换到另一个字符串所需的最小操作次数。编辑距离算法的思想是通过计算进行这些编辑操作的最小次数来确定两个字符串之间的相似度。较小的编辑距离表示两个字符串越相似。编辑距离算法的应用非常广泛。例如,在自然语言处理中,编辑距离算法可以用于拼写纠错和文本相似度计算。在生物信息学中,编辑距离算法可以用于比较DNA序列的相似性等。

2024-06-24 20:47:04 1039

原创 (超简单、超易懂、超详细)算法精讲(三十八): 硬币找零算法

使用动态规划算法实现了硬币找零。首先创建一个长度为amount+1的数组dp,用来保存每个金额需要的最小硬币数。将数组初始化为一个无法达到的最大值。然后,将dp[0]初始化为0,因为找零金额为0时不需要硬币。接着,通过两次循环遍历所有硬币和金额的组合,计算每个金额需要的最小硬币数。在内层循环中,我们通过比较当前金额减去当前硬币面值后的金额需要的硬币数和当前金额需要的硬币数,来更新最小硬币数。最后,如果最终找不开零钱,则返回-1;否则返回dp[amount]即最小硬币数

2024-06-24 20:25:55 555

原创 计算机相关专业是否仍是“万金油”的选择?我有话说!

就业前景广阔:计算机行业一直以来都是高薪、高就业率的行业,毕业生就业率非常高。薪水较高:计算机专业毕业生通常可以获得较高的起薪,并有较好的晋升空间。技术更新快:计算机行业的技术发展迅速,每年都会涌现出新的技术和工具,使得从业人员具备学习和应用新技术的机会。创业机会广泛:计算机专业人员有很多创业的机会,可以自主开发和设计软件、网站和应用程序。工作稳定性高:计算机专业是一个稳定的行业,需求量大,因此工作稳定性较高。

2024-06-24 19:13:35 606

原创 (超简单、超易懂、超详细)算法精讲(三十七): 矩阵链乘法算法

矩阵链乘法算法是用来计算多个矩阵相乘的最优顺序的算法。在矩阵相乘的计算中,矩阵的乘法顺序可以影响到计算的效率。如果矩阵相乘的顺序选择合理,可以减少计算的次数,提高计算的效率。矩阵链乘法算法的基本思想是动态规划。假设要计算n个矩阵相乘的最优顺序,将这n个矩阵分为两部分,左边的部分由i个矩阵相乘,右边的部分由n-i个矩阵相乘。根据矩阵相乘的性质,左边部分的结果矩阵的维度为m * p,右边部分的结果矩阵的维度为p * q,两部分相乘得到的结果矩阵的维度为m * q,计算的次数为m * p * q。

2024-06-24 18:28:55 899

原创 (超简单、超易懂、超详细)算法精讲(三十六): 切割钢条算法

切割钢条算法是一个经典的动态规划问题。给定一根长度为n的钢条和一个价格表,其中给出了不同长度的钢条对应的价格,目标是找到切割方案,使得切割后的钢条总价格最大。假设价格表为p[i] (1 ≤ i ≤ n),则切割钢条的最大收益可以通过递归地解决子问题来求解。我们假定将钢条切割成长度为i和n-i两段,则切割方案的最大收益为p[i] + max(revenue(n-i)),其中revenue(k)表示长度为k的钢条的最大收益。具体的切割钢条算法可以使用自顶向下或自底向上的方法来实现。

2024-06-24 16:39:32 1013

原创 (超简单、超易懂、超详细)算法精讲(三十五):斐波那契序列

斐波那契序列(Fibonacci sequence)是指这样的一个数列:0、1、1、2、3、5、8、13、21、34...,在数学上,斐波那契序列是以递归的方法定义的,即:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2)(n≥2)。斐波那契序列以其独特的规律性质而闻名,每个数都是前两个数的和。这个数列最早由意大利数学家斐波那契(Leonardo Fibonacci)在13世纪初提出并应用于比例问题,后来被广泛研究和应用于各个领域,如经济学、物理学、计算机科学等。

2024-06-24 16:25:37 728

原创 (超简单、超易懂、超详细)算法精讲(三十四):米勒-拉宾素性测试

米勒-拉宾素性测试,又称为素性检测,是一种用于确定一个数是否为素数的简便算法。该算法由加里·米勒和迈克尔·拉宾在1980年提出。该算法基于费马定理和威尔逊定理,通过随机选择一个数作为证据来判断待测数是否为合数。如果待测数经过多次测试都被判定为素数,则有很大的概率确实为素数。米勒-拉宾素性测试的时间复杂度为O(k log^3(n)),其中k是测试次数。该算法在实践中已被广泛应用于判断大数的素性。

2024-06-24 16:13:10 980

原创 (超简单、超易懂、超详细)算法精讲(三十三):费马小定理

费马小定理是一个在数论中常用的定理,它可以用来快速求解大数取余的问题。费马小定理的表述如下:如果p是一个素数,a是一个整数且a不是p的倍数,那么a^(p-1)模p的结果等于1。利用费马小定理,我们可以在求解大数取余的过程中,将指数进行简化,从而减少计算量。具体算法如下:将底数a和模数p取余,得到a mod p。如果p是一个素数,计算a^(p-1) mod p。根据费马小定理,结果应该是1。

2024-06-24 15:01:39 665

原创 (超简单、超易懂、超详细)算法精讲(三十二): 埃拉托斯特尼算法

埃拉托斯特尼算法,又称埃氏筛法,是一种用于找出一定范围内所有素数的算法。它由古希腊数学家埃拉托斯特尼(Eratosthenes)发明,并被广泛应用于数论中。该算法的基本思想是:首先,将2到n范围内的所有数标记为素数,然后从最小的素数开始,将它的倍数标记为合数,再将下一个未被标记的数作为新的素数,并重复这个过程,直到所有的数都被标记为合数或者素数。具体实现时,可以使用一个长度为n+1的布尔数组来表示数字是否为素数,初始时将数组中的所有元素标记为true。

2024-06-24 14:49:51 829

原创 (超简单、超易懂、超详细)算法精讲(三十一): 欧几里得算法

欧几里得算法,也称为辗转相除法,是一种用于计算两个数的最大公约数(GCD)的算法。这个算法可以追溯到公元前300年的希腊数学家欧几里得。算法的基本思想是通过反复地用一个数除以另一个数,然后用余数代替较大的数,直到余数为0时停止。最后被除数就是两个数的最大公约数。欧几里得算法的优点是简单而有效,时间复杂度为O(log(max(a,b))),其中a和b分别是两个输入数的大小。这使得它在计算两个数的最大公约数时非常高效。

2024-06-24 14:36:09 1251

原创 (超简单、超易懂、超详细)算法精讲(三十): 最长公共子序列算法

最长公共子序列(Longest Common Subsequence)算法是用来找出两个序列中最长的相同子序列的算法。子序列是指从原序列中按照顺序挑选出来的元素,不要求连续。最长公共子序列算法的基本思想是动态规划。给定两个序列X和Y,我们定义一个二维数组dp[m][n],其中dp[i][j]表示序列X的前i个元素和序列Y的前j个元素的最长公共子序列的长度。当i=0或j=0时,dp[i][j]为0,因为一个序列的前0个元素与另一个序列的任意个元素的公共子序列为空。

2024-06-24 14:19:08 971

C#设计模式之原型模式实例:大师兄太调皮,竟然变身二师兄

如果你也喜欢C#开发或者.NET开发,可以关注我,我会一直更新相关内容,并且会是超级详细的教程,只要你有耐心,基本上不会有什么问题,如果有不懂的,也可以私信我加我联系方式,我将毫无保留的将我的经验和技术分享给你,不为其他,只为有更多的人进度代码的世界,而进入代码的世界,最快捷和最容易的就是C#.NET,准备好了,就随我加入代码的世界吧! 在原型模式中,有以下几个角色: 抽象原型类(Prototype):它是声明克隆方法的接口,是所有具体原型类的公共父类,它可以是抽象类,也可以是接口,甚至可以是具体实现类。 具体原型类(ConcretePrototype):它是实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。 客户类(Client):让一个原型对象克隆自身从而创建一个新的对象,只需要直接实例化或通过工厂方法等方式创建一个原型对象,再通过调用该对象的克隆方法即可得到多个相同的对象。 实例背景: 悟空七十二变,变身二师兄 文件包含:MonkeyLibrary、SunWuKongLibrary、Transformation等。

2024-06-25

C#设计模式之建造者模式实例:各大佬打造取经人,观音找到光头的唐三藏和中分的悟空

 如果你也喜欢C#开发或者.NET开发,可以关注我,我会一直更新相关内容,并且会是超级详细的教程,只要你有耐心,基本上不会有什么问题,如果有不懂的,也可以私信我加我联系方式,我将毫无保留的将我的经验和技术分享给你,不为其他,只为有更多的人进度代码的世界,而进入代码的世界,最快捷和最容易的就是C#.NET,准备好了,就随我加入代码的世界吧! 在建造者模式中,有以下几个角色: 产品(Product):表示被构建的复杂对象。通常包含多个部分或组件。 抽象建造者(Builder):定义构建产品的抽象接口,包含创建和组装产品的方法。 具体建造者(Concrete Builder):具体实现抽象建造者接口,实现产品的构建步骤,并返回最终构建的产品。 指挥者(Director):负责安排具体建造者的构建步骤 实例背景: 西游各大佬觉得安排一组取经人去西天取经,在西天灵山的会议中,一致决定:由太上老君、玉皇大帝、王母娘娘和如来佛祖,各打造一个取经人,要求取经人拥有武器等属性,最后由观音管理取经人,使用建造者模式进行实现。 文件包含:BodhisattvaLibrary、XitianLibrary等。

2024-06-24

(超详细,超易懂)设计模式(三):抽象工厂模式,灵山派系谁上位

抽象工厂模式由以下几个角色组成: 抽象工厂(AbstractFactory):定义了一组创建产品的抽象方法。 具体工厂(ConcreteFactory):实现了抽象工厂定义的抽象方法,用于创建具体产品的实例。 抽象产品(AbstractProduct):定义了产品的抽象方法。 具体产品(ConcreteProduct):实现了抽象产品定义的抽象方法,具体的产品。         使用抽象工厂模式时,首先需要定义一组相关的产品抽象方法,然后实现这些抽象方法的具体产品类。接下来定义一个抽象工厂接口,其中声明了一组用于创建产品的抽象方法。最后,编写具体的工厂类,实现抽象工厂接口,并根据需要创建具体的产品对象。 上传的代码文件详细: 1、抽象产品文件夹包含定义抽象产品:佛祖和菩萨的输出接口; 2、具体产品文件夹包含佛祖和菩萨的接口实现:分别是观音菩萨类、文殊菩萨类、如来佛祖类、燃灯古佛类; 3、抽象工厂文件夹包含一个抽象工厂接口:灵山大集团; 4、具体工厂文件夹则包含两个派系的具体实现;

2024-06-23

(超详细,超易懂)设计模式(二):工厂方法模式,取经团队需要猴子的实践

 如果你也喜欢C#开发或者.NET开发,可以关注我,我会一直更新相关内容,并且会是超级详细的教程,只要你有耐心,基本上不会有什么问题,如果有不懂的,也可以私信我加我联系方式,我将毫无保留的将我的经验和技术分享给你,不为其他,只为有更多的人进度代码的世界,而进入代码的世界,最快捷和最容易的就是C#.NET,准备好了,就随我加入代码的世界吧!         工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化的类是哪一个。工厂方法模式将对象的实例化延迟到子类中进行。 工厂方法模式的实现步骤可以参考我的博客,我们以取经团队需要一只猴子的加入为例,代码有详细的注释。

2024-06-22

(超详细,超易懂)设计模式(一):简单工厂模式,太上老君八卦炉的实践

如果你也喜欢C#开发或者.NET开发,可以关注我,我会一直更新相关内容,并且会是超级详细的教程,只要你有耐心,基本上不会有什么问题,如果有不懂的,也可以私信我加我联系方式,我将毫无保留的将我的经验和技术分享给你,不为其他,只为有更多的人进度代码的世界,而进入代码的世界,最快捷和最容易的就是C#.NET,准备好了,就随我加入代码的世界吧!简单工厂模式是一种创建型设计模式,主要用于根据不同的条件创建不同的对象。在C#中,简单工厂模式可以通过一个静态方法来实现。 首先,我们需要定义一个接口,表示要创建的对象的共同功能。例如,西游中太上老君会练丹、练器等等,那我们现在想让老君给我们练兵器,上传的案例中有详细的描述和相关文件。

2024-06-22

VS最新2022安装器,无视域名限制,有网络就能安装

如果安装过程中有问题,也可以在评论区或者私信告诉我,教你如何解决; 注意: 1、安装到98%的时候可能会速度变慢,甚至进度条也不会动了,但是不用着急,等待是有好结果的; 2、最新版本放弃了低版本的Core支持,高版本支持NET6和NET8; 3、安装前最好是能将系统更新一下,以防止系统版本不支持; 本人系统安装了完整版的企业版和专业版,不受任何限制,可以同时安装两个版本,如果你也喜欢C#开发或者.NET开发,可以关注我,我会一直更新相关内容,并且会是超级详细的教程,只要你有耐心,基本上不会有什么问题,如果有不懂的,也可以私信我加我联系方式,我将毫无保留的将我的经验和技术分享给你,不为其他,只为有更多的人进度代码的世界,而进入代码的世界,最快捷和最容易的就是C#.NET,所以有想法你就来吧,我的 博客教程都是基于该安装器安装的所有扩展程序,准备好了,就随我加入代码的世界吧!

2024-06-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除