动态数组的摊销分析【Python也有数组的类似概念比如list】

2023-11-15

我先说一下数组版的动态数组的摊销分析

我先上C++的代码【没有摊销的】吧

【应该都能看懂吧】【即使没学过C和C++】

#pragma once
#include <iostream>
using namespace std;

#define InitSize 10 //顺序表默认的初始长度


typedef struct{
    int *data; //指示动态分配数组的指针
    int MaxSize; //顺序表的当前的最大容量
    int length; //顺序表的当前长度
} SeqList; //顺序表的类型定义(动态分配方式)

// 初始化表。构造一个空的线性表L,分配内存空间。
void InitList(SeqList &L)
{
    L.data = (int*)malloc(InitSize*sizeof(int));

    L.length = 0;

    L.MaxSize = InitSize;

// 规范使用就可以避免垃圾值
// 用函数赋值
    return;
}

void IncreaseSize(SeqList &L,int len)//当len是1的时候
{
    int* p = L.data;
    L.data = (int*)malloc((L.MaxSize+len)*sizeof(int));
    for(int i = 0;i<L.length;i++)
    {
        L.data[i] = p[i];
    }
    L.MaxSize = L.MaxSize+len;
    free(p);

    return;
}

当你创建了一个可以存储上限10个元素的数组时,想要添加第11个数组时,就需要申请新的空间,使用for将原数组的值复制到新数组,然后再释放原数组,这样for里面的执行语句(不包括for里面的判断语句)那么执行了10次

假设我每次增加的数组长度都是1呢??

从1上限变为n上限呢??

那么总的时间是多少呢

1,2,3,4,5...100...1000...n

这是一个等差数列,由等差数列求和公式得出,最后的时间复杂度是指数级的n的平方

这是我们要避免的

那我就要每次增加多少长度呢??

要按几何增长(可以粗略理解为和n(n就是当前的长度上限)有关的增长,比如每次增加的长度都是n,注意n是变量)

如果我每次增加的长度都是当前的长度n呢??

那么总时间复杂度会是怎么样呢

python动态数组和摊销分析_zhisuihen6347的博客-CSDN博客_python动态数组

大小按几何增长
假如当前底层数组大小为c,当底层数组存满时,系统创建新的底层数组,其大小为2c(c的倍数)。我们能够证明这样的机制摊销运行时间为O ( 1 ) O(1)O(1),证明如下:
我们假设底层数组初始大小为c,每次增长原来底层数组的2倍。第一次添加c个元素,其时间复杂度为O ( c ) O(c)O(c),再添加c个元素,其时间复杂度为O ( 2 c ) O(2c)O(2c)(底层数组满时,需要创建数组并将原来的数据存入新数组,时间复杂度为O ( c ) O(c)O(c),再加上之后添加的c个元素,其时间复杂度为O ( 2 c ) O(2c)O(2c)),再添加2c个元素,其时间复杂度为O ( 4 c ) O(4c)O(4c),再添加8c个元素,其时间复杂度为O ( 16 c ) O(16c)O(16c),以此类推。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态数组的摊销分析【Python也有数组的类似概念比如list】 的相关文章

  • 如何使用类似 KDnuggets 风格的 PDF 绘制比较箱线图

    在经历了解 KDnuggets 文章中的箱线图 https www kdnuggets com 2019 11 understanding boxplots html 我找到了带有概率密度函数的箱线图的详细图 pdf 我正在尝试绘制比较箱线
  • pygame中物体的速度?

    我正在编写一个简单的 pygame 程序 仅包含在屏幕上移动一个框 盒子移动得很快 我想知道如何控制速度 在我的代码中 更新后的位置移动了 1 而不是更小 因为如果数字不是整数 就会使事情变得更加复杂 import os sys impor
  • Python/Pandas –– ParserError:标记数据时出错。 C 错误:第 i 行中预期有 x 字段,但看到了 y

    我需要一些帮助 我正在使用以下代码 matplotlib inline import csv from datetime import datetime import numpy as np import pandas as pd from
  • 根据 cron 规范计算下一个计划时间

    在给定当前时间和 cron 规范的情况下 计算事件下一次运行时间的有效方法是什么 我正在寻找 每分钟循环检查是否符合规范 以外的东西 规格示例可能是 每月1日 15日15 01 每小时整点的 10 20 30 40 50 分钟 Python
  • Python setup.py 运行 shell 脚本

    我需要在创建 Python 包时在 sdist 阶段运行我自己的脚本 我写了以下脚本 你知道更好的方法吗 您能否推荐更好的一个或链接到 setuptools 的官方文档 其中已解释了这一时刻 import subprocess import
  • 清理嵌套的 Try/Excepts

    我刚刚编写了一段代码 令我印象深刻的是 它的嵌套程度远远超过了最佳值 我想了解如何改进其风格 特别是使其更符合 扁平优于嵌套 的原则 for app in apps if app split 1 0 zc only look for cro
  • 哪个 Python IDE 可以逐行运行我的脚本?

    我不会称自己为程序员 但我最近开始学习 Python 并且非常喜欢它 到目前为止 我主要将它用于小任务 脚本编写 文本处理 KML 生成和 ArcGIS 根据我使用 R 的经验 使用出色的 Notepad 和NppToR http sour
  • 将行转换为 pandas 中逗号分隔的字符串

    我有一个熊猫数据框 from pandas import DataFrame import pandas as pd df2 DataFrame a one one two two three two one six b x y z y x
  • 我可以使用 Python 访问 ImageMagick API 吗?

    我需要使用图像魔术师 http www imagemagick org script index php因为 PIL 没有我正在寻找的可用图像功能量 但是 我想使用Python python 绑定 PythonMagick 自 2009 年
  • 没有实例的 Django Formset

    In this http docs djangoproject com en dev topics forms modelforms inline formsetsDjango Doc 解释了如何创建一个表单集 该表单集允许您编辑属于特定作
  • Python 字符串格式 - 类型错误 - 格式字符串参数不足

    那么这个字符串有什么问题呢 我无法弄清楚为什么它说格式字符串没有足够的参数 我是 Python 新手 只是想弄清楚 编辑 这与建议的其他问题不同 另一个正在尝试做一些我什至没有涉及的疯狂数组事情 我只需要了解元组的基本概念以及字符串格式化的
  • 无法为从图中加载的张量变量赋值

    我已经训练了一个模型并保存了它 现在 我试图了解权重扰动如何影响其准确性 因此我需要修改权重变量中保存的值 本质上会为其添加一些噪声 问题是加载它们后我无法为它们分配值 我正在使用 TensorFlow 版本 1 2 1 来训练和加载模型
  • 为什么 argparse 给我一个列表中的列表?

    我刚刚注意到 argparse 中的一个行为让我困惑 我猜我以前从未将它用于愚蠢的文件列表 import argparse parser argparse ArgumentParser parser add argument multi a
  • 限制并行工作的线程数量

    我正在创建一个函数 将文件从本地计算机复制到远程创建线程以并行执行 sftp def copyToServer does copy file given host name and credentials for i in hostsLis
  • 安装/编译 pylzma(lzma python 绑定)

    我已经向作者提出了这个问题website http www joachim bauch de projects pylzma comment page 1 comment 5211 但我想我也可以在这里问 我一直在尝试使用以下设置安装 py
  • knitr:python 引擎输出不在 .md 或 .html 中

    当我处理 Rmd 文件时 没有显示 matplotlib img 是否需要块选项或不同的 matplotlib 方法 title Viz Examples output html document keep md true r testpl
  • TensorFlow 的 Print 或 K.print_tensor 不会在损失函数中打印中间张量

    我为 Keras 模型编写了一个相当复杂的损失函数 并且它不断返回nan训练时 因此 我需要在训练时打印中间张量 我知道你不能在损失函数中执行 K eval 因为张量未初始化 不过 我都尝试过K print tensor and tf Pr
  • Pythonlibs3 CMake 和 macOS

    更新2 将以下两行添加到我的 CMake 文件中时 成功找到了 python 3 及其库 这只在终端中工作的原因是因为 CLion 使用其捆绑版本的 CMake 3 6 3 而我的终端使用的更新版本 3 7 2 正确找到了 python F
  • 导入错误:无法导入名称 DependencyWarning

    我正在使用 python 2 7 12 当我做import requests 我看到下面的错误 尝试卸载和安装 requests 也升级 pip 但没有运气 仍然是同样的问题 Python 2 7 12 default Nov 19 201
  • numpy.genfromtxt 生成看起来像元组的数组,而不是二维数组 - 为什么?

    我在跑genfromtxt像下面这样 date conv lambda x str x replace time conv lambda x str x a np genfromtxt input txt delimiter skip he

随机推荐