Je fais une analyse de fichier, où je marque les régions explorées dans le fichier. Maintenant, je voudrais trouver le un régions explorées, donc je sais ce qu'il faut regarder ensuite. Cela ressemble beaucoup à ce que montre le logiciel de défragmentation pour les régions libres et utilisées.Quel algorithme pour trouver des plages vides de nombres dans une plage de nombres?
Exemple:
Dans cette image, disons que les régions explorées sont rouges, les régions inexplorées sont gris. J'ai besoin de déterminer les limites de la région grise de ces régions rouges.
Mon code actuel, un lecteur binaire personnalisé qui enregistre ce qui a été lu:
public class CustomBinaryReader : BinaryReader {
private readonly List<Block> _blocks;
public CustomBinaryReader([NotNull] Stream input) : this(input, Encoding.Default) { }
public CustomBinaryReader(Stream input, Encoding encoding, bool leaveOpen = true) : base(input, encoding, leaveOpen) {
_blocks = new List<Block>();
}
public override byte[] ReadBytes(int count) {
Log(count);
return base.ReadBytes(count);
}
private void Log(int count) {
_blocks.Add(new Block(BaseStream.Position, count));
}
private IEnumerable<Block> GetUnreadBlocks() {
// how to get unread blocks in the stream, from read blocks ?
throw new NotImplementedException();
}
}
Et le type qui définit ce qu'est une région:
public class Block {
public Block(long position, long length) {
Position = position;
Length = length;
}
public long Position { get; }
public long Length { get; }
}
Question:
Existe-t-il une classe d'algorithmes ou de structures de données pour résoudre un tel problème (comme un arbre ou un graphique)? Si une telle chose n'existe pas, pouvez-vous me donner une approche ou des conseils sur la façon de résoudre un tel problème?
Basé sur l'image ou les données brutes? – stybl
Il sera basé sur une structure avec deux membres: 'position' et' longueur' – Aybe
Veuillez mettre à jour la question avec la structure de données que vous utilisez pour stocker les données afin que les gens puissent aider –