Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tính chỉ số h-index của trích dẫn trong JavaScript

Giả sử chúng ta có một mảng số nguyên dương biểu thị số lần trích dẫn của một nhà nghiên cứu cụ thể trong một khoảng thời gian.

Chúng ta cần viết một hàm JavaScript nhận vào một mảng như vậy và hàm nên tìm chỉ số h-index của nhà nghiên cứu đó dựa trên dữ liệu trích dẫn được biểu diễn bởi mảng.

H-Index:

Xét một nhà nghiên cứu thực hiện N bài báo trong sự nghiệp. Nhà nghiên cứu có chỉ số h nếu h trong số N bài báo của ông/bà có ít nhất h trích dẫn mỗi bài, và các N-h bài báo còn lại không quá h trích dẫn mỗi bài.

Ví dụ:

Nếu mảng trích dẫn là:

const arr = [1, 6, 3, 0, 5];

Dữ liệu này biểu thị nhà nghiên cứu có 5 bài báo tổng cộng và mỗi bài nhận được 1, 6, 3, 0, 5 trích dẫn tương ứng.

Và vì nhà nghiên cứu có 3 bài báo với ít nhất 3 trích dẫn mỗi bài và 2 bài còn lại không quá 3 trích dẫn, h-index là 3.

Do đó, đầu ra cho mảng này nên là:

const output = 3;

Ví dụ

Dưới đây là mã nguồn:

const arr = [1, 6, 3, 0, 5]; const findHIndex = (arr = []) => {    let possible = [];    let { length: len } = arr;    if (len === 0){       return 0;    };    possible.length = len + 2;    possible = possible.join('-').split('').map(() => 0);    for (let i = 0; i < len; i ++) {       let val = arr[i];       let ind = val > len ? len : val;       possible[ind] += 1;    }    let result = 0;    for (let k = len; k >= 0; k --) {       result += possible[k];       if (result >= k) {          return k;       }    } }; console.log(findHIndex(arr));

Kết quả

Đầu ra trên console:

3

Giải thích: Counting sort approach O(n). possible[i] = số bài có đúng i trích dẫn (capped tại n). Duyệt giảm từ n về 0, cộng dồn result = số bài có ≥ k trích dẫn. Khi result >= k trả về k. Cách khác: sort giảm dần, tìm max i sao cho citations[i] ≥ i+1.