Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用最小值/最大值随机分块字节_Javascript_Arrays_Node.js - Fatal编程技术网

Javascript 使用最小值/最大值随机分块字节

Javascript 使用最小值/最大值随机分块字节,javascript,arrays,node.js,Javascript,Arrays,Node.js,我有一个1000000字节的文件。我想用最小和最大块大小随机分块文件的200000字节,同时确保所有200000字节都分块,而不低于最小块字节大小 例: 在过去的半个小时里,我一直在想这个问题。在internet上找不到任何内容。因此,如果我理解正确,您需要检索数据子集,其中该子集被划分为最小/最大大小之间的块,并且您可以随机选择偏移和块大小。诀窍在于,您希望确保在满足条件之前不会耗尽内存 那么让我们从确定块大小开始。这实际上是一个相当困难的问题,因为min块大小约束,并且需要精确求和到某个值。

我有一个1000000字节的文件。我想用最小和最大块大小随机分块文件的200000字节,同时确保所有200000字节都分块,而不低于最小块字节大小

例:


在过去的半个小时里,我一直在想这个问题。在internet上找不到任何内容。

因此,如果我理解正确,您需要检索数据子集,其中该子集被划分为最小/最大大小之间的块,并且您可以随机选择偏移和块大小。诀窍在于,您希望确保在满足条件之前不会耗尽内存

那么让我们从确定块大小开始。这实际上是一个相当困难的问题,因为
min
块大小约束,并且需要精确求和到某个值。因此,您可以想象有N组可能的块大小来满足所需的总数,其中每个块大小可以是约束范围内的任何值。但是,并非每个集合都包含符合最小/最大约束的块大小。我已经拼凑了下面的一个工作示例,但请注意,如果发现一个失败的集合,它会通过重试来强制给出一个理想的答案

const randInt=(最小值,最大值)=>{
返回Math.floor(Math.random()*(max-min+1)+min)
}
常量getSizeArray=(最小值、最大值、总计)=>{
常量输出=[]
var剩余=总计
while(剩菜>最大值){
const nextSize=randInt(最小值、最大值)
output.push(nextSize)
剩菜-=nextSize
}
//如果剩余量小于最小值,则不可能进行此设置
if(剩余0){output.push(剩余)}
返回输出
}
常量大小=getSizeArray(20000、50000、200000)

log(大小)
只需生成25000到50000之间的随机值,总计200000:

 const range = (min, max) => min + Math.floor(Math.random() * (max - min));

function sizes(size, min, max) {
  const sizes = [];
  let pos;
  for(pos = 0; pos < size - max;) {
    const curr = pos + range(min, Math.min(max, size - max));
    sizes.push(curr);
    pos += curr;          
  }

  sizes.push(size - pos);
  return sizes;
}

你可能需要详细说明一下。那么偏移量和块大小都是随机的?问题是,通过随机操作,您不知道是否会在仍然需要更多数据的情况下到达文件末尾?您可能还需要详细说明什么样的随机偏移点。@MattWay我正在尝试生成用于对文件字节进行分块的随机偏移点。我想随机分块字节,同时防止在没有数据的情况下生成偏移量。
 const range = (min, max) => min + Math.floor(Math.random() * (max - min));

function sizes(size, min, max) {
  const sizes = [];
  let pos;
  for(pos = 0; pos < size - max;) {
    const curr = pos + range(min, Math.min(max, size - max));
    sizes.push(curr);
    pos += curr;          
  }

  sizes.push(size - pos);
  return sizes;
}
const toChunk = range(1000000 - 200000, 1000000), 
  leftOver = 1000000 - toChunk,
  chunkSizes = sizes(toChunk, 25000, 50000),
  spaceSizes = sizes(leftOver, 0, range(10, leftOver)),
  chunks = [];

while(spaceSizes.length > chunkSizes.length + 1)
  spaceSizes.splice(range(0, spaceSizes.length), spaceSizes.pop() + spaceSizes.pop());

let start = 0;
for(const chunkSize of chunkSizes) {
chunks.push([start, start + chunkSize - 1]);
  start += chunkSize;
  start += spaceSizes.pop() || 0;
}