高效滚动最大和最小窗口

2024-06-25

我想有效地计算滚动最大值和最小值。这意味着比每次窗口移动时从使用的所有值重新计算最大值/最小值更好。

这里有一篇文章问了同样的问题,有人发布了一个涉及某种堆栈方法的解决方案,据说该方法是根据其评级来工作的。然而我这辈子都找不到它了。

在寻找解决方案或帖子时提供任何帮助将不胜感激。谢谢你们!


您要使用的算法称为上升最小值 (C++实现) http://people.cs.uct.ac.za/~ksmith/articles/sliding_window_minimum.html#sliding-window-minimum-algorithm.

要在 C# 中执行此操作,您需要获得双端队列 http://en.wikipedia.org/wiki/Deque类,并且 NuGet 上存在一个好的类,其名称为尼托·德克 http://nuget.org/packages/Nito.Deque/.

我已经使用 Nito.Deque 编写了一个快速的 C# 实现,但我只是简单地检查了它,并且是凭自己的想法完成的,所以它可能是错误的!

public static class AscendingMinima
{
    private struct MinimaValue
    {
        public int RemoveIndex { get; set; }
        public double Value { get; set; }
    }

    public static double[] GetMin(this double[] input, int window)
    {
        var queue = new Deque<MinimaValue>();
        var result = new double[input.Length];

        for (int i = 0; i < input.Length; i++)
        {
            var val = input[i];

            // Note: in Nito.Deque, queue[0] is the front
            while (queue.Count > 0 && i >= queue[0].RemoveIndex)
                queue.RemoveFromFront();

            while (queue.Count > 0 && queue[queue.Count - 1].Value >= val)
                queue.RemoveFromBack();

            queue.AddToBack(new MinimaValue{RemoveIndex = i + window, Value = val });

            result[i] = queue[0].Value;
        }

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

高效滚动最大和最小窗口 的相关文章

  • MVC。网络错误:初始化字符串的格式不符合从索引 0 开始的规范

    我的连接字符串是
  • HTML 文档

    有没有一个工具可以从 VS2010 生成的 XML 文档文件生成 HTML 页面 我在谷歌上搜索了这样的工具 但没有找到 我下载并安装了SandCastle 但我不明白如何使用它 尝试使用Sandcastle 帮助文件生成器 http sh
  • 在 2 个 .c 文件之间共享函数

    dir1有dir2 file1 c和file1 h dir2 有 file2 c 现在 如果我想在 file2 c 中访问 file1 c 中定义的函数 我需要在 file1 h 中声明它并在 file2 c 中包含 file1 h 这是一
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 指向指针的指针和指向二维数组的指针之间的区别

    如果我有一个二维数组 B 定义为 int B 2 3 1 3 5 2 4 6 Is int p B与 一样int p 3 B int f B printf d f 1 gives 5作为输出 同时printf d f 给出 1 作为答案 为
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 在 C/C++ 中绘制填充椭圆的简单算法

    在SO上 找到了以下绘制实心圆的简单算法 for int y radius y lt radius y for int x radius x lt radius x if x x y y lt radius radius setpixel
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • MVVM 同步集合

    是否有一种标准化方法可以将 Model 对象集合与 C 和 WPF 中匹配的 ModelView 对象集合同步 我正在寻找某种类 可以使以下两个集合保持同步 假设我只有几个苹果 并且可以将它们全部保存在内存中 换句话说 我想确保如果我将 A
  • 如果 .txt 文件不存在,则创建一个,如果存在则追加新行

    我想创建一个 txt 文件并写入它 如果该文件已经存在 我只想添加更多行 string path E AppServ Example txt if File Exists path File Create path TextWriter t
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • 解析通过asp:FileUpload上传的XML文件

    我有一个场景 用户将上传 XML 文件 我想将该文件添加到数据库中的表中 不过 困难的部分是我需要解析文件 然后将一些信息添加到一些不同的表中 显示如何获取 XML 文件的每个示例都使用 URI 来获取文件 但是如何直接从数据库获取文件 或
  • 如何“全局”捕获对象实例中引发的异常

    我目前正在编写一个 winforms 应用程序 C 我正在使用企业库异常处理块 遵循我所看到的相当标准的方法 IE 在 Program cs 的 Main 方法中 我已将事件处理程序连接到 Application ThreadExcepti
  • 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

    我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件 通过 base64 字符串上传 并将它们存储到 blob 中 现在效果很好 接下来 我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中 我决定使用
  • 是否有理由为什么用 XmlInclude 修饰的基类在序列化时仍然会抛出类型未知的异常?

    我将简化代码以节省空间 但所提供的内容确实说明了核心问题 我有一个类 它的属性是基类型 有 3 个派生类可以分配给该属性 如果我将任何派生类分配给容器并尝试序列化容器 XmlSerializer 会抛出可怕的错误 类型 x 不是预期的 使用
  • 由于表扫描,表值参数的性能较低

    我有一个将参数传递给 SQL 过程的应用程序 其中一个参数是表值参数 其中包含要包含在 where 子句中的项目 因为当我将 TVP 连接到具有 200 万行的表时 表值参数没有附加任何统计信息 所以查询速度非常慢 我还有什么选择 同样 目
  • 64 位随机生成器种子

    我目前正在运行一个具有 8 个以上管道 线程 的多线程模拟应用程序 这些管道运行非常复杂的代码 该代码取决于种子生成的随机序列 然后该序列被归结为单个 0 1 我希望在将种子从主线程传递到处理管道后 这种 随机处理 具有 100 的确定性
  • RC4 实现与 openssl 输出不匹配

    我的目标是在 C C 中实现 RC4 流密码 并确保它产生与使用时相同的输出openssl命令 按照伪代码维基百科 https en wikipedia org wiki RC4 该实现似乎有效 因为它可以加密和解密内容 但是 加密的输出与
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐

  • 将字符串转换为可绘制对象

    我想发出一个通知 在状态栏中显示一个图标 到目前为止一切顺利 但实际上我希望这个图标是一个 3 个字符的字符串 所以我的问题是 有没有办法将我的字符串转换为Drawable将其显示为状态栏中的图标 编辑 我最近发现了一个具有类似功能的应用程
  • 生成所有尺寸的android图标[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道 是否有任何工具可以生成所有尺寸的 android 图标 如 hdpi lpdi xxhdpi
  • 有没有办法让 saveAll() 删除无关的对象?

    我的主机对象有许多与其关联的选项对象 在编辑表单中 用户可以选择 取消 选择选项并保存新的关联集 这是通过对发布的数据使用 saveAll 来实现的 结果是 主机 主 对象已更新 更新先前关联和新关联中包含的选项 关联 对象 并且 将创建未
  • Objective-C 中的前向声明枚举

    我在 Objective C 程序中的枚举可见性方面遇到问题 我有两个头文件 其中一个定义了typedef enum 另一个文件需要使用typedef d type 在直C中 我会简单地 include另一个头文件 但在 Objective
  • 如何消除错误 服务无效 请检查您的设置并尝试

    我一直在努力工作 一切都很顺利 只是突然间 当我尝试构建我的项目时 我在 xCode 中收到以下错误 1 在构建时的警报框中 服务无效 请检查您的设置并重试 0xE8000022 只需重新启动您的 iPod 或 iPhone 即可
  • const_cast 的奇怪行为[重复]

    这个问题在这里已经有答案了 考虑以下代码 我声明了一个新的引用端 通过 const cast 将其分配给 a 值 然后我只需增加参考值打印地址和值 include
  • 如何在iis上部署React Next.JS?

    我有一个带有 Next Js 的 React Web 应用程序 我想将其上传到我的 IIS ftp 上 我应该复制 next 文件夹吗 如果是 为什么我在这种情况下会出错 错误截图 您可以在服务器上创建一个本地主机并将请求重定向到该本地主机
  • splice() 不更新 knockout.js 中数组的项目顺序

    继之前的帖子 https stackoverflow com questions 10258086 how do i swap two items in an observablearray关于如何更新数组的顺序 我遵循 Michael B
  • getMacAddress() 在 Android 11 中返回 null?如何获取Android 11的mac地址?

    try List
  • 在php中将png合并到多边形上

    我很困惑 我尝试简单地绘制一个多边形并放在上面 就像一个带有透明度的 png 图层一样 没有任何成功 一次背景是黑色的 一次多边形变得不可见 这是我的 php 代码 header Content type image png The png
  • 使用 pandas 覆盖 Excel 列同时保持格式

    我正在使用一个 xlsx 文件 如下所示 我之前的任务是修改名为 Entry 1 和 Entry 2 的列 我已将这些列存储在原始数据帧的单独切片中 以便更好地概览 我将让您快速浏览一下该切片的外观 gt gt gt slice df lo
  • 将 \n 替换为 Sublime Text 中的实际新行

    我该如何更换 n在 Sublime Text 中 真正的编辑器显示新行 如下所示 foo nbar becomes foo bar 当我查看编辑器中的文件时 Turn on Regex Search and Replace icon mos
  • 将布尔值转换为整数值php

    PHP 是否有任何内置函数可以接受布尔值并返回其等效整数 0 代表假 1 代表真 当然 您可以轻松创建一个函数来执行此操作 我只是问 PHP 内部是否有内置函数 我已经尝试过了intval 并将其投射到 int 但它们不起作用 在 TRUE
  • ReSharper 和 Rational Team Concert (RTC) - 它们配合得很好吗?

    我最近加入了一个小型开发团队 该团队正在考虑新的版本控制系统 由于它是大型组织的一部分 因此我们很可能采用 Rational Team Concert 的公司标准 我建议他们应该选择更简单的东西 但我可能不会如愿 我主要担心它无法与 ReS
  • Python Celery - 通过 pid 查找任务

    也许是一个非常简单的问题 我经常看到我的系统上运行着一个celery任务进程 但我在使用时却找不到celery task control inspect s active 方法 通常这个进程会运行几个小时 我担心它是某种僵尸 通常它也会消耗
  • 递归分层父子

    我有一个来自数据库的项目集合 该数据库具有parentid值或空 这是我的班级设计 public class Item public int id get set public string Name get set public int
  • 从父节点读取特定叶/子节点的 Firebase 规则

    我的 firebase 数据库看起来像这样 students firebase key 1 Name blah blah Address blah blah Roll No blah blah Marks Sub1 blah Sub2 bl
  • asp.net MVC - 如何通过不同的存储库类共享 SqlConnection 的同一实例

    我正在使用 MVC5 和普通 ADO NET 创建一个新项目 只是作为学习练习 我需要创建一个存储库 用于注册一个模型 其中包含几个也需要同时创建的相关对象以及这些对象反过来可能需要插入其他对象 我能想到的最简单的解决方案是拥有一个庞大的方
  • Puppeteer - 如何获取当前页面(应用程序/pdf)作为缓冲区或文件?

    使用 Puppeteer https github com GoogleChrome puppeteer https github com GoogleChrome puppeteer 我有一个页面是申请 pdf With headless
  • 高效滚动最大和最小窗口

    我想有效地计算滚动最大值和最小值 这意味着比每次窗口移动时从使用的所有值重新计算最大值 最小值更好 这里有一篇文章问了同样的问题 有人发布了一个涉及某种堆栈方法的解决方案 据说该方法是根据其评级来工作的 然而我这辈子都找不到它了 在寻找解决