optimaler Zahlenwert / Analysis / Intervalle / Algorithmus / Programmierung |
| 10.10.2015, 14:25 | out4fame | Auf diesen Beitrag antworten » |
| optimaler Zahlenwert / Analysis / Intervalle / Algorithmus / Programmierung Ich habe mehrere Zahlenwerte: 91,87,72,82,68,103,98,105,113,70,125,91,92,103,110,104,115,97 und suche nach einem "optimalen Zahlenwert" der unabhängig von den gegebenen Zahlenwerten gewählt werden darf. Dieser "optimale Zahlenwert" wird um ein Drittel seines eigenen Wertes erweitert. Beispiel: angenommen der "optimale Zahlenwert" wäre 90, dann wäre 90 auf 120 erweitert (weil 90:3+90=120). Der "optimale Zahlenwert" ist der Wert, der die größte Anzahl an gegebenen Zahlenwerten "einschließt" und somit "gültige Zahlen" erzeugt. Eine "gültige Zahl" ist eine Zahl, die ? (größer-gleich) des "optimalen Zahlenwerts" ist und kleiner als der "optimale Zahlenwert" + ein Drittel seines Wertes. Angenommen der "optimale Zahlenwert" wäre 90, dann ist eine "gültige Zahl" ein Zahlenwert, der zwischen 90 und 120 liegt. 91(gültig),87(nicht gültig),72(nicht gültig), 113(gültig) etc. Ich werde nun das Ergebnis mit dem Zahlenwert 90 vorstellen und die gegebenen Zahlenwerte verwenden: 91,87,72,113,82,68,103,98,105,70,125,91,92,103,110,104,115,97,91,96,94,98,8 5 daraus ergeben sich die "gültigen Zahlen": 91,113,103,98,105,91,92,103,110,104,115,97,91,96,94,98 Der Zahlenwert 90(90+30=120)produziert somit 16 gültige Zahlen Ungültige Zahlen: 87,72,82,68,125,85 Der Zahlenwert 90 produziert 6 ungültige Zahlen. Wie bekommt man Aufschluss darüber, wie viele gültige und ungültige Zahlen die jeweiligen Werte zwischen 70 und 100 produzieren? Ein weiterer Aspekt ist, dass die Beispielwerte später ergänzt werden sollen, wodurch es sich bei dem ?optimalen Wert?, um einen dynamischen Wert handelt, der abhängig von den Beispielwerten ist. Kann bitte jemand die Lösung überprüfen, verbessern und mir bitte weiterhelfen mit der Programm-umsetzung (z.B. in Excel)? Kann das jemand in einem Programm umsetzen?? Ich bin damit total überfordert... LG Sebastian Meine Ideen: Ich habe folgenden Tipp bekommen: Suche zu jeder Zahl g der vorgegebenen Zahlenwert die Zahlen o, so dass die g im Gültigkeitsbereich von o liegt. Es soll o kleiner gleich g <vierdrittel o sein. (vierdrittel, wegen 1+ ein drittel = vierdrittel) Also: o kleiner gleich g < vierdrittel o o kleiner gleich g und g<vierdrittel o o kleiner gleich g und dreiviertel g< o dreiviertel g< o kleiner gleich g Zu jeder Zahl g wird also das Intervall (dreiviertel g;g] ermittelt. Beispiel für die Zahlenwerte: 70,34,60,43,98,36,94,57,32,39,107,32,38,51,112,42,80,59,33,49,45,60,56 70 (52,25;70] 34 (25,5;34] 60 (45;60] 43 (32,25;43] 98 (73,5;98] 36 (27;36] 94 (70,5;94] 57 (42,75;57] 32 (24;32] 39 (29,25;39] 107 (80,25;107] 32 (24;32] 38 (28,5;38] 51 (38,25;51] 112 (84;112] 42 (31,5;42] 80 (60;80] 59 (44,25;59] 33 (24,75;33] 49 (36,75;49] 45 (33,75;45] 60 (45;60] 56 (42;56] Nun muss man herausfinden, bei welchem Wert sich maximal viele der Intervalle überschneiden. --- Dazu folgender Algorithmus: 0. Die Zahlenwerte befinden sich in einer Liste L. 1. Sortiere die gegebenen Zahlenwerte in L entsprechend ihrer Größe. Wähle n:=0,z:=0. 2. Suche den größten in L verbleibenden Zahlenwert y. 3. Wähle x:=dreiviertel?y. 4. Zähle, wie viele der Elemente in L verbliebenen Elemente größer sind als x. Dies liefert einen Wert m. 5. Ist m>n, so setze n:=m und z:=x. 6. Streiche y aus der Liste L. 7. Ist L leer, so mache bei Schritt 8 weiter. Wenn L nicht leer ist, springe zu Schritt 2. 8. Wähle einen beliebigen Wert größer z, und kleiner oder gleich dem nächstgrößeren Wert in der ursprünglichen Liste. Dieser Wert ist "optimal". Algorithmus auf die Beispielwerte angewendet: L=[70,34,60,43,98,36,94,57,32,39,107,32,38,51,112,42,80,59,33,49,45,60,56] 1. L:=[32,32,33,34,36,38,39,42,43,45,49,51,56,57,59,60,60,70,80,94,98,107,112] ;n:=0;z:=0 2. y:=112 3. x:=84 4. m:=4 5. n:=4;z:=84 6. L:=[32,32,33,34,36,38,39,42,43,45,49,51,56,57,59,60,60,70,80,94,98,107] 7. 2. y:=107 3. x:=80,25 4. m:=3 5. 6. L:=[32,32,33,34,36,38,39,42,43,45,49,51,56,57,59,60,60,70,80,94,98] L=[];z=31,5;n=8 7. 8. Ende. ein optimaler Zahlenwert wäre 32 |
||
| 10.10.2015, 16:57 | HAL 9000 | Auf diesen Beitrag antworten » |
Scheint soweit Ok zu sein, aber ich sehe Optimierungspotential bei Punkt 4: In jeder Schleife zählen, wieviel Werte größer als x sind? Das geht besser, was sich insbesondere bei sehr großen Listen effizienzmäßig auszahlt: Bei einer wie in Schritt 1 vorsortierten Liste mit N Elementen lässt sich mühelos Aufwand O(N) für Rest des Algorithmus erreichen. |
||
| 11.10.2015, 12:25 | out4fame | Auf diesen Beitrag antworten » |
Danke für deine Antwort. Ich kann mir die Intervallgrößen zu den jeweiligen Zahlenwerten vielleicht in Excel ausgeben lassen und dann einfach die jeweiligen Intervalle nach Größe ordnen. |
||
|
|
Verwandte Themen
| Die Beliebtesten » |
|
| Die Größten » |
|
| Die Neuesten » |
|
