0

0

在 JavaScript 中使用最小和最大堆管理流数据:数字运动员健康技术视角

WBOY

WBOY

发布时间:2024-08-31 10:36:10

|

420人浏览过

|

来源于dev.to

转载

在 javascript 中使用最小和最大堆管理流数据:数字运动员健康技术视角

数据管理在健康技术中至关重要。无论是跟踪运动员的表现指标还是监控运动员的恢复时间,有效地组织数据都可以对洞察的获取方式产生重大影响。在这种情况下管理数据的一种强大工具是堆,特别是最小堆和最大堆。在这篇文章中,我们将使用与运动员数据管理相关的实际示例,探索如何在 javascript 中实现和使用最小堆和最大堆。

什么是堆?

堆是一种特殊的基于二叉树的数据结构,满足堆属性。在最小堆中,父节点始终小于或等于其子节点。相反,在最大堆中,父节点始终大于或等于其子节点。这使得堆对于从数据集中高效检索最小值或最大值特别有用。

最小堆用例:跟踪恢复时间

想象一下您是一名临床医生,正在跟踪运动员锻炼后的恢复时间。您希望有效地记录最短恢复时间,以便快速识别哪位运动员恢复最快。

创建最小堆

在 javascript 中,您可以使用数组创建最小堆,并使用简单的函数对其进行管理以维护堆属性:

class minheap {
    constructor() {
        this.heap = [];
    }

    getmin() {
        return this.heap[0];
    }

    insert(value) {
        this.heap.push(value);
        this.bubbleup();
    }

    bubbleup() {
        let index = this.heap.length - 1;
        while (index > 0) {
            let parentindex = math.floor((index - 1) / 2);
            if (this.heap[parentindex] <= this.heap[index]) break;
            [this.heap[parentindex], this.heap[index]] = [this.heap[index], this.heap[parentindex]];
            index = parentindex;
        }
    }

    extractmin() {
        if (this.heap.length === 1) return this.heap.pop();
        const min = this.heap[0];
        this.heap[0] = this.heap.pop();
        this.bubbledown();
        return min;
    }

    bubbledown() {
        let index = 0;
        const length = this.heap.length;
        const element = this.heap[0];

        while (true) {
            let leftchildindex = 2 * index + 1;
            let rightchildindex = 2 * index + 2;
            let leftchild, rightchild;
            let swap = null;

            if (leftchildindex < length) {
                leftchild = this.heap[leftchildindex];
                if (leftchild < element) swap = leftchildindex;
            }

            if (rightchildindex < length) {
                rightchild = this.heap[rightchildindex];
                if (
                    (swap === null && rightchild < element) ||
                    (swap !== null && rightchild < leftchild)
                ) {
                    swap = rightchildindex;
                }
            }

            if (swap === null) break;
            [this.heap[index], this.heap[swap]] = [this.heap[swap], this.heap[index]];
            index = swap;
        }
    }
}

使用最小堆计算运动员恢复时间

现在,让我们将其应用到我们的场景中:

const recoverytimes = new minheap();
recoverytimes.insert(10); // athlete a
recoverytimes.insert(7);  // athlete b
recoverytimes.insert(12); // athlete c

console.log("fastest recovery time:", recoverytimes.getmin()); // outputs: 7

在这里,最小堆可以让临床医生快速识别恢复时间最快的运动员,这对于在训练期间做出实时决策至关重要。

立即学习Java免费学习笔记(深入)”;

最大堆用例:监控峰值性能指标

另一方面,最大堆非常适合需要跟踪最高值的场景,例如监控峰值性能指标,例如剧烈锻炼期间达到的最大心率。

创建最大堆

最大堆的实现方式与最小堆类似,但需要进行一些调整:

Short AI
Short AI

AI短视频生成器,轻松创作爆款短视频!

下载
class maxheap {
    constructor() {
        this.heap = [];
    }

    getmax() {
        return this.heap[0];
    }

    insert(value) {
        this.heap.push(value);
        this.bubbleup();
    }

    bubbleup() {
        let index = this.heap.length - 1;
        while (index > 0) {
            let parentindex = math.floor((index - 1) / 2);
            if (this.heap[parentindex] >= this.heap[index]) break;
            [this.heap[parentindex], this.heap[index]] = [this.heap[index], this.heap[parentindex]];
            index = parentindex;
        }
    }

    extractmax() {
        if (this.heap.length === 1) return this.heap.pop();
        const max = this.heap[0];
        this.heap[0] = this.heap.pop();
        this.bubbledown();
        return max;
    }

    bubbledown() {
        let index = 0;
        const length = this.heap.length;
        const element = this.heap[0];

        while (true) {
            let leftchildindex = 2 * index + 1;
            let rightchildindex = 2 * index + 2;
            let leftchild, rightchild;
            let swap = null;

            if (leftchildindex < length) {
                leftchild = this.heap[leftchildindex];
                if (leftchild > element) swap = leftchildindex;
            }

            if (rightchildindex < length) {
                rightchild = this.heap[rightchildindex];
                if (
                    (swap === null && rightchild > element) ||
                    (swap !== null && rightchild > leftchild)
                ) {
                    swap = rightchildindex;
                }
            }

            if (swap === null) break;
            [this.heap[index], this.heap[swap]] = [this.heap[swap], this.heap[index]];
            index = swap;
        }
    }
}

使用最大堆实现峰值心率

让我们考虑如何使用最大堆来跟踪运动员在锻炼期间的峰值心率:

const heartrates = new maxheap();
heartrates.insert(150); // athlete a
heartrates.insert(165); // athlete b
heartrates.insert(160); // athlete c

console.log("peak heart rate:", heartrates.getmax()); // outputs: 165

在这里,最大堆确保临床医生可以快速识别达到最高心率的运动员,这可能表明需要进一步关注或冷却。

其他基本堆操作

除了插入元素和检索最小值或最大值之外,堆还支持其他基本操作,例如:

  • 提取最小/最大:这会删除堆的根(最小堆中的最小元素或最大堆中的最大元素)并重新平衡堆。
  • heapify:将任意数组转换为堆,确保堆属性得到维护。
  • peek:查看最小值或最大值,而不将其从堆中删除。

这些操作对于高效管理和实时处理数据至关重要,使堆成为健康技术应用中的宝贵工具。

简化 python 和 javascript 中的堆操作

在python中,heapq模块提供了一种使用列表来管理最小堆的简单有效的方法。这是一个例子:

import heapq

# create an empty list to represent the heap
recovery_times = []

# add elements to the heap
heapq.heappush(recovery_times, 10)  # athlete a
heapq.heappush(recovery_times, 7)   # athlete b
heapq.heappush(recovery_times, 12)  # athlete c

# retrieve the smallest element (fastest recovery time)
fastest_recovery_time = heapq.heappop(recovery_times)
print(f"fastest recovery time: {fastest_recovery_time}")  # outputs: 7

对于 javascript,虽然没有内置的堆模块,但您可以使用 @datastructs-js/priority-queue 等第三方库来实现类似的功能:

// First, you would need to install the @datastructures-js/priority-queue library using npm:
// npm install @datastructures-js/priority-queue

const { MinPriorityQueue } = require('@datastructures-js/priority-queue');

// Create a new min heap
const minHeap = new MinPriorityQueue();

// Add elements to the heap
minHeap.enqueue(10); // Athlete A
minHeap.enqueue(7);  // Athlete B
minHeap.enqueue(12); // Athlete C

// Retrieve the smallest element
const fastestRecoveryTime = minHeap.dequeue().element;
console.log("Fastest recovery time:", fastestRecoveryTime); // Outputs: 7

通过利用这些工具,您可以专注于应用程序的关键方面,例如分析运动员数据,而不必陷入堆实现的细节中。

在 javascript 中高效检索数据

堆,特别是最小堆和最大堆,是在 javascript 中有效管理和检索关键数据的强大工具。无论您是跟踪恢复时间还是监控峰值性能指标,这些结构都可以帮助临床医生和健康技术专业人员快速做出明智的决策。通过理解和实施堆,您可以确保运动员数据井井有条、可访问,并可在最重要的时候进行分析。

通过在健康技术应用程序中使用堆,您将能够以支持运动员获得更好结果的方式处理数据,提供优化表现和恢复所需的见解。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

548

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

27

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

44

2026.01.06

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

434

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

600

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

530

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

514

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

718

2023.08.03

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号