Intervall Partitioning in java

joker123

Mitglied
Hallo,

wir haben als Aufgabe bekommen, ein "intervall partitioning" zu programmieren...
mein Problem ist, ich hab keinen Plan wie ich überhaupt anfangen soll, ich hab zwar Überlegungen schon ein wenig im Kopf, aber halt noch nicht in java...

ich denken, so müsste es irgendwie lösbar sein

Teile die Menge aller Intervalle in disjunkte Teilmengen auf, deren Vereinigung wieder die Gesamtmenge ergibt. Lösungsraum ist damit die Menge aller Partitionierungen der eingegebenen Intervalle.

Eine Partitionierung ist Lösung, falls in jeder Partition gilt, dass alle Intervalle kompatibel sind

wobei unter kompatibel verstanden wird:

Code:
s(i) >= f(j) oder s(j) >= f(i)
wobei s = start und f = finish bedeudet...also startzeit und endzeit eines Intervalls...
somit wären Überschneidungen von 2 Intervallen ausgeschlossen

wäre froh, wenn mir vielleicht jemand weiterhelfen könnte

danke
mfG
 
S

SlaterB

Gast
> ich hab zwar Überlegungen schon ein wenig im Kopf, aber halt noch nicht in java...

kannst du was zu den Überlegungen erzählen? alles nach diesem Satz klingt ja allein nach Aufgabenstellung, nix von Lösung
 

joker123

Mitglied
nee, also die Aufgabenstellung ist eigentlich nur "implementieren sie einen Algorithmus Intervall Partitioning"

aber zu meiner Vorgehensweise...
ich hab eine Anzahl von Intervallen, x. (x >= 1, sonst macht es keinen Sinn)
so, nun würde ich jeweils für Startzeiten und Endzeiten einen Array anlegen ( int[] s, int[] f)

anschließend würd ich dann mal die Anzahl an Intervallen durchlaufen

Java:
public static int intervallPartitioning(int m, int[] s, int[] f)
{
   int [] start = s;
   int [] finish = f;

   for (int i=0; i<=m; i++)
   {
       // vergleichen ob startzeit(i) >= endzeit(j) ODER startzeit(j) >= endzeit(i) ist
       if (s(i) >= f(j) || (s(j) >= f(i))

ich weiß, dass es noch nicht viel ist, aber ich bin neu was java angeht...
ich komm nicht drauf, wie ich das mit dieser if-Bedingung hinkriegen soll, also mit den Indizes, da "j" in meinem Code noch gar nicht benutzt wird...
deshalb hoffe ich, dass mir vielleicht jemand weiterhelfen könnte

danke
mfG
 

tfa

Top Contributor
Sieht aus, als ob der Algorithmus noch gefunden werden muss. Das geht auch ohne Java.
Formulier ihn doch erstmal in Pseudocode, bei der Umsetzung wird dir hier sicherlich geholfen.
 
S

SlaterB

Gast
wie gesagt: erst in Worten erzählen, Java überhaupt nicht,

dein Code und deine Zeilen enthalten eigentlich gar keine Lösung, Startzeiten und Endzeiten aufzutrennen ist schonmal schlecht,
ansonsten kümmerst du dich vielleicht um den Test, nicht aber um das Finden von Lösungen an sich
-----

alles fängt mit einem Beispiel an, vier Intervalle:
A = 2-5
B = 6-7
C = 4-5
D = 5-7

(1)
eine denkbare Partitionierung ist alle 4 Intervalle in einer Partition,
wenn man die prüft (Java-Untermethode, nicht weiter spannend) wird man feststellen, dass sich die Intervalle überschneiden
-> keine Lösung

(2)
noch eine Variante ist, für jedes Intervall eine separate Partition anzulegen, dies ist eine triviale Variante, die immer eine Lösung ist

(3)
interessanter wirds, wenn A+B in einer Partition stehen und C+D in einer anderen,

usw.

(1), (2), (3) sind drei mögliche Partitionierungen, alle Möglichkeiten muss man finden

ein Ansatz:
man kann sich eine Notation ausdenken, jedem der vier Intervalle eine Zahl x zuordnen, die die Einordnung in die Partition x bedeutet

Partitionierung (1) ist dann 1111, alle 4 Intervalle kommen in Partition 1
Partitionierung (2) ist dann 1234, alle 4 Intervalle kommen in eigene 4 unterschiedliche Partitionen
Partitionierung (3) ist dann 1122,

die Menge aller möglichen Partitionierungen kann man dann mehr oder weniger leicht sehen:
1111
1112
(1113 macht keinen Sinn)
1121
1122
1123
usw.
das in Java umzusetzen ist schon nicht ganz trivial, Rekursion hilft,
oder komplexe Schleife mit Array, Zählvariablen usw.

----

zweiter Ansatz:
man kann sich die Rekursion (jetzt wirklich halb in Java gedacht) auch etwas plastischer vorstellen:
das erste Intervall kommt eh immer in die erste Partition,

das zweite Intervall kommt entweder mit in die erste Partition oder in eine zweite neue,
beide Varianten ausprobieren, mit Backtracking zwischendurch den Rest positionieren

fürs x-te Intervall gilt: schauen wie viele Partitionen da sind,
nacheinander in alle vorhandenen einfügen (dazwischen immer per Rekursion weitersuchen)
sowie eine neue Partition aufmachen (+ weitersuchen)

diese Verarbeitung hat den Vorteil, dass man beim Einfügen in eine Partition gleich prüfen kann, ob die Zeit-Bedingung verletzt ist,
dann kann man den aktuellen Versuch abbrechen, egal wie die restlichen Intervalle zu platzieren sind

-----

so, das waren jetzt mehr Tipps als ich geben wollte, aber alle noch allgemein, hast noch genug zu programmieren ;)
wenn dir Rekursion + Backtracking nix sagen, dann das vorher nachschlagen
 
Zuletzt bearbeitet von einem Moderator:

joker123

Mitglied
ok, also ich bin mir dabei nicht sicher
aber ich versuchs mal hiermit

Java:
a = {1};   // startmenge
letztes_element = 1;   // zuletzt hinzugefügtes element
for i=1 to m do            
    if (((s(i) >= f(letztes_element)) OR (s(letztes_element) >= f(i)) then  // keine Überschneidung
        a = a U {i}   // i wird Teil der Lösung
        letztes_element = i;   // aktualisieren
    end
end
return a  // menge ausgeben

ich hoffe mal, dass man mit dem code etwas weiterarbeiten kann

danke
mfG
 
S

SlaterB

Gast
siehe auch mein vorheriges Posting,
als Ergänzung vielleicht noch der wichtigste Tipp: die Überschneidung erstmal außen vor lassen, bzw. kannst du ja gerne auch programmieren,
das ist eine Sache,
das Finden der potentiellen Lösungen ist dazu quasi eine komplett andere,

erst die Möglichkeiten bestimmen, jede einzelne dann prüfen -> Lösung oder nicht
 

joker123

Mitglied
hallo nochmal,

also ich wollte euch allen nochmal für die Hilfe danken, ich hab jetzt meinen Code soweit fertig, klappt nur noch nicht ganz.
aber das grundgerüst stimmt so, muss nur noch etwas an den Bedingungen arbeiten glaub ich

soll ich den code mal posten damit andere Benutzer sich mal inspirieren können falls sie mal ein ähnliches Problem haben ??
 

joker123

Mitglied
Java:
package scheduling.intervalpartitioning;

import java.util.Iterator;
import java.util.Stack;

public class IntervalPartitioning
{
	public static int solve(int m , int[] s, int[] f)
	{
		int parts = m;
		
		Stack<Integer> hs = new Stack<Integer>();
			
		final boolean[] in = new boolean[m];
		
		
		for(int j=0; j < m-1; j++)
		{
			if(!in[j])	 // falls das Intervall noch in keiner Partition ist	
			{   
				hs.add(j); //Intervall in die Partition einf¸gen
				System.out.println(j);
				for(int i=1; i < m-1; i++)
				{
				    // W¸rde jede anderes Intervall testen ob es noch in eine Partition hineinpasst
					if(isComp(s[i],f[i],hs,s, f) && !in[i])
					{
						hs.add(i);
						System.out.println("Test: "+i+" bestanden");
						in[i] = true; // Intervall ist jetzt in einer Partition drin und somit nicht mehr f¸r eine andere verf¸gbar
						parts--; // Anzahl partitionen herunterz‰hlen
						
						
					}
				}
				hs.clear();
				

			}
		}
		return parts;
	}
	public static boolean isComp(int s, int f,Stack<Integer> hs,int[] ints, int[] intf)
	{
		boolean ret = true;
		for (Iterator<Integer> i = hs.iterator(); i.hasNext();)
        {
			int t = i.next();
			// Testen ob der aktuelle Wert noch in die aktuelle Partition passt
			if(s<intf[t] || f>ints[t]) 
			{
				System.out.println(s+" < "+intf[t]+" oder "+ f+" > "+ints[t]+" => false;");
				ret = false;
				
			}
        }
		
		return ret;
		
		
	}
	public static void main(String [] args)
	{
		 final int m = 10;
	     final int[] s = { 9, 16, 17, 5, 3, 18, 14, 4, 14, 17 };
	     final int[] f = { 15, 25, 24, 12, 11, 19, 15, 8, 16, 24 };

        final int resultIntervalPartitioning = IntervalPartitioning.solve(m, s, f);
        System.out.println("resultat: "+resultIntervalPartitioning);
        
       
	}
}

klappt halt noch nicht ganz, bei den Zeilen 25-32 muss noch ein Fehler sein, da nie auf "true" umgeschaltet wird...vielleicht sieht jemand auf die schnelle den Fehler
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
wolfgang63 Best Practice Taktgeber oder Timer mit variablem Intervall Allgemeine Java-Themen 1
G Anzahl Primzahlen im Intervall Allgemeine Java-Themen 3
S Zahlenwerte in Intervall einschränken Allgemeine Java-Themen 2
X Vector in Intervall-Menge umwandeln Allgemeine Java-Themen 4
X intervall-operationen Allgemeine Java-Themen 6
R Intervall-Implementierung mit selbstgebauter LinkedList Allgemeine Java-Themen 7
M Intervall Programmieren ? Allgemeine Java-Themen 3
MiMa Grundsätzliche Frage zur Verwendung von Java Versionen?? Allgemeine Java-Themen 3
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
KonradN Java 19 Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
E Java und integrierte Grafikkarten Allgemeine Java-Themen 18
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
A Java unter Win 10 Allgemeine Java-Themen 1
B Woher kommen die Bildschirmkoordinaten beim java Robot? Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
T Java Robot Class - Bot Allgemeine Java-Themen 3
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
izoards Java Home Pfad unabhängig von der Version Allgemeine Java-Themen 7
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
berserkerdq2 Java sql Allgemeine Java-Themen 15
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
LimDul XSD To Java - Überschreiben von Assoziationen Allgemeine Java-Themen 1
Aartiyadav Comparisons and Swapa in Bubble-sort Java Allgemeine Java-Themen 6
KonradN Java 18 Allgemeine Java-Themen 8
N Statistische Auswertung von Logfiles (Einlesen, auswerten und grafische Aufbereitung von logfiles) mit Java Allgemeine Java-Themen 9
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17
M Verständnisfrage java.util.TimerTask Allgemeine Java-Themen 2
V Hilfe mit Java Code Allgemeine Java-Themen 4

Ähnliche Java Themen


Oben