分类目录归档:算法

遗传算法-


遗传算法(Genetic Algorithm, GA)是一种基于自然选择和遗传机制的优化搜索算法,常用于解决复杂的优化问题。它模拟生物进化中的选择、交叉(重组)、变异等过程,逐步优化解的质量。

核心概念

  1. 个体(Individual):表示问题的一个潜在解,通常用染色体编码。
  2. 种群(Population):由多个个体组成的集合,代表当前解的集合。
  3. 适应度函数(Fitness Function):评估个体优劣的函数,适应度越高,解越好。
  4. 选择(Selection):根据适应度选择优秀个体进入下一代。
  5. 交叉(Crossover):通过组合两个父代个体的基因生成新个体。
  6. 变异(Mutation...

Read more

算法合集-时间序列数据预测


时间序列数据预测是数据科学和机器学习中的一个重要领域,广泛应用于金融、气象、能源、交通等领域。以下是一些常用的时间序列预测算法合集:

1. 传统统计方法

  • ARIMA (AutoRegressive Integrated Moving Average)
    • 适用于线性时间序列数据。
    • 包含自回归(AR)、差分(I)和移动平均(MA)三个部分。
    • 需要手动选择参数 (p, d, q)。
  • SARIMA (Seasonal ARIMA)
    • ARIMA 的扩展,适用于具有季节性成分的时间序列。
    • 包含季节性参数 (P, D, Q, m)。
  • Exponential Smoothing (指数平滑)
    • 适...

Read more

分类算法-


分类算法简介

分类算法是机器学习和数据挖掘领域中一类非常重要的算法,其主要目的是根据输入数据的特征,将其划分到不同的类别中。简单来说,就是教会计算机如何像人一样对事物进行归类。

例如,在判断一封电子邮件是正常邮件还是垃圾邮件时,分类算法可以通过分析邮件中的文字内容、发件人信息、邮件主题等特征,做出相应的归类;或者判断一张图片上的动物是猫还是狗,也是基于图像的诸多特征利用分类算法来完成分类。

常见的分类算法类型

  • 决策树算法 决策树以树状结构来呈现决策过程,就像是一棵倒立的树,从根节点开始,根据不同的属性条件不断进行分支判断,最终到达叶子节点得出分类结果。例如,要判断一个水果是苹果还是橙...

Read more

算法刷题-心得


刷题第一阶段:我智商有问题, 第二阶段:我简历有问题,第三阶段:500道题后对技术面试信心建立了,第四阶段:开始注意行为面试问题,第五阶段:offer开始来了,第六阶段: 你开始选择公司了,第六阶段:刷题不要停,因为你随时会被解雇。

Read more

空瓶子-算法


import sys


def drink_soda(n):
    if n == 0:
        exit(0)

    total_drinks = 0
    empty_bottles = n

    while empty_bottles >= 3:
        drinks = empty_bottles // 3
        total_drinks += drinks
        empty_bottles = empty_bottles % 3 + drinks
    if empty_bottles == 2:
        tot...

Read more

搜索-算法


搜索算法是用于在给定数据集中查找目标元素或满足特定条件的元素的算法。常见的搜索算法有以下几种:

  1. 顺序搜索(Sequential Search):逐个遍历数据集,依次比较每个元素与目标元素是否匹配,时间复杂度为O(n)。

  2. 二分搜索(Binary Search):针对有序数据集,在每次比较中将数据集一分为二,通过比较中间元素与目标元素的大小关系确定下一步搜索的方向,时间复杂度为O(log n)。

  3. 插值搜索(Interpolation Search):针对有序数据集,根据目标元素与数据集的最大值和最小值之间的比例来估计目标元素的位置,从而优化搜索效率,时间复杂度取决于数据分布情况,...

Read more

接雨水-题目-算法


"接雨水"问题是一个经典的算法问题,通常也称为Trapping Rain Water。这个问题描述如下:给定n个非负整数表示一系列宽度为1的墙,计算这些墙围成的容器能够容纳多少水。

解决这个问题的常见算法是利用双指针或者栈来进行处理。以下是一种基于双指针的解法:

  1. 使用两个指针left和right分别指向数组的两端。
  2. 初始化变量leftMax和rightMax为0,用来表示左侧和右侧的最大高度。
  3. 当left <= right时,进行循环:
  4. 如果height[left] < height[right],则判断当前height[left]是否小于等于leftMax,如果是,则可以...

Read more