Verständins einer Aufgabe und Umsetzung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

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
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

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.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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. :-)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

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
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Lösung:

Code: Alles auswählen

from heapq import nlargest

A = range(1, 11)
k = 1

print(nlargest(k, A)[-1])
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12: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.
Schlitzaaa
User
Beiträge: 34
Registriert: Donnerstag 11. Januar 2018, 10:47

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
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

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.
Antworten