Matroids Matheplanet Forum Index
Moderiert von Bilbo matph
Matroids Matheplanet Forum Index » Informatik » Python Zeitfunktion gesucht
Autor
Schule Python Zeitfunktion gesucht
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2500
  Themenstart: 2021-08-09

Hallo, mein Programm wird ohne Zeitbremse gestartet. Ich frage jetzt, ob es einen Befehl gibt, der Lautet: Jetzt ist eine Stunde vorbei, brich ab an dieser Stelle, egal ob Du fertig bist ....


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2983
  Beitrag No.1, eingetragen 2021-08-09

Die einfachste Lösung wäre, ab und an die Systemzeit abzufragen und damit eine Abbruchbedingung zu steuern. Die Module time und datetime liefern eigentlich alles, was man dazu benötigt. Weiterhin würde ich die Programmlogik ernsthaft überdenken, wenn dein Programm länger als eine Minute läuft. In 99.9% der Fälle bedeutet das, dass du nicht dynamisch programmierst, sondern alle Arbeitsschritte tausendfach wiederholst.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2500
  Beitrag No.2, vom Themenstarter, eingetragen 2021-08-09

Gibt es ein website, wo die Module mit ihren Befehlen vorgestellt werden. Auf W2Scool find ich sie nicht....


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2983
  Beitrag No.3, eingetragen 2021-08-09

Klar gibt es dafür eine Webpage ...


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2500
  Beitrag No.4, vom Themenstarter, eingetragen 2021-08-09

\quoteon(2021-08-09 09:08 - DerEinfaeltige in Beitrag No. 1) Weiterhin würde ich die Programmlogik ernsthaft überdenken, wenn dein Programm länger als eine Minute läuft. In 99.9% der Fälle bedeutet das, dass du nicht dynamisch programmierst, sondern alle Arbeitsschritte tausendfach wiederholst. \quoteoff Danke für die Website, Einfältiger ... was mein konkret "dynamisch programmieren" ? tausendfach ... das würde bei Primorialen ja noch gehen .... als Rahmen hab ich gestern dies entworfen. Jetzt will ich eine externe Funktion bauen, die die im "unterstenDrittel" gemeinten Pz bearbeitet. Sie soll nur einen Wert erhalten und einen zurückgeben, muss aber sehr viel arbeiten (Verkürzung herstellen und Ketten durchrattern) \sourceon Python \numberson import matplotlib.pyplot as plt from openpyxl import Workbook from sympy.ntheory import isprime import numpy as np from sympy import sieve from sympy import primepi from math import sqrt from collections import Counter import Def_pzkleinerx Grenze=10 00 Start=10 y1=[] y2=[] y3=[] y4=[] y5=[] y6=[] unterstesDrittel=0 mittleresDrittel=0 oberstesDrittel=0 oberenzweiDrittel=0 Zahl=0 PZkleineri=0 x=np.arange(Start,Grenze,1) for i in range(Start,Grenze,1): Zahl=int(i//3)*2 PZkleineri=len(Def_pzkleinerx.def_pzkleinerx(i)) unterstesDrittel=len(Def_pzkleinerx.def_pzkleinerx(i//3)) mittleresDrittel=len(Def_pzkleinerx.def_pzkleinerx(Zahl))-unterstesDrittel oberstesDrittel=PZkleineri-(mittleresDrittel+unterstesDrittel) oberenzweiDrittel=PZkleineri-unterstesDrittel y1.append(i) y2.append(PZkleineri) y3.append(unterstesDrittel) y4.append(mittleresDrittel) y5.append(oberstesDrittel) y6.append(oberenzweiDrittel) plt.figure(figsize=(16,6)) plt.xlabel('x (Intervalls Länge = {i})') plt.ylabel('Anzahl') plt.title('Legende Quelle: ProjLeg/PythonProgr/PzinuwDritteln.py') plt.axis([Start, Grenze, -5, 200]) plt.grid(True) #plt.plot(x, y2, label=['Stellung', 'Anzahl Doppelte']) #plt.legend() plt.plot(x,y1,color="black",label=['n']) plt.plot(x,y2,color="green",label=['Pz in uw Dritteln']) plt.plot(x,y3,color="blue",label=['Pz im unteren Drittel']) plt.plot(x,y4,color="orange",label=['Pz im mittleren Drittel']) plt.plot(x,y5,color="yellow",label=['Pz im obersten Drittel/iI']) plt.plot(x,y6,color="red",label=['Pz in oberen zwei Drittel']) plt.legend() plt.show() \sourceoff


   Profil
Sismet
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 22.03.2021
Mitteilungen: 127
Wohnort: Heidelberg
  Beitrag No.5, eingetragen 2021-08-09

Hallo Bekell, zu deinem Programm und der Programmierlogik die derEinfaeltige angesprochen hat. Zunächst ist in Zeile 42 das falsch eingerückt, das 'plt.figure' sollte nicht in der for-Schleife stehen. Ein großes Problem bei deinem Programm sind die Zeilen 30-32. Ich weiß zwar nicht genau wie die Funktion 'def_pzkleinerx(i)' arbeitet aber so wie es aussieht übergibst du dieser Funktion eine Zahl und es wird eine Liste aller Primzahlen erzeugt die kleiner als die Zahl sind. Und das machst du in den zwei folgenden Zeilen jeweils nochmal. Diese Funktion ist vermutlich enorm Zeitaufwendig. Dir sollte zunächst klar sein das die beiden Aufrufe der Funktion in Zeile 31 und 32 unnötig sind. Die Werte die du da ermittelst stehen schon in deiner Liste y2 die musst du also nur rauslesen. Dann kommen wir zu dem letzten verbliebenen Funktionsaufruf von 'def_pzkleinerx(i)'. Auch diesen würde ich aus dem Programm nehmen. Ich vermute mal das die Funktion ungefähr so funktioniert: Du übergibst eine Natürliche Zahl i dann wird eine for-Schleife durchgelaufen bis zu der Zahl und jede Primzahl wird in eine Liste geschrieben die am Ende übergeben wird. Das ist auch unnötig aufwendig. Da dann in jedem Schritt i Zahlen auf Primzahlen Überprüft werden. Das macht bei 10000 Schleifen ca. 50 Millionen Überprüfungen ob eine Zahl eine Primzahl ist oder nicht. Das geht natürlich besser. Ich würde an deiner Stelle daher nochmal die Schleife überarbeiten. Ich hab ein Programm geschrieben dass mit Grenze=10000 nach ca. 0.04 Sek ein Ergebnis liefert und bei Grenze=1000000 ca. 6sek und das ist bestimmt nicht optimal. Die Liste y1 ist im Übrigen auch unnötig da die gerade x entspricht. Viele Grüße Sismet


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2500
  Beitrag No.6, vom Themenstarter, eingetragen 2021-08-10

\quoteon(2021-08-09 23:42 - Sismet in Beitrag No. 5) Hallo Bekell, zu deinem Programm und der Programmierlogik die derEinfaeltige angesprochen hat. \quoteoff Danke \quoteon Zunächst ist in Zeile 42 das falsch eingerückt, das 'plt.figure' sollte nicht in der for-Schleife stehen. \quoteoff ..hatte es schon bemerkt und im original verbessert... \quoteon Ein großes Problem bei deinem Programm sind die Zeilen 30-32. Ich weiß zwar nicht genau wie die Funktion 'def_pzkleinerx(i)' arbeitet aber so wie es aussieht übergibst du dieser Funktion eine Zahl und es wird eine Liste aller Primzahlen erzeugt die kleiner als die Zahl sind. \quoteoff genau so... die 2 will ich nicht drin haben \quoteon Und das machst du in den zwei folgenden Zeilen jeweils nochmal. Diese Funktion ist vermutlich enorm Zeitaufwendig. Dir sollte zunächst klar sein das die beiden Aufrufe der Funktion in Zeile 31 und 32 unnötig sind. Die Werte die du da ermittelst stehen schon in deiner Liste y2 die musst du also nur rauslesen. \quoteoff Funktionen sind wohl immer zeitaufwendiger? \quoteon Dann kommen wir zu dem letzten verbliebenen Funktionsaufruf von 'def_pzkleinerx(i)'. Auch diesen würde ich aus dem Programm nehmen. Ich vermute mal das die Funktion ungefähr so funktioniert: Du übergibst eine Natürliche Zahl i dann wird eine for-Schleife durchgelaufen bis zu der Zahl und jede Primzahl wird in eine Liste geschrieben die am Ende übergeben wird. Das ist auch unnötig aufwendig. Da dann in jedem Schritt i Zahlen auf Primzahlen überprüft werden. Das macht bei 10000 Schleifen ca. 50 Millionen Überprüfungen ob eine Zahl eine Primzahl ist oder nicht. Das geht natürlich besser. Ich würde an deiner Stelle daher nochmal die Schleife überarbeiten. \quoteoff .. mach ich auf jeden Fall :-) \quoteon Ich hab ein Programm geschrieben dass mit Grenze=10000 nach ca. 0.04 Sek ein Ergebnis liefert und bei Grenze=1000000 ca. 6sek und das ist bestimmt nicht optimal. Die Liste y1 ist im Übrigen auch unnötig da die gerade x entspricht. \quoteoff Ja, wo ist denn Dein Programm? Poste es doch bitte hier.... ich hab ja mein Originalprogramm fast fertig, und es funzt auch, aber es ist so unübersichtlich, dass man es niemandem zutrauen kann, deswegen will ich es jetzt noch mal machen, aber alles in Funktionen verpackt, damit ich die einzelnen logischen Schritte meiner Rechnung auch programmmässig gut verfolgen kann. Verbesserungen nehm ich immer gerne, unter einer Bedingung: Ich muss sie verstehen. (Bin kein Profi-Programmierer)


   Profil
Sismet
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 22.03.2021
Mitteilungen: 127
Wohnort: Heidelberg
  Beitrag No.7, eingetragen 2021-08-10

\sourceon Python \numberson from sympy.ntheory import isprime as ip import matplotlib.pyplot as plt import numpy as np import time startime=time.time() #Dient nur der Zeitmessung x=np.arange(0,10000,1) y1=[] y2=[] y3=[] y4=[] y5=[] count=0 for i in x: if ip(i): #Zählt die Primzahlen count+=1 y1.append(count) y2.append(y1[i//3]) #unteres Drittel y3.append(y1[(i//3)*2]-y2[i]) #mittleres Drittel y4.append(count-y1[(i//3)*2]) #oberes Drittel y5.append(count-y2[i]) #obere zwei Drittel endtime=time.time() #Dient nur der Zeitmessung print(endtime-startime) plt.figure() #Ab hier wird nur noch geplottet plt.plot(x,x) #n plt.plot(x,y1) #Primkleiner n plt.plot(x,y2) #unteres Drittel plt.plot(x,y3) #mittleres Drittel plt.plot(x,y4) #oberes Drittel plt.plot(x,y5) #obere zwei Drittel plt.show() \sourceoff


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2500
  Beitrag No.8, vom Themenstarter, eingetragen 2021-08-11

Danke sismet, kannst Du mir die Bedeutung der eckigen Klammern im Append erläutern? \sourceon Python \numberson y2.append(y1[i//3]) \sourceoff Das hatte ich noch nicht ....


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2983
  Beitrag No.9, eingetragen 2021-08-11

list-Documentation


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2500
  Beitrag No.10, vom Themenstarter, eingetragen 2021-08-11

\quoteon(2021-08-11 09:33 - DerEinfaeltige in Beitrag No. 9) list-Documentation \quoteoff aha, er fügt in y1 den Wert aus der Liste y1 ein, der an i//3 Stelle steht..... sehe ich das richtig? Anstelle des Indexes steht bloss die Formel i//3


   Profil
Sismet
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 22.03.2021
Mitteilungen: 127
Wohnort: Heidelberg
  Beitrag No.11, eingetragen 2021-08-11

Hey, ja genau ich lese aus y1 den Wert an der Stelle i//3 in y2 ein. y1[i//3] entspricht dabei gerade len(Def_pzkleinerx.def_pzkleinerx(i//3)) aus deinem Programm.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2500
  Beitrag No.12, vom Themenstarter, eingetragen 2021-08-11

Danke Sismet und Einfältiger. das war ja nur der Rahmen, jetzt zu dem, was in die eine Funktion soll, die in die For-Schleife kommt.ich muß das etwas länger erläutern. Wir erhalten ja eine Liste von Pz (unterstes Drittel). Dazu haben wir den Wert n (Code-Länge). Bislang habe ich es so gemacht, dass ich alle möglichen Codes, bei den Pz 3,5,7 sind es 105 Möglichkeiten habe ausdrucken lassen. Aber das ist überflüssig, weil ich nur an ganz bestimmten Varianten interessiert bin zur weiteren Untersuchung. (Hintergrund: Primorial der beteiligten Pz.) Ich habe zu jeder Variante den Code zu gestalten zwei Bestimmungscodes berechnet. Der Erste ist der Startcode. Er ist solange, wieviele Pz im Code beteiligt sind, und bestimmt den Einsatz des ersten Exemplares. \sourceon Python n= 29 Nr: 105 Version 3 5 7 MaxMincode [0, 0, 0] 000 Bestückung der Zeilen {1: [], 2: [], 3: [3], 4: [], 5: [5], 6: [3], 7: [7], 8: [], 9: [3], 10: [5], 11: [], 12: [3], 13: [], 14: [7], 15: [3, 5], 16: [], 17: [], 18: [3], 19: [], 20: [5], 21: [3, 7], 22: [], 23: [], 24: [3], 25: [5], 26: [], 27: [3], 28: [7], 29: []} \sourceoff Im Beispiel steht der Startcode hinter dem Wort Version, und ist 3 5 7, und er bedeutet, daß die 1. Drei auf der 3. Stelle steht, die erste Fünf, auf der 5. Stelle u.s.w. u.s.f. Der 2. Code ist der MaxMincode. Er besagt, ob die Zeile minimal oder maximal bestückt ist. Hier ist er 0,0,0 und meint, die Zeile für 3 ist minimal, die Zeile für 5 ist ebenfalls minimal, und die Zeile für 7 ist auch minimal bestückt. Hat man beide Codes, ist die Variante eindeutig bestimmt. (Im Grunde ist die jeweilige Variante schon durch den Startcode allein bestimmt, aber ein bischen Redundanz bringt Denk- und RechenSicherheit.) Ich bin jetzt für eine bestimmte Operationen nur auf die Varianten mit dem MinMaxcode 1,1,1, und 0,0,0 scharf, auch weil ich glaube, dass dadurch die Variantenproduktion der gigantischen Primorialschleifen gebremst, also, die Anzahl der zu untersuchenden Varianten erheblich gemindert wird. Deshalb meine Frage: Ist es sinnvoll strategisch so vorzugehen, zuerst einmal nur die StartCodes der interessierenden Varianten zu produzieren, und dann die Varianten selber und diese zu untersuchen, oder brute-force - bis 37 sind es schon 1155, bis 41 sind es 15015 u.s.w u.s.f. die Primorialschleifen durchlaufen zu lassen? Wie gesagt, bis n=1000 wären im untersten Drittel schon 3,5,7,11,.... Pz Nr. 55 an Codevarianten zu untersuchen. Ich glaube, da bricht mein Mac mit zusammen... Irgendjemand hatte gesagt, if's bremsen vielmehr als for's. leider hab ich momentan nur gebremst Zeit zu diesen Dingen hier, aber es wird sich hoffentlich bald ändern ....


   Profil
Bekell hat die Antworten auf ihre/seine Frage gesehen.
Bekell wird per Mail über neue Antworten informiert.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]