Archive for the ‘Allgemein’ Category

Und zwei letzte Zitate aus „SF im Allgemeinen und Lem im Besonderen„.

In Huxleys Version [Anm.: gemeint ist der Roman „A Brave New World“] […] bedarf es keines Großen Bruders […]. Er rechnete mit der Möglichkeit, daß die Menschen anfangen, ihre Unterdrückung zu lieben und die Technologien anzubeten, die ihre Denkfähigkeit zunichte machen. […]

Orwell fürchtete jene, die dem Menschen Informationen vorenthalten; Huxley die, die die Öffentlichkeit mit Informationen so überhäufen, daß man sich vor ihnen nur in Passivität und Selbstbespiegelung retten kann.

Selbstbespiegelung und Passivitaet – Trotz des vielen (mMn leeren) Gestammels, warum es denn so „revolutionaer“ und „wichtig fuer moderne Kommunikation“ waere, erinnert mich dies doch alles sehr an Twitter (als prominentesten Vertreter nenne ich nur dies). Als Beispiel mag da „Schneegida“ dienen. Meiner Meinung nach ein Paradebeispiel der Selbstbespiegelung und Passivitaet. Aber ich mag nicht weiter in diese Richtung abschweifen.

Denn all dies ist schøner zusammengefasst in diesem Zitat:

[…] der Menschheit [bleiben] im Umgang mit Technologie nur zwei Möglichkeiten […]: entweder muß sie „den Himmel stürmen“, oder sich abkapseln und die Technologie zur eigenen Bequemlichkeit nutzen.

Und wo ist sie denn? Die naechste Mondlandung? Diese Frage ist sowohl im technischen, als auch im gesellschaftlichen Sinne gemeint. Sind es die neuen Smart Spionagetelefone? Technisch kønnte es die Energiewende sein, aber gesellschaftlich ist sie es nicht.

Ach verdammter Mist :( … so negativ … so kompliziert … so viel … ich breche an dieser Stelle ab. Ich mag gerade nicht mehr. Die Begruendungen fuer das jeweils eigene Verhalten sind zu „wasserdicht“ … und auszerdem …

Am 1986-04-26 geschah das bisher am besten dokumentierte (und ich wage auch des am besten verstandene) Kernreaktorunglueck.

Mich duenkt vor fast 10 Jahren stolperte ich zufaellig ueber einen Bericht der Gesellschaft für Anlagen- und Reaktorsicherheit mit dem Titel: „Der Unfall und die Sicherheit der RBMK-Anlagen„. Bis vor kurzem hatte ich es noch nicht geschafft den zu lesen.

Der Bericht ist zwar bereits von 1996, aber nichtsdestotrotz lesenswert, wenn man sich ganz im Allgemeinen dafuer interessiert. Soweit der beste Beitrag zu diesem Thema, den ich gelesen habe. Verstaendlich und sachlich geschrieben und bisher der einzige Bericht zum Tschernobyl-Reaktor-Unglueck, der nicht diese sonst so oft mitschwingende „westlichen Arroganz“, bzw. „westliche Agenda“ enthaelt.

Wieauchimmer, es geht mir eigentlich gar nicht um diesen Bericht an sich. War er letztlich doch nur der Ideengeber fuer diesen Beitrag.

– Gedankensprung –

Maszgebliche Unfallursachen waren Inkompetenz (dieser Begriff fasst sehr viel zusammen), Missachtung vorhander Sicherheitsregeln, technische Maengel und die Physik. Wer sich fuer Details bzgl. den ersten drei Ursachen interessiert, empfehle ich den obigen Bericht. Hier soll nur einer der physikalischen Gruende weiter diskutiert werden – der positive Dampfblasenkoeffizient.

Was ist das eigentlich und warum ist dieser (so weit ich weisz) die letztliche Ursache fuer die Zerstørung des Reaktorblocks 4 des Tschernobyl-Kraftwerks gewesen?

Wie man bei wikipedia lesen kann ist der Dampfblasenkoeffizient …

… ein Maß für die Veränderung der Reaktivität eines Kernreaktors bei Bildung von [Blasen oder Løchern] im Kühlmittel oder im Moderator.

Und alles was mit Aenderungen der Reaktivitaet zu tun hat, ist wichtig fuer die Sicherheit eines Kernreaktors.

In „westlichen Anlagen“ muss vom technischen Design sichergestellt sein, dass diese Grøsze IMMER negativ ist, in kurz: wenn das Kuehlwasser auslaeuft, muss sich der Reaktor automatisch abschalten.

Bei Anlagen vom RBMK-Typ hingegen ist dieser Koeffizient positiv. Das heiszt also, dass es zu mehr Kernreaktionen kommt, wenn das Wasser auslaeuft. Die geneigte Leserin bzw. der geneigte Leser mag sch selber vorstellen, dass das schnell bøse enden kann.

Warum verhalten sich Anlagen vom RBMK-Typ derart?

Dafuer muss ich etwas weiter ausholen.
Bei einer Urankernspaltung entstehen 2-3 sogenannte „schnelle“ und „langsame“ Neutronen. Nur langsame Neutronen kønnen einen Kern spalten. Die Anzahl der schnellen Neutronen ueberwiegt allerdings und deswegen laeuft eine einmal in Gang gesetzte Kernspalung nur unter zwei Bedingungen weiter:
1.: Es ist genug spaltbares Material vorhanden fuer die wenigen langsamen Neutronen. Dies wird in Atombomben gemacht.
2.: Die schnellen Neutronen werden gebremst, sodass diese dann eine weitere Kernspaltung ausløsen kønnen. Dies nennt man moderieren und dafuer zustaendig ist der bereits weiter oben erwaehnte Moderator.

Als Moderator in Kernspaltungreaktoren kønnen verschiedenste Materialien eingesetzt werden. Wohl am bekanntesten, und mich duenkt auch am gebraeuchlichsten, ist Wasser.

Bei Anlagen vom RBMK-Typ hingegen wird als Moderator Graphit eingesetzt. Das Wasser im Reaktor dient (eigentlich) nur der Kuehlung. Es hat zwar auch eine moderierende Wirkung, diese ist aber klein genug, sodass sie im betrachteten Szenario nicht beachtet werden muss.

Wenn die Leistung eines Reaktors zu nimmt, dann steigt die Temperatur. Das bedeutet, dass das Wasser heiszer wird. Und heiszes Wasser kocht. Es bilden sich also Blasen (deswegen auch „Dampfblasen“-koeffizient).

Wasserdampf hat aber eine deutlich geringere Dichte als fluessiges Wasser. Das bedeutet einerseits, dass wenn Wasser als Moderator eingesetzt wird, dies natuerlich gut ist. Werden bei steigender Reaktorleistung, wenn gleichzeitig das Wasser nicht weiter flieszt, deswegen weniger Neutronen gebremst und die Rate der Kernspaltungen nimmt automatisch ab.

Bei der Explosion des Tschernobyl-Reaktorblocks 4 kommt allerdings eine zweite Eigenschaft des Wassers ins Spiel: es absorbiert Neutronen auf ihrem Weg zum Moderator.

Wenn durch mehr Dampf also weniger Wasser vorhanden ist, dann bedeutet das, dass MEHR Neutronen das Graphit erreichen. Dadurch werden mehr Neutronen gebremst und løsen mehr Kernspaltungen aus. Dadurch steigt die Leistung und damit die Temperatur. Ein Teufelskreis.

Und genau das ist passiert, heute 01:24 vor 29 Jahren, in besagtem Reaktor.

Uebrigens kam es im Tschernobyl-Reaktorblock 4 so weit ich weisz und das verstanden habe, wohl tatsaechlich zu einer Kernexplosion. Waehrend es im Fukushima Daiichi Kernkraftwerk wohl „nur“ zu einer Explosion des angesammelten Wasserstoffs kam.

Lang und breit habe ich mich hier darueber ausgelassen, wie dumm doch der Computer ist und was ich mir ueberlegen musste, um den dazu zu bringen, das zu machen, von dem ich wollte, dass es gemacht wird.

Irgendwann hab ich dann mal mit einem erfahreneren Programmierer (ich mag nicht „richtiger Programmierer“ sagen, denn ich programmiere ja auch richtig) geredet. Und der hat mir mal die Nuetzlichkeit des Konzepts von sog. „Dictionaries“ naeher gebracht.
Das war mir vorher schon bekannt. Ich hatte darueber schon gelesen und formal hatte ich das auch begriffen. Aber die Fibonacciuebung war das „erste Programmierding nach einer laengeren Pause“ und da griff ich natuerlich auf Konzepte zurueck, die mir wohlbekannt waren.

Die Tabelle im obigen verlinkten Beitrag ist ja im Wesentlichen ein dreidimensionales Feld. Der Computer unterscheidet zuerst wie lang die zu untersuchende Zeichenkette sein soll, dann, welche Zeichenkette es ist und letztlich wie oft die vor kommt.
Schlieszlich muss dann zwischen Zahlen und Zeichen unterschieden werden Zeichenketten („0002“) wurden in Zahlen (2) umgewandelt usw. usf. Ich beschrieb das ja alles schon.

Bei einem Dictionary hab ich diesen ganzen Kram nicht. Ein Dictionary merkt sich halt einen Eintrag und was dann dazu steht. Sozusagen so:

„1“ : 15 mal, „2“ : 3 mal, … , „002“ : 5 mal, … , „0007“ : 35098 mal, …

Der Vorteil liegt also auf der Hand: Zeichenketten mit fuehrenden Nullen kønnen direkt so behandelt werden. Es muss also kein „Trick“ ausgedacht werden, der das „Abschneiden von fuehrenden Nullen“ bei der Umwandung von Zeichenkette zu Zahl beruecksichtigt.

Ein weiterer Vorteil eines Dictionary ist, dass ich auf ein bestimmtes Element ganz einfach und direkt zugreifen kann. Kommt in der Folge also bspw. die Zeichenkette „0345“ vor, so schlage ich im Dictionary nach, wie der Wert von „0345“ ist (und erhøhe den dann um eins). Ich muss also nicht erst herausfinden, in welchem Feld denn nun die Erhøhung stattfinden muss.

Dies alles macht den Code deutlich lesbarer und spart vor allem Rechenzeit.

Ich habe die Rechenzeiten fuer die verschiedenen Parameter nochmals analysiert und die hier angegebenen Zeiten wurden auf 1/3 reduziert.

Das ist zwar keine Grøszenordnung, aber doch betraechtlich.

Toll wa! Was man alles lernen kann, wenn man mal mit Leuten redet, die sich auskennen.

 

Als Abschluss dieser Miniserie møchte ich gern auf ein Artefakt der Datenaufbereitung aufmerksam machen.

Wie hier erwaehnt, erstellte ich ein Histogramm der Daten. Ansonsten waere das alles naemlich nicht vernuenftig darstellbar / zu interpretieren gewesen. Dabei werden die Daten in eine bestimmte Anzahl (ich waehlte 100) gleich weite „Balken“ auf der Abzisse eingeteilt. Alles soweit ok und erstmal kein Problem.

Manchmal jedoch kommt es so vor, dass die Weite der Balken derart ist, dass (ehr vereinfacht ausgedrueckt) jeder zweite Wert „links“ der Grenze gezaehlt wird und die restlichen Werte „rechts“ der Grenze. Das Ganze sieht dann so aus:

12_Artefakt

Eine Art „Doppelpeak“.
Da hab ich natuerlich erstmal nicht schlecht geguckt.

Aber das laeszt sich ganz leicht løsen, indem man entweder die Breite der Balken veraendert, oder die Startpunkte aller Balken um einen gewissen Wert verschiebt.

Ich fand das witzig und wollte es euch, meinen lieben Leserinnen und Lesern, nicht vorenthalten.

 

Das war es dann nun tatsaechlich mit der Analyse der Fibonaccifolge.

Das war eigentlich mehr so fuer mich die Dokumentation einer Sache, welche mir in allen Punkten (Idee entwicklen, programmieren, Fehler entdecken und ueberwinden und letztlich die erhaltenen Daten auswerten) grosze Freude bereitete. Und einen Teil der Freude wollte ich auch gern weitergeben.

TMV

Ich wusste gar nicht, dass die hier ein eigenes Uferbauwerk haben:

TMV-kaia

Das war ja ganz schøn konfus letztes Mal.

Das haengt stark mit dem hier zusammengefassten Thema zusammen.

Einige Personen sagten mir, dass ich ziemlich viel lese. Dass es sich dabei nicht nur um die Anzahl der Seiten handelt, thematisierte ich etwas hier.

Und das stimmt mglw. Ueber die letzten (mehr als) 10 Jahre, habe ich zu so vielen Dingen was gelesen.

Das ganze Dilemma ist allerdings, dass alles so kompliziert ist.
Auszerdem mangeln mir die Faehigkeiten, das Wesentliche zu einem Thema in kurzen Beitraegen zusammen zu fassen.
Was nicht zuletzt auch daran liegt, dass ich meine eigene Meinung nicht heraus halten møchte.

Es liegt aber auch daran, dass ich allermeistens „fallbasiert“ an die Sache heran gehe (Arztkittel, Schuhe ausziehen). So werde ich auf ein Thema aufmerksam und der „Einstieg“ ist damit auch leichter. Aber die Zusammenhaenge werden dadurch nicht erklaert. Das ergibt sich erst aus dem jahrelangen beschaeftigen mit einem Thema.

Nehmen wir das Beispiel „Gleichstellung“, welches hier ja øfter mal Thema ist. Da kam ich ueber „Frauen sollten gleich behandelt“ werden, erst nach langer Zeit zu ganz diffusen Vorstellungen davon, wie die Strukturen der Gesellschaft am Erhalt des Status Quo beitragen. Und wie dies mit anderen Sachen (Unrecht gegenueber LGBT-Menschen, Nerds und Geeks, Frauen in Techberufen etc. pp.) zusammenhaengt.

Aber das brauchte so viele Jahre.

Und so ist das bei fast allen Themen.

Ich versuche Beispiele zu bringen, die meine Meinung unterstuetzen. Und das ist total sinnvoll fuer mich. Da „verzettele“ ich mich dann (fuer mich ist das ja irgendwie klar, wie das eine mit dem anderen zusammenhaengt) und merke das erst viel spaeter.

Und deswegen konnte ich im letzten Beitrag hierzu nicht erklaeren, warum ich der Meinung bin, dass Scott Adams zu Unrecht rumheult!

Deswegen versuche ich es nochmal.

Wenn wir an Science glauben, so ist das mehr unsere eigene Wahl, als bei vielen anderen Religionen.
Anders als die Dogmen anderer Religionen hat die Wissenschaft aber einen automatischen Korrekturmechanismus. Naemlich die wissenschaftliche Methode. Und hier kommt die eigene Wahl ins Spiel: wir waehlen bewusst, uns nicht mit einem Thema zu beschaeftigen, sondern auf „andere Leute“ zu høren. Was fuer Gruende das auch immer sein møgen.
Meiner Meinung nach ist es jetzt aber ein „bockiges-Kind-Verhalten“, Science zu beschuldigen, dass sie unseren Glauben (!) in Frage stellt. Denn DAS ist genau das, was Wissenschaft macht! Sie schafft Wissen (!) und das geht nur indem man Dogmen ueberwindet.
Die Frage ist dann nur, inwiefern der einzelne diese Dogmen bereit ist zu ueberwinden.

Man kønnte unterstellen, dass Science nach dem Besten, zu einer gegebenen Zeit vorhandenen, Wissen handelt. (Da lassen wir die Interessen von Konzernen mal auszen vor.)

Oder wieder ein Beispiel:
Jahrzehntelang wurde ein Mittel verschrieben, das gut fuer’s Herz ist. Dies deswegen, weil es sich in einer Studie zu dem Medikament als Nebeneffekt herausstellte. Das war (mich duenkt) in den 50’er Jahren. Dann in den 70’er und 80’er Jahren stellte sich mehr und mehr heraus, dass ein leicht gegenteiliger Effekt eigentlich der Fall ist. Wissenschaft hat dann zum Glueck dafuer gesorgt, dass das bestehende Wissen revidiert und das Medikamen nicht weiter verschrieben wurde.
Warum war das so? Es stellte sich dann heraus, dass an der Studie vor allem gut situierte Hausfrauen teilnahmen. Diese hatten genug Zeit, Sport zu treiben. Und deswegen tauchte in der Studie auf, dass die teilnehmenden Personen im Durchschnitt gesuendere Herzen hatten.
Die Studie wurde aber zu einem Zeitpunkt durchgefuehrt, als all dies noch in den Anfaengen steckte. Man wusste schlicht und einfach nicht, dass zu einem Medikamententest mehr gehørt, als Personen nur das Medikament zu geben und zu schauen, was passiert.
Heutzutage weisz man das.

Es ist furchtbar tragisch, dass Menschen deswegen starben, weil sie dieses Medikament bekamen, obwohl sie es nicht haetten bekommen duerfen.

ABER (!!!) es ist kein Fehler der Wissenschaft, dass etwas nicht beruecksichtigt wurde, von dem keiner wusste, dass es das ueberhaupt gibt.
Insb. auch deswegen nicht, weil eben jene Selbstregulierungsmechanismen (vuglo: die wissenschafliche Methode) ja doch funktioniert haben!

Das aber macht Scott Adams. Er stellt Science in Frage und nicht sein eigenes (semi(?)-blindes) Folgen der Dinge, die andere Personen sagen.

 

Und das im Uebrigen hat auch ueberhaupt nichts mit „irgendwie ist der Skeptizismus der Klimaspinner ja zu verstehen“ zu tun! Ignorieren von Daten und der wissenschaftlichen Methode ist purer Aberglaube, so wie jeder andere Aberglaube auch!

 

Wieder zu viel, wieder Beispiele, wieder kein richtiger Zusammenhang *seufz*.

In „Science Biggest Fail“ macht Scott Adams meiner Meinung nach den Fehler, dass er wen anders (Science) beschuldigt bzgl. etwas, an dem er selber Schuld ist.

Warum ist es seine eigene Schuld, dass Sachen, die so-und-so gesagt wurden, pløtzlich ganz anders sind?

Der Gruende gibt es viele.

Der erste und wichtigste ist, dass Herr Adams erwartet, dass Science „die Wahrheit“ spricht.
Naaaaaaa? Erkennen meine lieben Leserinnen und Leser worauf ich hinaus will?
Genau: Zum Einen wurde der Prediger, welcher aus einem nicht in Frage zu stellendem Buche von der Kanzel vorliest, wurde durch den Universitaetsprofessor und Artikel in Nature, und anderen wissenschaftlichen Zeitungen, ersetzt.

Das ist Obrigkeitshørigkeit und funktioniert ganz wunderbar. Wir glauben nicht an Gott, aber an „die Wissenschaft“. Sieht manja nicht zuletzt auch an den vielen „Experten“ in den Medien.

Eine Professorin _muss_ (!) ja recht haben! (Vulgo: alles was sie spricht _muss_ ja die Wahrheit sein). Gehørt die doch schlieszlich zur „Speespitze der Intelligenz“. … Und wenn es dann auch noch in der Zeitung steht … !!!
Ein ganz hervorragendes Dogma.

Aber uh oh … Nun sagt der neue Priester Professor was ganz anderes … NEEEEEEEE! DAS geht nun wirklich nicht! Das ist nicht das woran ich geglaubt habe! Dann kann ich auch nicht mehr an Science glauben!
Und das ist auch ueberhaupt gar nicht meine eigene Schuld, dass ich vom Glauben abfalle. Ist doch gar nicht meine Verantwortung dass ich diesem Dogma folgte!

Maybe science is what needs to improve, not the citizens.

*kotz* … wobei ich ihm natuerlich recht gebe, wenn man die (im ersten Beitrag erwaehnte) „neue Definition“ von Science bedenkt.

Aber es ist natuerlich schwer (ehrlich gemeint, keine Ironie) zuzugeben, dass man bereitwillig an etwas glaubte, was wer anders gesagt hat. So musste man die vielen Artikel nicht selber lesen. So musste man nicht selber versuchen die Fehler in Studien zu erkennen. Das mache ich ja auch.

 

Zweitens macht er einen indirekten Fehler, den ich mal als „Das war doch schon immer so“ umschreibe.

Die Wissenschaft, so wie wir so romantisieren, gibt es im wesentlichen erst seit nach dem 2. Weltkrieg. Das ging zwar alles bereits um den 1. Weltkrieg los, aber wurde nicht vor dem 2. Weltkrieg so „grosz“ wie wir es heute kennen.
Und alles was es schon gab, bevor man selber bewusst in der Welt lebte, ist irgendwie „schon immer dagewesen“.

Was will ich damit sagen?

Die uns bekannten Kenntnisse, sind noch gar nicht so alt. Und wir sind im Wesentlichen immer noch dabei heraus zu finden, was funktioniert und was nicht.

Nehmen wir bspw. den Arztkittel. Weisze Reinheit. Ein Symbol fuer Sterilitaet.
Seit Jahrzehnten weisz man, dass genau das Gegenteil der Fall ist. Aerzte werden seit Jahren angehalten, ihre ganz normale (frische) Kleidung bei Krankenbesuchen zu tragen, weil die weniger Keime transportiert, als Arztkittel. Aber diese Erkenntnis setzt sich erst langsam durch. Warum?
Bis ca. in die 50’er/60/er Jahre waren die allgemeinen hygienischen Verhaeltnisse derart schlecht, dass der Arztkittel tatsaechlich besser war als Alltagskleidung. Als Stichwort sei hier auf Ignaz Semmelweis verwiesen. Dann wurde dieses allgemeine Problem aber schrittweise geløst und der Arztkittel wurde ein Problem.

Wir haben also etwas, was bald ein Jahrhundert „wahr“ war. Alle haben das gelernt. Dann trifft es aber nicht mehr zu. Aber wir haben es doch so gelernt. Es ist schwer, vom Glauben abzukommen. Das war doch schon immer so.

Da muss die naechste Generation ran und das aendern. Die werden aber von uns „Altglaeubigen“ unterrichtet. Da schleift sich die alte Erkenntnis also noch ein bisschen mit, bevor es dann ausgemerzt ist.

Oder bis der Arztkittel dann in einen richtigen Kontext einsortiert ist.

Bzgl. Sterilitaet und Reinheit gibt es noch so ein Ding. Es wurde gelernt, dass das wichtig ist, um Krankheiten nicht zu verbreiten. Forschung zeigt aber, dass aber mglw. durch zu wenige „Keime“ die Entstehung von Allergien beguenstigt werden.

Aber ich kenne mich da nicht aus.

Oder nehmen wir doch das „Schuhe in der Wohnung ausziehen“. Dies macht man um keinen Dreck in die Whg. zu tragen. Aber an einem normalen Tag, sind unsere Schuhe dreckiger als die Pantoffeln, die wir jahrelang auch in der Kueche tragen, wo ja doch ab und zu mal was runterfaellt, ohne, dass man es bemerkt? Ist da Kuhmist dran? Oder Schlamm, weil die Strasze nicht betoniert ist?
Ich rede nicht von Regenwetterschuhen, aber der Partybesuch kønnte an einem Sommertag doch auch mal die Schuhe anlassen, nicht wahr? Die Chipskruemel nach dem Feste sind mehr Dreck, als das bisschen Sand.

Der Punkt des Ganzen soll sein: Wir arbeiten mit Erkenntnissen, die lange richtig waren. Wir haben die lieb gewonnen.
Neue Erkenntnisse brauchen aber eine Weile, bevor sie von der Allgemeinheit akzeptiert werden.
Das ist dann aber kein Fehler von Science, sondern das ist einfach so.

Und nochmal zurueck zu“erst nach dem 2. Weltkrieg“.

Vorher waren die Erkenntnisse und damit geløsten Probleme „grosz“ und allgegenwaertig (Hygiene bspw.) und konnten durch einfache Masznahmen angegangen werden. Das brauchte dann natuerlich nicht viel Forschung um die Zusammenhaenge zu erkennen und einen nachhaltigen Einfluss zu haben.

Vieles ist aber deutlich komplexer als es erstmal scheint. Das braucht dann aber viel Forschung und viel Geld und viel Zeit um es zu verstehen.
Das dauert eine Weile das alles zusammen zu bekommen.

Und wenn das dann noch gegen das ist, was vorher so erfolgreich war, dann muss man auch noch die „etablierten Helden“ vom „Throne“ holen.

Also: wir arbeiten mit alten Erkenntnissen und es ist ein Zeichen der Staerke der Wissenschaft, dass diese in Frage gestellt werden und auch etwas vøllig neues die Lehrmeinung wird!

Ist natuerlich scheisze, wenn das die eigenen alten Dogmen sind, die pløtzlich nicht mehr gelten.

Aber hey! Das ist dann nicht die Schuld der Religion, dass ich da bisher dran geglaubt hat, denn die Prediger erzaehlen ja auch nur das, woran sie selbst glauben und im Falle der Wissenschaft ist es eben das, was dem aktuellen Stand der Forschung entspricht.

 

Ach Scheiszdreck! Alles so kompliziert.

In kurz: Scott Adams (und nicht nur der) hat an das geglaubt, was andere Leute ihm erzaehlt haben. Nun erzaehlen diese anderen Leute was anderes. Das passt aber irgendwie nicht zu dem vorher Gesagten. Jetzt betrachtet er auch nicht, wie das (alte und neue) Gesagte eigentlich entstanden ist. Wie das alte Gesagte durchaus richtig war, aber jetzt durch etwas Besseres ersetzt wurde.
Nein! Das passt nicht und deswegen wird alles in Frage gestellt.
Anstatt seine eigene Herangehensweise an die Sache in Frage zu stellen.
Oder anders: selber lesen macht schlau!

Nicht ins Detail gehen (aber ich møchte es nicht unerwaehnt lassen) kann ich jetzt bezueglich der Rolle der Medien, oder die wissenschaftliche Methode. Denn Scott Adams regt sich auf ueber etwas, was charakteristisch fuer Letztere ist: Wir stellen Hypothesen auf und testen diese so lange, bis sie falsifizieren sind, denn beweisen kønnen wir die nicht. Wenn wir die aber nicht beweisen kønnen, kønnen sie auch nie als „die absolute, fuer immer und ewig geltende Wahrheit“ fungieren. Und das vergisst er.

Oder anders: Newton ist nicht falsch! Nur ist das Ganze deutlich komplizierter, wenn man mal drueber nachdenkt.

Oder noch anders: Wie jede Religion taugt auch Science nicht als Ersatz fuers selber nachdenken!

Eigentlich interessiert mich ja nicht die Haeufigkeit einer bestimmten Zeichenkette. Wirklich von Interesse ist die Streuung der Haeufigkeiten der Zeichenketten.
Oder einfacher (aber mit mehr Worten) erklaert: wenn bspw. die Zeichenkette „1234“ fuenf Mal vor kommt, so møchte ich wissen, wie viele Zeichenkette auch fuenf mal vorkomen. Dabei interessiert es mich nicht die Bohne, welche Zeichenketten das sind.
Bestimmte Zahlen weisen eine gewisse Haeufigkeit auf und mich interessiert es, wie oft diese Haeufigkeit auftritt. Hier vermute ich die Normalverteilung.

Aber schauen wir uns doch konkrete Daten, fuer vierstellige Zeichenketten, an:

09_wie_oft

So lange die Anzahl der Stellen in der Folge nicht ausreicht, damit jede Zahl mehr als ein Mal auftreten kønnte, ist natuerlich keine glockenførmige Verteilung zu erkennen. Dies sieht man in diesen vier Grafen.

Wenn die Folge nur 10 Zeichen lang ist, so kommen ca. 10.000 vierstellige Zeichenketten genau null Mal vor. Und ein paar wenige ein Mal.
Je laenger die Folge wird, desto mehr Zeichenketten kønnen ein Mal vorkommen (bis 100 Stellen) und irgendwann auch øfter als ein Mal (bis 1000 Stellen). Allerdings nimmt das Vorkommen høherer Haeufigkeiten exponentiell ab. Was zu erwarten war.

Ab einer Folgenlaenge von 10.000 Zeichen, kommt im Schnitt jedes Zeichen genau ein Mal vor. Das hatte ich ja bereits letztes Mal gezeigt.
Man beachte, dass die Ordinate nun linear ist!

Und wenn die Folge weiter waechst, so stellt sich auch eine glockenførmige Verteilung ein:

10_Normalverteilung_1

Aber HAEH?! Wieso liegt denn die schicke rote Kurve (vulgo: der Fit) nicht auf den Datenpunkten? Und was ist dieses komische „Chi“?

Dies liegt daran, weil diese schøne rote Kurve den Daten angepasst wurde, unter der Annahme, dass diese normalverteilt sind. Und hier kommt Chi ins Spiel. Chi ist ein Ausdruck fuer die Guete des Fits. Je høher dieser Wert, desto schlechter stimmen die Daten mit der Annahme ueberein.
Oder andersherum: das Datenauswertungsprogramm passt die Parameter der Kurve derart an, dass Chi so gering wie møglich wird. Nicht, dass es am Schønsten aus sieht.

Demnach kønnte man sagen, dass bis zu einer Folgenlaenge von 100.000 Stellen fuer vierstellige Zeichenketten NICHT normalverteilt ist.

Aber wie das rechte Bild zeigt, so scheint sich sich die Verteilung einer Normalverteilung anzunaehern, mit zunehmender Folgenlaenge.

Und hier nun, ENDLICH, kommt das, worauf ihr, meine lieben Leserinnen und Leser, so lange warten musstet:

Bei einer Fibonaccifolgenlaenge von 100.000.000.000 Stellen, meine ich, dass man durchaus davon sprechen kann, dass vierstellige Zeichenketten normalverteilt sind. Toll wa!

Dies gilt insb. auch fuer kleine Vorkommen, was die logarithmische Darstellung im rechten Bild eindrucksvoll zeigt.

Damit hatte ich endlich herausgefunden, was ich herausfinden wollte. Natuerlich nur innerhalb meines eigenen, mathematisch nicht so anspruchsvollen Rahmens.
Und ihr, meine lieben Leser und Leserinnen, wisst es nun auch.

Nun rechnete und rechnete mein kleiner braver Laptop 15 Stunden ohne Unterbrechung und heraus kamen viele Zahlen.

Es werden nur noch die Daten fuer vierstellige Zeichenfolgen betrachtet.
Drei-, zwei- und einstellige Zeichenfolgen passen in das Modell gut rein, es sieht aber nicht so schøn aus. Also vom aesthetischen Anspruch mein ich.
Dies, weil sich bei nur 1.000, 100 bzw. 10 Datenpunkten statistische Schwankungen noch deutlich negativ auf das Erscheinungsbild auswirken kønnen, selbst wenn diese einer Normalverteilung folgen und mathematisch somit alles in Ordnung ist. Bei 4-stelligen Zeichenketten habe ich aber 10.000 Datenpunkte und die Schwankungen folgen einer schønen Glocke. Aber so weit sind wir ja noch gar nicht.

Wie sieht denn nun so eine Verteilung von 4-stelligen Zeichenketten aus. Im folgenden Bild stelle ich dies beispielhaft dar, fuer Fibonaccifolgenlaengen von 100, 10.000 und 1010 Zeichen.

Hier gezeigt ist die Entwicklung der Haeufigkeiten der Zeichenketten von „0900“ bis „1000“.

Bei einer Fibonaccifolgenlaenge von nur 100 Zeichen, kommen auch nur ca. 100 vierstellige Zeichenketten vor. Also im Durchschnitt kommt jede von den 10.000 vierstelligen Zeichenketten 0.01 mal vor. Dies zeigt die linke obere Verteilung sehr deutlich.

Bei einer Fibonaccifolgenlaenge von 10.000 Zeichen, kommt jede vierstellige Zeichenkette im Schnitt genau ein Mal vor. Dies bestaetigt die rechte obere Verteilung.
Hier spielt uns die menschliche Wahrnehmung aber einen Streich. Es scheint, als ob Haeufigkeiten von 2, 3 und gar 4, mal deutlich die Zahl der „Nullvorkommen“ ueberwiegen. Dem ist aber nicht so. Manuelles Nachzaehlen ergab, dass alle Haeufigkeiten die ueber eins liegen, die „Leerstellen“ ziemlich genau „auffuellen“, so dass im Durchschnitt eine Haeufigkeit von eins heraus kommt. So wie erwartet.

Bei einer Fibonaccifolgenlaenge von 1010 Zeichen ist die Erwartung, dass jede vierstellige Zeichenkette durchschnittlich eine Million mal auftritt. Dies sieht man in der linken unteren Verteilung bestaetigt. Im Balkendiagramm von 0 bis 1.000.000 gehen die Feinheiten aber unter. Deswegen ist unten rechts der Bereich der Verteilung um den Wert „1.000.000“ aufgespreizt zu sehen.

Und hier beginnt es interessant zu werden.

Dieses Zappeln um den Mittelwert ist ja das eigentliche Ziel meiner Fragestellung. Ist das normalverteilt?
Wie haeufig eine bestimmte Zahlenfolge vorkommt, ist also ueberhaupt nicht von Interesse. Aber wie sich die Haeufigkeit eben dieser Zahlenfolge von den Haeufigkeiten aller anderen Zahlenfolgen unterscheidet, DAS ist das Interessante. … Das Zappeln um den Mittelwert halt.

Ich kønnte hier gleich das Ergebnis praesentieren. Das waere aber langweilig.
Zunaechst einmal schauen wir uns das Zappeln und die Entwicklung des Zappelns ein bisschen naeher an.

Zur Analyse ist es unpraktisch, sich die Rohdaten anzuschauen. Da erhaelt man keine wesentlichen Informationen, denn ich habe ja prinzipiell 10.000 verschiedene Haeufigkeiten. Nun ist meine Vermutung aber, dass es deutlich wahrscheinlicher ist, dass das Vorkommen einer Zeichenkette um den Mittelwert liegt, als fern ab davon. Um dies besser zu „sehen“, erstellte ich fuer jede Potenz der Fibonaccifolgenlaenge ein Histogramm der Haeufigkeiten vierstelliger Zeichenketten. Bei diesen Histogrammen „mittelte“ ich derart, dass ich 100, gleich weite Balken hatte. Dieses Histogramm sollte dann natuerlich einer Normalverteilug entsprechen. Dazu aber an anderer Stelle mehr.

Es gibt die folgenden interessanten Grøszen:
– maximales und minimales Vorkommen;
– die Differenz daraus ergibt die Fehlerspanne;
– „DeltaMinus“ und „DeltaPlus“, der maximale Betrag der Abweichung vom Vorkommensmittelwert nach unten bzw. nach oben;
– eine Groesze die ich „relativer Fehler“ nenne: Quotient aus Fehlerspanne und Mittelwert.

Dies alles natuerlich in Abhaengigkeit von der Laenge der Fibonaccifolge.

Maximales und minimales Vorkommen sind nur in so fern von Interesse weil sich daraus andere Daten ergeben.

„Delta Minus“ und „Delta Plus“ haben eigentlich keine Bedeutung. Aber ich wollte gern mal wissen, ob die Abweichung nach oben tendentiell grøszer ist, als die nach unten (oder umgekehrt).

Bis zu einer Fibonaccifolgelaenge von 10.000 Stellen war das minimale Vorkommen immer null. Natuerlich gab es Zeichenketten, die ueberhaupt nicht aufgetaucht sind, wenn es nur so wenige potentielle Zeichenketten ueberhaupt gab.
Das maximale/minimale Vorkommen nimmt, wie zu erwarten war, exponentiell  zu, nachdem die Fibonaccifolge eine Mindestlaenge von 10.000 Zeichen ueberrschritten hat.

Der Betrag des maximalen Abstands vom Vorkommensmittelwert nach unten (DeltaMinus, rote Punkte im unteren Grafen) ist zunaechst immer grøszer als der Abstand nach oben (DeltaPlus, schwarze Punkte im unteren Grafen). Erst im ganz letzten Messwert kommt es zu einem Umschlag dieses Verhaltens. Erwarten wuerde ich, dass es hierbei keine Praeferenz gibt. So weit scheinen die Daten allerdings Letzteres zu suggerieren. Mehr Daten sind vonnøten und ein strenger mathematischer Beweis dieser Behauptung.

Die Fehlerspanne nimmt exponentiell zu. Der Abstand zwischen der Zeichenkette die am seltensten vorkommt und derjenigen, die am haeufigsten vorkommt, wird also absolut gesehen immer grøszer.
Auch dies ist so zu erwarten gewesen, kann sich das Vorkommen aller Zeichenketten bei laengeren Fibonaccifolgen doch ueber grøszere Bereiche „ausdehnen“.

Deswegen fuehre ich den „relativen Fehler“ ein. Auch wenn die Fehlerspanne immer grøszer wird, so wuerde ich erwarten, dass diese Fehlerspanne bezogen auf den Mittelwert des Vorkommens aller Zahlen abnehmen sollte. Die Haeufigkeiten sollten sich also relativ gesehen mehr und mehr an den Erwartungswert „anschmiegen“.
Diese Vermutung kommt _mir_ total natuerlich vor, weil ich eine Normalverteilung aller Zeichenketten annehme. Wenn ich aber mal so drueber nachdenke, dann beruht diese Annahme nur auf so ’nem „Bauchgefuehl“. Und wenn ich so weiter drueber nachdenke, dann werde ich mir unsicher, ob nicht selbst bei einer Normalverteilung der Werte, der relative Fehler immer grøszer werden kønnte … wenn also die Fehlerspanne schneller zu nimmt, als der Mittelwert grøszer wird … nein … mich duenkt, bei einer Normalverteilung kann dem nicht so sein. Aber eine Begruendung muss ich schuldig bleiben. Jedenfalls ist fest zu halten, im Allgemeinen kønnte der relative Fehler auch gleich bleiben, oder sogar zu nehmen. Wenn dem aber so waere, dann waere vermutlich die Annahme einer Normalverteilung falsch.
Jedenfalls ist in der Abbildung gut zu erkennen, dass meine Vermutung richtig war und im Umkehrschluss mglw. auch die Annahme der Normalverteilung. Dazu aber nicht mehr in diesem Beitrag. Auf dieses wunderschøne Ergebniss muesst ihr, meine lieben Leserinnen und Leser, euch bis zum naechsten Mal gedulden.

Zum Abschluss des Beitrages noch das Folgende.
ACHTUNG! Die Definition „_meines_ relativen Fehlers“ hat nichts mit dem relativen Fehler zu tun, wie er vom Studium und aus der Mathematik her bekannt sein sollte. Dieser wird naemlich bspw. fuer einzelne Messwerte angegeben, als (relative) Abweichung vom wahren Wert. Hier habe ich aber ein Ensemble von Messwerten und betrachte die Gesamtheit.

Bevor ich meinen Rechner viele Stunden rechnen lassen wollte, schaute ich mir erstmal an, wie sich die Rechenzeit in Abhaengigkeit von den Parametern verhaelt.
Wir (also ihr, meine lieben Leserinnen und Leser, zusammen mit mir) erinnern uns: die Laenge bis zu der die Fibonaccifolge ausgerechnet und untersucht werden soll ist einer der Parameter und die Laenge der Zeichenketten die untersucht werden sollen die andere.
Bei Letzterem ist zu beachten, dass ich immer alle Zeichenketten BIS zu der maximalen Laenge untersucht habe. Wenn vierstellige Zeichenketten von Interesse sind, wurden also auch alle drei-, zwei- und einstelligen Zeichenketten mit untersucht.
Warum Daten nicht benutzen, die ohnehin mit anfallen? … jajaja … Das Programm haette ich auch anders schreiben kønnen, sodass die nicht anfallen. Aber da ich zu dem Zeitpunkt noch nicht wusste, was ich an Daten brauche, habe ich alles „aufgesaugt“ was geht. Sozusagen wie google und facebook und die nsa und der sog. Verfassungs“schutz“ usw. usf. … ihr, meine lieben Leser und Leserinnen, versteht sicherlich, worauf ich hinaus will.

Aber ich schwoff ab.

Die Rechenzeit in Abhaengigkeit von der Gesamtlaenge der Folge und von der Laenge der zu untersuchenden Zeichenkette schaute ich mir in einer weniger lang dauernden Voruntersuchung an. Bei dieser Voruntersuchung rechnete der Rechner nur ca. 1 1/2 Stunden. Ich extrapolierte dann die Daten um festzulegen, bis zu welcher Zeichenkettenlaenge ich, in der laenger dauernden Untersuchung, die Fibonaccifolge analysieren møchte und wie lang diese werden soll.

Bei dieser Voruntersuchung kam es zu einigen Resultaten, mit denen ich, gelinde gesagt, nicht gerechnet hatte und die mir so einiges Kopfzerbrechen bereiteten.

Aber hier nun die schønen Grafiken. Zunaechst die Rechenzeit in Abhaengigkeit von der Laenge der Folge; die Abhaengigkeit von der Laenge der zu untersuchenden (laengsten) Zeichenkette ist durch verschiedenfarbige Datenpunkte angedeutet.

Erwartet haette ich, dass mit jeder hinzukommenden Potenz der Reihe, also mit jeder Erhøhung der Anzahl der Zeichen in der Folge um den Faktor 10, die Rechenzeit auch um den Faktor 10 zu nimmt. Wenn ich 10 Millionen Zahlen erstellen und untersuchen muss anstatt nur 1 Million, so ist diese Annahme durchaus plausibel.

Wenn ich nur Zeichenketten mit bis zwei Zeichen untersuche (schwarze Punkte), so stimmt das Ergebis gut mit dieser Annahme ueberein.
Es kommt zu Abweichungen bei kuerzeren Folgenlaengen, aber man beachte diesbezueglich die logarithmische Darstellung. Ob der Rechner drei Hundertstelsekunden rechnet, oder nur eine Hundertstelsekunde ist im Ganzen kein groszer Unterschied, macht sich aber bei dieser Darstellung ueberdeutlich bemerkbar.
Die hell-lila Gerade durch diese Datenpunkte zeigt doch eindruecklich, dass die Annahme plausibel ist.

Die erste Ueberraschung war, dass sich bei laengeren zu untersuchenden Zeichenketten (blaue und rote Vierecke), die Rechenzeit fuer kuerze Folgenlaengen zunaechst linear entwickelt (dunkel-lila Geraden), bevor sie denn in das erwartete exponentielle Verhalten uebergeht.
Nun ja, wie sagte einer meiner ehemaligen Professoren es mal so schøn: wer bei doppellogarithmischer Darstellung keine Gerade durch die Datenpunkte legen kann, muss schon ziemlich blød sein. Eine Gerade mit flacherem Anstieg muss also nicht unbedingt bedeuten, dass es sich auch im lineares Verhalten handelt.

Deswegen trug ich die Abhaengigkeit der Rechenzeit von der Laenge der Folge linear (!) auf, nur fuer den Datensatz zur Analyse von siebenstelligen (und kuerzeren) Zeichenketten (rechte Grafik). Eine Gerade in dieser Darstellung bedeutet dann natuerlich, dass sich die Rechenzeit tatsaechlich zunaechst linearar entwickelt.

Hierbei ist zu beachten, dass nicht die eigentliche Laenge der Folge von Interesse ist. Also schon, aber nur in „Schritten“ von Zehnerpotenzen. Genauer gesagt verhaelt sich also die Rechenzeit linear in Abhangigkeit von der Potenz der Laenge der Folge.

Wie ist dieses unerwartete Verhalten aber nun zu erklaeren? Ich schlage folgendes vor und hoffe, dass mich Experten, die sich besser mit Speicherzugriff usw. auskennen, berichtigen (oder bestaetigen).

Nehmen wir eine Laenge der Folge von 1 Millionen Zeichen (106) an. Dann gibt es in dieser Folge auch 1 Millionen „Zahlen“ die 7 Stellen lang sind. Es gibt aber 10 Millionen (!) unterschiedliche Zeichenketten, die 7 Stellen lang sind. Alles von „0.000.000“ bis „9.999.999“ (ohne die Punkte natuerlich). Ich sehe also nur 10% aller 7-stelligen Zeichenketten. So lange wie die Folge so kurz ist, muss ich also nur auf 10% des Speichers fuer 7-stellige Zeichenketten zugreifen. Bzw. nur 10% aller 7-stelligen Zahlen ueberhaupt analysieren (im Sinne von umwandeln eines Strings in eine Zahl und dann diese Zahl erkennen und deren Vorkommen um eins erhøhen). Erst bei der naechsten Potenz der Folge (wenn ich also 10 Millionen Zeichen untersuche) wird die Analyse- und Speicherzugriffszeit relevant. Vorher ist der Anstieg der Rechenzeit also deswegen deutlich geringer, weil auf nicht so viele Speicherzellen zugegriffen und weil nicht so viel analysiert werden muss.
Gerade beim letzten Teil der Erklaerung bin ich unsicher und hoffe wirklich, dass sich da eine Expertin oder ein Experte unter meinen Lesern befindet.

Hierbei ist das zu bedenken, was ich bereits im zweiten Artikel dieser Reihe ansprach. Die „Groesze“ der Tabelle der Haeufigkeiten der untersuchten Zeichenketten wird (fast) nur durch die Laenge der laengsten zu untersuchenden Zeichenkette bestimmt.

 

 

Nun kommt die Abhaengigkeit der Rechenzeit von der Laenge der zu untersuchenden Zeichenketten, fuer eine gegebene Laenge der Folge.

Hier ist das Resultat:

Erwartet haette ich hier, dass sich mit jeder Stelle die die zu untersuchende Zeichenkette laenger wird, die Rechenzeit linear zu nimmt.
Warum diese Annahme? Der bereits mehrfach beschriebene Analysealgorithmus – extrahiere Zeichenketten mit der maximalen Laenge, analysiere diese, schneide von dieser Zeichenkette ein Zeichen ab, analysiere diese neue, kuerze Zeichenkette usw. – ist mit einer einfachen Schleife zu realisieren.
Nehmen wir an, einstellige Zeichenketten sollen untersucht werden. Die Analyse einer einstelligen Zeichenkette dauert dann eine Zeiteinheit. Nehme ich jetzt zweistellige Zeichenketten, so dauert die Analyse zwei Zeiteinheiten. Die Zeit, die es braucht um die zweistellige Zeichenkette zu erfassen und den Zaehler um eins zu erhøhen und die bereits vorher auch benøtigte Zeit, um die einstellige Zeichenkette zu analysieren. Bei dreistelligen Zeichenketten kommt wiederum nur eine einzige Zeiteinheit hinzu.

Im rechten Bild (Achtung: lineare Skala!) sieht man diese Annahme bestaetigt. Ist die Fibonaccifolge sehr lang, nimmt die Rechenzeit linear mit der Laenge der zu untersuchenden Zeichenkette zu.

Im linken Bild (doppellogarithmische Skala!) hingegen sieht man, dass man im Wesentlichen das umgekehrte Verhalten zur vorherigen Problemstellung hatte. Kurioserweise ist das qualitative Resultat das Gleiche.
Ist die Laenge der Fibonaccifolge kurz (100 Zeichen, schwarze Punkte), so nimmt die Rechenzeit exponentiell (und nicht linear) zu mit jedem Zeichen, dass die zu untersuchende Zeichenkette laenger wird.
Wird die Folge laenger, so ist die Abhaengigkeit zunaechst linear, bis sie dann bei laengeren Zeichenketten zu exponentiellen Verhalten umschlaegt.

Darueber musste ich etwas laenger nachdenken. Hier ist eine møgliche Erklaerung.

Wenn in der zu untersuchenden Zeichenkette eine Stelle dazu kommt, dann muss 10 mal mehr Speicher “durchgerødelt” werden. Die oben erwaehnte Haeufigkeitstabelle. Auch wenn letztlich bei jedem Durchgang durch die Analyseschleife nur in eine Zeile in der Tabelle geschrieben werden muss, so muss der „Schreibstift“ (oder Schreibkopf oder Zaehler, oder vermutlich viel mehr programminterne Speicherzugriffsalgorithmen) erstmal immer bis zu dem Platz in der Tabelle „laufen“. 10 mal mehr Speicher „durchrødeln“ bedeutet exponentielles Verhalten.
Das Problem dabei ist, dass das auch bei langen Folgen der Fall waere. Ich wuerde also auch dort kein lineares Verhalten sehen, was ja aber der Fall ist.
Dies konnte ich mir nur dadurch erklaeren, dass dieser Effekt (das „Laufen“ des „Schreibstiftes“ an die Stelle zum schreiben) zwar vorhanden, aber absolut gesehen relativ klein ist. Der „Schreibstift“ ist sozusagen ein schneller „Laeufer“. An den Datenpunkten sieht man, dass dieser bspw. nur 20 Sekunden braucht, um bei einer 100-stelligen Folge, mehrfach durch die gesamte Tabelle fuer 7-stellige Zeichenketten  zu gehen.
Ist die Fibonaccifolge nun kurz, so dauern die eigentlichen („Abschneide-“ und) Analyseschritte aber ebenso nicht so lange, sodass dieser Effekt signifikant wird.
Bei einer langen Folgen hingegen, dauern die eigentlichen Analyseschritte so lange (bspw. 1.000 Sekunden), sodass das „durchrødeln“ durch die Tabelle (der „Lauf zur richtigen Spalte“) NACH der eigentlichen Analyse nur noch ein paar Prozent an der der gesamten Zeit aus macht. 20 Sekunden (ja sogar 200 Sekunden) sind nicht so relevant bei 1000 Sekunden Gesamtrechenzeit.
Dummerweise habe ich das Gefuehl, dass ich hier Sachen durcheinanderwirble, die nicht zusammengehøren, aber es klingt erstmal plausibel.

Spannend, spannend all dies, nicht wahr.

Aber das hat mich alles etwas von der eigentlichen Aufgabe abgelenkt.

Ich entschied mich letztlich nur bis zu vierstellige Zeichenketten zu untersuchen, 10.000 Datenpunkte sind schon ganz gut. Dafuer aber die Statistik gut zu machen und die Folge bis zur 10-billionsten Stelle (1010) zu analysieren. Nun ja, streng genommen war es bis zur 10.000.062.095 Stelle. Aber die neu hinzuzufuegenden Elemente werden irgendwann recht lang, der „Fehler“ ist kleiner als 10-5 und ein bisschen mehr „Statistik“ schadet nicht.

Dazu dann aber mehr beim naechsten Mal.

Ach ja … die Gesamtrechenzeit bei diesen Parametern betrug ca. 15 Stunden, was gut mit den vorher ermittelten Daten uebereinstimmt.

Wie im vorhergehenden Beitrag dieser Reihe beschrieben, braucht mein erster Ansatz, den Computer einfach erstmal die Folge ausrechnen und danach analysieren zu lassen, unheimlich viel Arbeitsspeicher.

Also musste ein neuer Plan her.

Fancypancy meinte ein studierter Experte, dass ich um „streaming“ wohl nicht drumherum komme. Das war dann auch das, was ich mir vorher schon dachte. Anstatt die ganze Folge zu erstellen, lass ich nur jeweils ein (neues) Element nach dem anderen analysieren, bevor das naechste Element erstellt wird.
Das sollte natuerlich deutlich weniger Speicher benøtigen. Wie viel weniger, ist hier zu sehen:

02_Laenge_des_naechsten_Elements

Selbstverstaendlich verhaelt sich die Laenge des naechsten hinzuzufuegenden Elementes nach dem gleichen Gesetz wie die Laenge der gesamten Folge – exponentiell. Aber wenn man die Skala der Ordinate mit der in der Abbildung im oben verlinkten, vorhergehenden Beitrag vergleicht, so sieht man doch wie, absolut gesehen, gewaltig weniger die Laenge des naechsten Elementes im Vergleich zur Laenge der gesamten Folge waechst.
Wenn man den (maximalen) Speicherbedarf betrachtet, so muesste man die Anzahl der Zeichen des als naechstes hinzuzufuegenden Elementes verdreifachen. Dies deswegen, da ich ja immer zwei Elemente im Speicher behalten muss, um das neue (dritte) Element auszurechnen. Daher der Faktor drei. Aber ein Faktor drei … bei exponentiellem Wachstum … tihihi … ich lach mich kaputt … da spricht man nicht drueber ;)

Das (wenn auch exponentielle) Wachstum des naechsten hinzuzufuegenden Elementes geht also deutlich weniger schnell von statten, als das Wachstum der Laenge der gesamten Folge.

Damit war mein Plan zu „streamen“ auf ein solides Fundament gestellt.

Der Analyseteil blieb im Wesentlichen der Gleiche: so viele Zeichen abhacken wie benøtigt, die Haeufigkeit dieser Zahl um eins erhøhen, in der Folge um eins nach rechts ruecken, von vorne beginnen.

Das bedeutete aber nicht, dass es jetzt einfacher war. Ganz im Gegenteil. Ich musste viel mehr ueberlegen um den „streaming“-Teil richtig hin zu bekommen.

Natuerlich war es einfach das naechste Element erst dann auszurechnen und zu analysieren, wenn es benøtigt wird. Dabei muessen aber drei Sachen beachtet werden.
1.: Man benøtigt einen „Ueberhang“ der letzten Zahlen aus dem vorherigen Element.
2.: Aufpassen, dass beim „Ueberhang“ zaehlen nicht doppelt gezaehlt wird.
3.: Was ist, wenn das naechste anzuhaengende Element weniger Zeichen hat, als die Laenge der zu untersuchenden Zeichenketten.

Eine Veranschaulichung zu 1.
Wir nehmen die Zeichenkette 112 und uns interessieren nur ein- und zweistellige Zeichenketten. Dann haben wir darin folgende Verteilung: „1“ = 2 mal, „2“ = 1 mal, „11“ = 1 mal und „12“ = 1 mal
Das naechste Element ware die 3. Wenn wir NUR dieses betrachten wuerden, so wuerden zur obigen Verteilung hinzukommen: „3“ = 1 mal.
Wenn ich aber an die Zeichenkette 112 die 3 anhaenge, so erhalte ich 1123 und wenn ich dies analysiere, so erhalte ich: „1“ = 2 mal, „2“ = 1 mal, „3“ = 1 mal, „11“ = 1 mal, „12“ = 1 mal (bis hierhin also wie gehabt) und zusaetzlich: „23“ = 1 mal.
Beim „Uebergang“ von der 2 zur 3 „entsteht“ eine neue 2-stellige Zahl – die 23. Und die wuerde man uebersehen, wenn man einfach nur das neue Element analysiert.

Bevor man also das neue Element analysiert, muss man an dieses so viele Zeichen vorne ran haengen, wie die Laenge der laengsten zu untersuchenden Zeichenkette ist, minus ein Zeichen. Und das ist das, was ich „Ueberhang“ nenne.

Das ist gar nicht so schwer, sich diesen Ueberhang zu merken. Bei der Analyse muss man einfach nur schauen, wenn die Laenge der von der Folge abgehackten Zahlen, das erste Mal kuerzer wird, als die Laenge der grøszten zu untersuchenden Zeichenkette.

Eine Veranschaulichung zu 2. unter Beruecksichtigung des ersten Punktes.
Wir interessieren uns fuer vier-, drei,- und zweistellige Zeichenketten. Wir nehmen an, dass bis zur 11235813 alles untersucht wurde. Der Ueberhang muesste also 813 werden und das naechste Element wird die 21. Als neue Folge erhalten wir also 81321. Nach dem im vorhergehenden Beitrag vorgestellten Algorithmus untersuche ich dann zunaechst 8132. Davon wuerde die letzte Zahl abgehackt werden um die dreistellige Zeichenkette zu analysieren – also die 813. Hier ist es nun aber so, dass die 813 schon vorher gezaehlt wurde. Bei der Untersuchung der „alten“ Zeichenkette, bevor das neue Element erzeugt wurde. So auch die 81 und die 8.
Im naechsten Schritt waere alles ok mit der 1321 und mit der 132, aber die 13 und die 1 waere auch schon vorher gezaehlt worden.

Der Analysealgorithmus muss das Hinzuaddieren zur Haeufigkeit also rechtzeitig unterbrechen, so lange der Ueberhang noch involviert ist.

Eine Veranschaulichung zu 3.
Hierbei handelt es sich eher um ein technisches, als um ein logisches Hindernis.
Zunaechst denken wir uns das gleiche wie unter 2. Das naechste hinzuzufuegende Element (die 21) ist also ein Zeichen zu kurz um keine Probleme zu bereiten, wenn mich vierstellige Zeichenketten interessieren. Zunaechst ist alles ok. Aus 81321 mache erstmal 8132 und analysiere das. Dann folgt 1321 und dies wird untersucht.
Dann aber ist tritt bei der Umwandlung einer Zeichenkette zu einer Zahl etwas auf, was Probleme bereitet.
Die naechste Zeichenkette waere die 321, also nur noch drei Zeichen lang. Hierbei wuerde der von mir gewaehlte Algorithmus zunaechst annehmen, dass das vierte „Zeichen“ sozusagen „unsichtbar“ ist. Es wuerde also die Zeichenkette „321( )“ umgewandelt werden in … richtig … 321. Danach wuerde das letzte (unsichtbare) Element abgehackt werden und die 321 wuerde nochmal gezaehlt.

So ein Mist aber auch! Nun ja, ich konnte ich auch dieses Problem løsen. Drittens ist vor allem ein Anfangsproblem. Das taucht nicht mehr auf, sobald die neuen Elemente lang genug werden. Dennoch muss es waehrend der ersten Durchlaeufe natuerlich durch eine gut gewaehlte Abbruchbedingung beruecksichtigt werden. Zweitens ist zwar ein permanentes Problem, aber auch hier schafft eine passende Abbruchbedingung das daraus folgende doppelte Zaehlen aus der Welt. Und Erstens ist easy peasy zu bewerkstelligen.

Wie gesagt: dumme Computer! Machen genau das, was man ihnen sagt und nicht das, was man eigentlich møchte, was sie machen sollen.

Letztlich lagerte ich die Analyse des Ueberhangproblems in einen eigenen kleinen Algorithmus aus, der vor der eigentlichen Analyse des neuen Elementes ablaeuft.

Warum schreibe ich das alles … mhm … weil es ja mglw. wen interessiert und dieser weblog auch ein bisschen meiner eigenen Dokumentation dient :)

Falls es jemanden interssiert, so wuerde ich mit Freude den in Python geschriebenen Quellcode des von mir erstellten Programms teilen.
Insb. auch, weil ich hoffe Anregungen zu bekommen.
Es ist immer lehrreich An- und Bemerkungen von auszerhalb des eigenen Kosmos zu erhalten.

In den naechsten Beitraegen werde ich dann endlich die mithilfe dieses Programmes gewonnen Daten (oder vielmehr deren weitergehende Analyse) vorstellen.
Das war ja schlieszlich der eigentliche Grund, warum ich mir diesen ganzen Aufwand gemacht habe.
Das erste Ergebnis ist im Uebrigen schon hier (oben) zu sehen. Ich musste ja schlieszlich erstmal das Element mit 64.651 Stellen (und alle davor) ausrechnen, um euch diesen schønen Zusammenhang zeigen zu kønnen.