Hirsch-Index berechnen

BlackParrot

Mitglied
Hallo liebe Community!
Ich habe ein Programm, bei dem ich nicht weiter komme. Und zwar möchte ich ein Programm schreiben, das den Hirschindex berechnet. Das ist die größte natürliche Zahl m, für die gilt, dass ein Wissenschaftler m Veröffentlichungen hat, die mindestens m-mal zitiert wurden. Die Eingabe soll ein int-Array sein. Diese sehen dann z.b. so aus: [1, 3, 2, 2, 4, 1, 1]. Die Zahlen stellen die Nummer der einzelnen Veröffentlichungen dar und die Anzahl der gleichen Nummer sagt, wie oft diese Veröffentlichung zitiert wurde. Hier ist also der Hirsch-Index 2, da die Veröffentlichungen 1 und 2 mindestens zweimal zitiert wurden. Die Anzahl der Zitierungen, also die Arraylänge, ist n.
Hat jemand eine Idee, wie dies in Java programmiert werden könnte?
Ich wäre euch sehr dankbar!
 

Nuiton

Bekanntes Mitglied
Direkt mal gegooglet.
Java:
public int hIndex(int[] citations) {
    Arrays.sort(citations);

    int result = 0;  
    for(int i=0; i<citations.length; i++){
        int smaller = Math.min(citations[i], citations.length-i);
        result = Math.max(result, smaller);
    }

    return result;
}
 

BlackParrot

Mitglied
Hallo Nuiton,
ja das habe ich auch schon gefunden. Das Problem ist nur, dass dieser Algorithmus mit einer Eingabe arbeitet, die folgende Form hat: Sie ist ein Array, in dessen Felder die Anzahl der Zitierungen pro Veröffentlichung des Wissenschaftlers gespeichert ist. Mein Eingabe-Array soll allerdings andere Daten enthalten: Die Felder sollen der Reihe nach sagen, welche Veröffentlichung zitiert wurde: [4, 3, 3, 1, 2, 1] sagt zB, dass zuerst die vierte, dann zweimal die dritte, dann die erste, dann die zweite und danach noch einmal die erste Veröffentlichung zitiert wurde. Also kann der obige Algorithmus mit dieser Eingabeform nicht den richtigen Hirsch-Index berechnen.
Hat jemand eine Idee wie ich das hinbekomme?
 

Nuiton

Bekanntes Mitglied
Eh, no comprende. Was willst du denn jetzt berechnen? Du meintest im Eingangspost, du willst den Hirsch-Index berechnen - der ist oben. Wenn du eine spezielle Ausgabe haben willst, dann musst du die Methode erweitern.

Nebenbei sind [4,3,3,1,2,1] und [1,3,2,2,4,1,1] auch ganz andere Arrays, die eine ganz andere Anzahl an Zahlen beinhalten.
 

BlackParrot

Mitglied
Hallo, dass die zwei von mir genannten Array unterschiedlich sind ist mir schon klar. Es sollten auch nur Beispiele sein. Was ich haben will ist als Ausgabe der Hirschindex. Allerdings soll die Form der Eingabe anders aussehen. Die Eingabe soll nicht in den einzelnen Feldern die Anzahl er einzelnen Zitierungen pro Werk enthalten, sondern das jeweilige Werk (Werk-Nr. 1, 2, 3, vier usw.) benennen, das zitiert wurde.
 

mrBrown

Super-Moderator
Mitarbeiter
Dann überführ die eine Form in die andere.
Einfach über das eine iterieren, und jeweils den Wert als Index des anderen nutzen und dort incrementieren
 

BlackParrot

Mitglied
Hallo mrBrown,
leider sind meine Java-Fähigkeiten noch nicht ganz so ausgereift. Ich verstehe deine Idee, weiß aber nicht, wie ich sie umsetzten kann:
- ich erstelle zunächst ein zweites Array (aber welche Länge?)
- dann verwende ich eine for-Schleife von 0 bis Länge des ersten Arrays - 1
- dann teste ich, ob der Wert von A kleiner als A[i+1] ist
- falls ja, dann ist der Wert von A der Index von Array B, dessen Inhalt ich um eins erhöhe

Habe ich das richtig verstanden? Und wie könnte ich das in Java schreiben?
Wäre super wenn ihr mir helfen könntet.
 

mrBrown

Super-Moderator
Mitarbeiter
- ich erstelle zunächst ein zweites Array (aber welche Länge?)
Länge = Anzahl der Werke, also der höchste Wert aus dem anderem Array
- dann verwende ich eine for-Schleife von 0 bis Länge des ersten Arrays - 1
Genau
- dann teste ich, ob der Wert von A kleiner als A[i+1] ist
Ist überflüssig, wenn du direkt die passende Länge benutzt
- falls ja, dann ist der Wert von A der Index von Array B, dessen Inhalt ich um eins erhöhe
Ja, dabei nur aufpassen mit 0-basiertem-Index ;)

Habe ich das richtig verstanden? Und wie könnte ich das in Java schreiben?
Wäre super wenn ihr mir helfen könntet.
Versuchs doch mal selbst umzusetzen, wenn du dabei nicht weiterkommst kann man dir sicher besser helfen ;)
 

BlackParrot

Mitglied
Vielen Dank mrBrown! Ich werde es gleich mal ausprobieren.

Aber eine andere Frage bezüglich dieser Aufgabe:
Könnte man das oben von mir benannte Problem evtl. mit einem Heap lösen? Hat dazu vielleicht jemand eine Idee?
 

mrBrown

Super-Moderator
Mitarbeiter
Ja kann man, du entfernst einfach so lange das größte Element, bis die Anzahl der entfernten Elemente größer ist als das Element selbst. Der Index ist dann die Anzahl-1 (wenn ich grad keinen Dreher drin hab)
 

BlackParrot

Mitglied
Meinst du Folgendes?

- Aus der Eingabe (Int-Array bestehend aus der Nennung der jeweiligen Veröffentlichung, wenn sie zitiert wurde) wird zuerst ein MaxHeap gebaut
- Ich entferne die Wurzel des Heaps und baue aus dem Rest wieder einen MaxHeap (für jedes Entfernen erhöhe ich einen Zähler um 1)
-> dies wiederhole ich so lange, bis der Zähler größer als die Wurzel des Heaps ist
- der Hirsch-Index ist dann der Zähler minus 1

Habe ich das so richtig verstanden?
Vielen Dank, dass Du so viel Geduld mit mir hast...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Thermaler Index 16 out of bounds for length 16 Allgemeine Java-Themen 22
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L Array und Index Allgemeine Java-Themen 26
H Collections Aktuellen Index generell und nach Sortierung ausgeben Allgemeine Java-Themen 6
Y ArrayListe eingegebenen index entfernen Allgemeine Java-Themen 1
coolian warum bekomme ich ein string index out of bounds exception Allgemeine Java-Themen 17
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
X Lucene index on disk Allgemeine Java-Themen 2
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
W Problem mit Index in einer for-Schleife Allgemeine Java-Themen 8
S Char-index aller Buchstaben..? Allgemeine Java-Themen 3
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
GianaSisters Klassen ArrayList Index Integer int Allgemeine Java-Themen 5
Jats ArrayList-Error Index: 1 Size:1 - Bitte um Hilfe Allgemeine Java-Themen 36
A Index Datei aus HTML-Dateien Allgemeine Java-Themen 7
T Index Fehler Allgemeine Java-Themen 9
N Inverted index / inverted list Allgemeine Java-Themen 2
G Hibernate search (Lucene) - Index wird nicht rechtzeitig erzeugt? Allgemeine Java-Themen 2
Developer_X Array Index Out of Bounds Exception Allgemeine Java-Themen 1
B TreeMap Index !!! Allgemeine Java-Themen 6
J fireIndexedPropertyChange(...) Wie gelangt man an den Index? Allgemeine Java-Themen 2
L kann in einem array der 1. index größer als der 2. sein? Allgemeine Java-Themen 10
M Java applet zusammen mit DHTML z-index Problem Allgemeine Java-Themen 2
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
M Index eines Arrays ermitteln und als Integer ausgeben Allgemeine Java-Themen 7
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
bittedanke Wie benötigte Bits berechnen (Huffmankodierung) Allgemeine Java-Themen 7
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
ReinerCoder Kombinationsmöglichkeiten der Textfelder berechnen Allgemeine Java-Themen 14
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
C Java Script Pause berechnen Allgemeine Java-Themen 5
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
MaxG. Best Practice Alle Kombinationen berechnen Allgemeine Java-Themen 3
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
N Das große O berechnen Allgemeine Java-Themen 2
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
N Kombinationen beliebiger Größe berechnen Allgemeine Java-Themen 1
The Pi Anzahl der Gewichtscheiben berechnen Allgemeine Java-Themen 11
B Umfang berechnen für Polygone Allgemeine Java-Themen 18
C pplet Mitelwert Berechnen Allgemeine Java-Themen 0
J Primzahlen berechnen Allgemeine Java-Themen 13
K F-Verteilung FINV in Java berechnen Allgemeine Java-Themen 4
A Helligkeit eines Bildes berechnen Allgemeine Java-Themen 1
P Methoden Alle Kombinationen aus 2 Karten berechnen Allgemeine Java-Themen 2
C mp3-Lied Dauer berechnen Allgemeine Java-Themen 1
L Winkel eines Vektors berechnen [Anfängerprob] Allgemeine Java-Themen 5
R Threads Taskzeit berechnen Allgemeine Java-Themen 12
S Eclipse Entfernung berechnen Allgemeine Java-Themen 16
T Kreis und sekant schnittpunkt berechnen mit latitude longitude Allgemeine Java-Themen 4
B Java Diffentialgleichungen berechnen Allgemeine Java-Themen 3
W 2D-Grafik Kontrast eines Bildes berechnen Allgemeine Java-Themen 6
T Taylorpolynom berechnen Allgemeine Java-Themen 14
S Erste Schritte Mittelsenkrechte berechnen Allgemeine Java-Themen 3
P Matrix Kurtosis berechnen Allgemeine Java-Themen 40
S Werte aus 2 eindimensionale boolean arrays mithilfe von logischen operatoren berechnen Allgemeine Java-Themen 6
S Teiler Berechnen Allgemeine Java-Themen 6
Kr0e Differenzen von Bildern berechnen - Remote control Allgemeine Java-Themen 2
D md5 berechnen für BufferedImage Allgemeine Java-Themen 5
J bewegliche Feiertage berechnen Allgemeine Java-Themen 7
W Rechnungsbetrag berechnen Allgemeine Java-Themen 2
reibi Checksumme für ein File berechnen Allgemeine Java-Themen 12
M Integral berechnen Allgemeine Java-Themen 5
D Primzahlen berechnen funktioniert nicht Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
Developer_X Prozentdifferenz berechnen. Allgemeine Java-Themen 13
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
M Monatliche Zeitspannen berechnen Allgemeine Java-Themen 3
Ark Arkussinus effizient berechnen Allgemeine Java-Themen 12
Iron Monkey Potenzzahlen mit shiftLeft berechnen? Allgemeine Java-Themen 13
N Rechenzeit berechnen? Allgemeine Java-Themen 3
H Schrifthöhe berechnen / Swing Allgemeine Java-Themen 5
T ungerade zahlen berechnen Allgemeine Java-Themen 3
X Suche Java Klasse die Feiertage berechnen kann Allgemeine Java-Themen 2
G ganzzahlige Potenz schnell berechnen Allgemeine Java-Themen 4
M Lautstärke von Audiosignal live berechnen Allgemeine Java-Themen 7
S CRC wert berechnen ergibt 0 ? Allgemeine Java-Themen 9
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
T Arbeitsstunden berechnen Allgemeine Java-Themen 8
M Date Range auswerten und die Monate berechnen Allgemeine Java-Themen 2
V Setter zum Berechnen nutzen? Allgemeine Java-Themen 5
G Richtung berechnen anhand Koordinaten Allgemeine Java-Themen 3
P Dauer (Tage, Stunden, Minuten, Sekunden) berechnen Allgemeine Java-Themen 5
D Mittelwert einer Menge von Doubles berechnen Allgemeine Java-Themen 3
P Winkel berechnen. Allgemeine Java-Themen 3
0 Alle Teiler einer Zahl performant berechnen? Allgemeine Java-Themen 9
B Was würdet ihr dafür berechnen? Allgemeine Java-Themen 7
T MessageDigest von einem char[] berechnen Allgemeine Java-Themen 7
S den zweit niedrigsten wert in einem array berechnen Allgemeine Java-Themen 2
E CRC 8 Berechnen Allgemeine Java-Themen 1
M Math-String-Formel berechnen lassen Allgemeine Java-Themen 4
B Ellipsen Kreisbahnen berechnen! Allgemeine Java-Themen 11
M Alle möglichen Kombinationen von mehreren Objekten berechnen Allgemeine Java-Themen 6
clemente lanman und nt password berechnen Allgemeine Java-Themen 7
J an und bn berechnen Allgemeine Java-Themen 5
F Datum mit anzahl tagen berechnen Allgemeine Java-Themen 3
B Differenz in Monaten berechnen --- DateDiff()? Allgemeine Java-Themen 12
B Distance berechnen! Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben