Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ดัชนี H ใน C++


สมมติว่าเรามีข้อมูลอ้างอิงจำนวนมาก (การอ้างอิงเป็นจำนวนเต็มที่ไม่ติดลบ) ของผู้วิจัย เราต้องกำหนดฟังก์ชันเพื่อคำนวณดัชนี h ของผู้วิจัย ตามคำจำกัดความของดัชนี h:"นักวิทยาศาสตร์มีดัชนี h ถ้า h ของเอกสาร N ของเขา/เธอ มีการอ้างอิงอย่างน้อย h รายการแต่ละรายการ และเอกสาร N - h อื่น ๆ มีการอ้างอิงไม่เกิน h รายการแต่ละรายการ"

ดังนั้นหากข้อมูลเข้าเหมือนกับการอ้างอิง =[3,0,6,1,7] ผลลัพธ์จะเป็น 3 ตามที่ระบุว่าผู้วิจัยมีเอกสาร 5 ฉบับ เขาได้ 3, 0, 6, 1, 7 การอ้างอิง ตามลำดับ เนื่องจากผู้วิจัยมีเอกสาร 3 ฉบับ แต่ละรายการมีการอ้างอิงอย่างน้อย 3 รายการ และกระดาษอีก 2 รายการที่เหลือมีการอ้างอิงไม่เกิน 3 รายการ ค่าดัชนี h จึงเท่ากับ 3

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=ขนาดของอาร์เรย์ สร้างหนึ่งอาร์เรย์ที่เรียกว่า bucket ขนาด n + 1

  • สำหรับฉันอยู่ในช่วง 0 ถึง n – 1

    • x :=c[i]

    • ถ้า x>=n ให้เพิ่มที่เก็บข้อมูล[n] ขึ้น 1 ไม่เช่นนั้น ให้เพิ่มที่เก็บข้อมูล[x] ขึ้น 1

  • cnt :=0

  • สำหรับฉันอยู่ในช่วง n ลงไปที่ 0 −

    • เพิ่ม cnt โดยถัง[i]

    • ถ้า cnt>=i ให้คืนค่า i

  • กลับ – 1

ตัวอย่าง(C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int hIndex(vector<int>& c) {
      int n = c.size();
      vector <int> bucket(n + 1);
      for(int i = 0; i < n; i++){
         int x = c[i];
         if(x >= n){
            bucket[n]++;
         } else {
            bucket[x]++;
         }
      }
      int cnt = 0;
      for(int i = n; i >= 0; i--){
         cnt += bucket[i];
         if(cnt >= i)return i;
      }
      return -1;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,0,6,1,7};
   cout << (ob.hIndex(v));
}

อินพุต

[3,0,6,1,7]

ผลลัพธ์

3