当前位置: 首页 > wzjs >正文

郑州同济医院正规吗包头整站优化

郑州同济医院正规吗,包头整站优化,wordpress伪静态路径,规划建设委员会网站文章目录 一、为什么需要前缀和?二、前缀和核心原理1. 空间换时间的艺术2. 数学之美 三、Vue3 中的实现1. Composition API 封装2. 在组件中使用 四、应用场景1. 动态数据仪表盘2. 大数据量滚动加载3. 动态规划优化 五、性能对比实测六、注意事项1. 索引偏移陷阱2. …

文章目录

  • 一、为什么需要前缀和?
  • 二、前缀和核心原理
    • 1. 空间换时间的艺术
    • 2. 数学之美
  • 三、Vue3 中的实现
    • 1. Composition API 封装
    • 2. 在组件中使用
  • 四、应用场景
    • 1. 动态数据仪表盘
    • 2. 大数据量滚动加载
    • 3. 动态规划优化
  • 五、性能对比实测
  • 六、注意事项
    • 1. 索引偏移陷阱
    • 2. 动态更新处理
    • 3. 内存优化技巧
  • 七、总结

一、为什么需要前缀和?

在开发可视化仪表盘时会遇到这样的请求:

// 每秒更新 100,000 条交易数据的区间统计
const transactions = ref(new Array(100000).fill(0))

需要实时计算 [2000, 5000] 区间的交易总额,之间遍历会导致:

// 时间复杂度 O(n) 的暴力解法
function sumRange(start, end) {let sum = 0for (let i = start; i <= end; i++) {sum += transactions.value[i]}return sum // 每调用一次就遍历一次,性能灾难!
}

二、前缀和核心原理

前缀和(Prefix Sum)是一种预处理数组的技术,通过构建辅助数组快速计算原数组任意区间的和。
数学表达:
原数组:nums[0], nums[1], nums[2],…,nums[n - 1]
前缀和数组:preSum[0],preSum[1], preSum[2],…,preSum[n]
其中 preSum[i] = nums[0] + nums[1] + … + nums[i - 1]
构建过程:
初始化:preSum[0] = 0 (空数组的和)
递推公式:preSum[i] = preSum[i - 1] + nums[i - 1]
区间和计算:
计算区间[left, right]的和:
sum(nums[left…right]) = preSum[right + 1] - preSum[left]

1. 空间换时间的艺术

// 预处理阶段(O(n))
const preSum = reactive([])
preSum[0] = 0
for (let i = 1; i <= transactions.value.length; i++) {preSum[i] = preSum[i - 1] + transactions.value[i - 1]
}// 查询阶段 (O(1)的复杂度)
function optimizedSum(start, end) {return preSum[end + 1] - preSum[start]
}

2. 数学之美

在这里插入图片描述

三、Vue3 中的实现

1. Composition API 封装

// usePrefixSum.ts
import { ref, reactive, watchEffect } from 'vue'export function usePrefixSum(sourceArray: Ref<number[]>) {const preSum = reactive<number[]>([])watchEffect(() => {preSum.length = 0preSum.push(0)sourceArray.value.forEach((num, index) => {preSum[index + 1] = preSum[index] + num})})const getRangeSum = (start: number, end: number) => {return preSum[end + 1] - preSum[start]}return { preSum, getRangeSum }
}

2. 在组件中使用

<script setup lang="ts">import { ref, computed } from 'vue'import { usePrefixSum } form './usePrefixSum'const data = ref([10, 20, 30, 40, 50])const { getRangeSum } = usePrefixSum(data)// 实时响应式计算const currentSum = computed(() => getRangeSum(1, 3)) // 20 + 30 + 40 = 90
</script>

四、应用场景

1. 动态数据仪表盘

// 实时更新股票波动区间统计
watch(stockData, (newVal) => {data.value = newVal.map((item) => item.price)
})

2. 大数据量滚动加载

<template><!-- 显示当前可视区域的数据总和 --><div v-for="(chunk, i) in visibleChunks" :key="i">区块{{i}}总和:{{getRangeSum(...getChunkRange(i))}}</div>
</template>

3. 动态规划优化

// 最长子数组和问题优化
function maxSubArray(nums: number[]) {const preSum = [0]let minSum = 0let max = -Infinitynums.forEach((num, index) => {preSum[i + 1] = preSum[i] + nummax = Math.max(max, preSum[i + 1] - minSum)minSum = Math.min(minSum, preSum[i + 1])})return max
}

五、性能对比实测

测试数据:100,000 个元素的数组

方法初始化耗时10万次查询总耗时
暴力求和0ms1250ms
前缀和15ms3ms

结论 ​​:在频繁查询场景下,前缀和的性能提升可达 400 倍!

六、注意事项

1. 索引偏移陷阱

记住 preSum[n]表示前 n 项和:

// 正确写法
sumRange(a,b) => preSum[b + 1] - preSum[a]

2. 动态更新处理

当原始数组变化时:

// 使用 watchEffect 自动重建前缀和
watchEffect(updatePreSum)

3. 内存优化技巧

对大数组使用 Int32Array:

const preSum = new Int32Array(data.length + 1)

七、总结

除了上述的应用场景外,我们还可以进行其他的扩展思考,比如说,差分数组:前缀和的逆运算,适合区间更新场景;树状数组:动态前缀和的更优解,支持单点修改等等。

http://www.dtcms.com/wzjs/256772.html

相关文章:

  • 中国水运建设行业协会网站自媒体发布平台有哪些
  • 九江商城网站建设网络营销有什么特点
  • 网站推广哪个平台好关键词上首页的有效方法
  • 百度网盘做自已网站网络营销应用方式
  • 设计手机网站软件微信小程序官网
  • 网站后台上传表格佛山百度seo代理
  • 网站首页htmlseo营销方案
  • 医疗手机网站模板深圳网络推广大师
  • 内部建设网站需要什么条件免费二级域名分发
  • 吉林省人民政府发展研究中心seo的作用主要有
  • 长春站最新发布网页设计制作教程
  • 如何查找高权重网站互动营销名词解释
  • 如保做网站赢利吴江网站制作
  • 平顶山做网站优化百度客服电话24小时
  • 广州荔湾做网站网站制作流程和方法
  • python培训骗局北京seo编辑
  • 怎么做企业网站仿站郑州网站制作公司
  • 关于网站建设申请报告网页设计制作网站教程
  • 莱州网站建设多少钱seo标题生成器
  • 网站空间3个g多少钱24小时人工在线客服
  • 优秀高端网站建设报价搜索引擎优化实训报告
  • 国企公司网站制作怎么做小程序
  • 东莞免费做网站公司企业关键词优化推荐
  • 莞城区做网站哈尔滨怎样关键词优化
  • 跨境建站服务公司网站策划运营
  • 做内销的网站推荐广州灰色优化网络公司
  • 做海外网站企业网站排名优化价格
  • 支付宝手机网站支付前端怎么做百度收录网站入口
  • 怎么样建设一个电影网站视频seo查询排名系统
  • 网站系统繁忙是什么意思引流推广营销