Seite 1 von 1

Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 12. Mai 2020, 11:39
von Schlitzaaa
guten Tag,
iich wende mich erneut an das Forum
folgende Aufgabe ist gegeben:

Code: Alles auswählen

# Gegeben eine Liste von Zahlen, wobei alle Elemente paarweise verschieden sind.
# Finden Sie das Element x, zu dem es genau k-1 größere und n-k kleinere Elemente
# gibt, wobei n = Länge des Feldes bezeichnet.
nun habe ich ein Verständnisproblem:
k ist nicht definiert
und wenn ich den Gruppenleiter frage ist k = 1 bis n
was ja wieder jeder wert der liste sein kann bzw der länge der liste
das heißt eigentlich ist es die komplette liste.

habe mich mit 2 kommilitonen in verbindung gesetzt und beide auch kein plan was zu tun

vllt hat ja jmd von Ihnen eine Idee wie man das auffassen könnte

vorab vielen Dank

Mit freundlichen Grüßen
Lukas Sartowski

Re: Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 12. Mai 2020, 11:49
von nezzcarth
Ich würde das als Funktion umsetzen, die einen Wert k sowie eine Liste als Parameter erhält und das Element x zurück gibt. Anschließend kann man es mit beliebigen Werten und Listen testen.

Re: Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 12. Mai 2020, 12:02
von ThomasL
Du hast eine Liste mit n = 10 Elementen [1,2,3,4,5,6,7,8,9,10] die hier zufälliger Weise schon sortiert ist.
Nun lass mal k = 5 sein.
Finde das Element x, zu dem es genau 5-1=4 größere und 10-5=5 kleinere Elemente gibt.
Na, welche Zahl könnte das sein?
........
Genau, x = 6

Wenn k = 1, x = 10
Wenn k = 10, x = 1

So schwer ist es doch nicht. :-)

Re: Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 12. Mai 2020, 12:20
von Schlitzaaa
ThomasL hat geschrieben: Dienstag 12. Mai 2020, 12:02 Du hast eine Liste mit n = 10 Elementen [1,2,3,4,5,6,7,8,9,10] die hier zufälliger Weise schon sortiert ist.
Nun lass mal k = 5 sein.
Finde das Element x, zu dem es genau 5-1=4 größere und 10-5=5 kleinere Elemente gibt.
Na, welche Zahl könnte das sein?
........
Genau, x = 6

Wenn k = 1, x = 10
Wenn k = 10, x = 1

So schwer ist es doch nicht. :-)
Das Prinzip und ihr Beispiel verstehe ich definitiv
was verwirrt ist eben "*das* Element x" da es auf ein spez. element schließen lässt.

Code: Alles auswählen

n = len(A)
k = 1
for phase in range(1,n,1):
     for i in range(0,n-phase):
          if A[i] > A[i+1]:
               hilf = A[i]     #hilf = hilfsvariable
               A[i] = A[i+1]
               A[i+1] = hilf

for i in range(1,n):
#     print(A[n-k])
     print(A[n-k],':', 'Es gibt ', k - 1, 'größere Elemente und ', n - k, 'kleinere Elemente')
     k = k+1
Im Endeffekt wenn k nicht genauer definiert ist wäre das unser Code

Re: Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 12. Mai 2020, 14:38
von __blackjack__
@Schlitzaaa: Na wenn man ein k und eine Liste gegeben bekommt, dann gibt es unter den genannten Bedingungen auch *das* *eine* `x` was die Bedingungen erfüllt.

Re: Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 12. Mai 2020, 14:45
von __blackjack__
Lösung:

Code: Alles auswählen

from heapq import nlargest

A = range(1, 11)
k = 1

print(nlargest(k, A)[-1])

Re: Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 12. Mai 2020, 15:36
von ThomasL

Code: Alles auswählen

               hilf = A[i]     #hilf = hilfsvariable
               A[i] = A[i+1]
               A[i+1] = hilf
kann man in Python so verkürzen

Code: Alles auswählen

               A[i], A[i+1] = A[i+1], A[i]
Bezug nehmend auf mein obiges Beispiel, schau dir doch mal für jedes k den Index von x an
und versuche dann diesen Index in Abhängigkeit von n und k zu berechnen.

Re: Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 12. Mai 2020, 17:47
von nezzcarth
Schlitzaaa hat geschrieben: Dienstag 12. Mai 2020, 12:20 Im Endeffekt wenn k nicht genauer definiert ist wäre das unser Code
Die Aufgabe impliziert, dass ihr eine Lösung finden sollt, die generisch für beliebige den Kriterien entsprechende k und Listen das entsprechende Element x zurückliefert. Das ist in der Mathematik und Informatik doch ein übliches Abstraktionslevel. Als Programmierer ist es normalerweise sinnvoll, soetwa als Funktion zu implementieren. Zum Prüfen könnt ihr euch ja konkrete Werte und Listen ausdenken (am Besten nach Falltypen und unter Berücksichtigung von Randfällen). Mit dem von dir gezeigten Code ist das in der Form nur möglich, in dem man manuell im Quellcode k ändern. Das ist keine gute Lösung.

Re: Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 26. Mai 2020, 11:03
von Schlitzaaa
nezzcarth hat geschrieben: Dienstag 12. Mai 2020, 17:47
Schlitzaaa hat geschrieben: Dienstag 12. Mai 2020, 12:20 Im Endeffekt wenn k nicht genauer definiert ist wäre das unser Code
Die Aufgabe impliziert, dass ihr eine Lösung finden sollt, die generisch für beliebige den Kriterien entsprechende k und Listen das entsprechende Element x zurückliefert. Das ist in der Mathematik und Informatik doch ein übliches Abstraktionslevel. Als Programmierer ist es normalerweise sinnvoll, soetwa als Funktion zu implementieren. Zum Prüfen könnt ihr euch ja konkrete Werte und Listen ausdenken (am Besten nach Falltypen und unter Berücksichtigung von Randfällen). Mit dem von dir gezeigten Code ist das in der Form nur möglich, in dem man manuell im Quellcode k ändern. Das ist keine gute Lösung.
Mittlerweile kann ich sagen FALSCH ! der HiWi wusste selbst nicht was mit k tun...
er meinte zu mir k wäre ein beliebiger wert zwischen 1 und n
und in der Übungsgruppe sagte er er musste k einen wert zuweisen sonst bekäme er einen Fehler
aber in der Korrektur unserer Aufgabe sollte k auf einmal ein Benutzerwert sein
also Logik sehe ich da nicht wirklich so leid es mir tut

Re: Verständins einer Aufgabe und Umsetzung

Verfasst: Dienstag 26. Mai 2020, 12:17
von nezzcarth
Schlitzaaa hat geschrieben: Dienstag 26. Mai 2020, 11:03 Mittlerweile kann ich sagen FALSCH !
Ich verstehe nicht, wie du von deiner Erklärung auf diesen Schluss kommst. Deine Ausführungen scheinen meinen Vorschlag, das als Funktion zu implementieren, soweit ich das verstehe auch eher zu bekräftigen.