You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python查找包含指定比例文件大小的最小区间?

解决思路

要找到包含指定比例文件的最小区间[a,b],核心逻辑是先对文件大小排序,再用滑动窗口(双指针)找满足文件数量要求的最短连续区间——排序后,最短区间必然是连续的一段数据,这样区间长度(b-a)才会最小。

具体步骤
  1. 提取并排序DataFrame中的file_size列
  2. 针对每个目标比例(75%/80%/85%/90%),计算需要包含的最少文件数(总文件数×比例,向上取整确保满足要求)
  3. 用双指针遍历排序后的数组,维护一个窗口:当窗口内文件数量达标时,尝试缩小左边界以找到更短的区间,最终记录最小窗口对应的[a,b]
代码实现
import pandas as pd
import numpy as np

# 读取CSV文件(替换成你的文件路径)
df = pd.read_csv('your_file.csv')
# 提取文件大小并排序
sorted_sizes = df['file_size'].sort_values().reset_index(drop=True)
total_files = len(sorted_sizes)

# 目标比例列表
target_percentages = [0.75, 0.8, 0.85, 0.9]

for pct in target_percentages:
    # 计算需要包含的文件数量,向上取整保证比例达标
    required_files = int(np.ceil(total_files * pct))
    min_interval_length = float('inf')
    best_start = None
    best_end = None
    
    # 双指针滑动窗口
    left = 0
    for right in range(total_files):
        # 当窗口内文件数满足要求时,尝试缩小左边界
        while (right - left + 1) >= required_files:
            current_length = sorted_sizes[right] - sorted_sizes[left]
            # 更新最小区间
            if current_length < min_interval_length:
                min_interval_length = current_length
                best_start = sorted_sizes[left]
                best_end = sorted_sizes[right]
            left += 1
    
    # 输出当前比例的结果
    print(f"包含{int(pct*100)}%文件的最小区间:[{best_start}, {best_end}],区间长度:{min_interval_length}")
代码说明
  • 排序是核心前提:排序后满足数量要求的最短区间一定是连续段,避免了非连续区间的无效计算
  • 双指针优化效率:时间复杂度为O(n),比暴力枚举所有区间的O(n²)高效得多
  • 向上取整处理:确保区间内文件数至少达到目标比例,不会出现因取整不足导致比例不达标的情况

内容的提问来源于stack exchange,提问作者user21429106

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:47:04