This repository has been archived on 2026-05-04. You can view files and clone it, but cannot push or open issues or pull requests.
Files
TIPE/Code/ldpc/src/construction/random.rs
2026-02-11 19:58:43 +01:00

35 lines
1022 B
Rust

use crate::matrix::MatrixGF2;
use rand::RngExt;
pub fn generate_random_h(rows: usize, cols: usize, wc: usize, wr: usize) -> MatrixGF2 {
assert_eq!(rows * wr, cols * wc, "Erreur");
loop {
let mut data = vec![0; rows * cols];
let mut row_w = vec![0; rows];
let mut rng = rand::rng();
let mut success = true;
for c in 0..cols {
let mut ones_placed = 0;
let mut avail_rows: Vec<usize> = (0..rows).filter(|&r| row_w[r] < wr).collect();
if avail_rows.len() < wc {
// Les problèmes...
success = false;
break;
}
while ones_placed < wc {
let id = rng.random_range(0..avail_rows.len());
let r = avail_rows.remove(id);
data[r * cols + c] = 1;
row_w[r] += 1;
ones_placed += 1;
}
}
if success {
return MatrixGF2::new(rows, cols, data);
}
}
}