Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

11

27.01.2008, 19:07

Hi,
also ich finds schonmal gut, dass das Problem einigermaßen schwer ist und vielleicht sogar der mit dem besten Algo gewinnt, und nicht jemand mit irgendwelchen Assemblertricks.
Ich finds nur etwas erschreckend, dass mir so auf Anhieb keine exakte einfache Formel dafür einfällt... und ich wollt auch nicht gleich mit Integralen auf Spatzen schießen.

Aber ich hab auch noch nicht lang nachgedacht, mal gucken, ob ich noch Zeit finde...
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

12

27.01.2008, 22:35

So, ich hab schonma erste Ergebnisse.

Habe das ganze mittels Monte-Carlo gelöst.
Hier mal die Ergebnisse:


Quellcode

1
2
3
4
5
6
7
8
9
10
Ergebnis: 0              Korrekter Wert: 0              OK!
Ergebnis: 0.785457       Korrekter Wert: 0.785398       OK!
Ergebnis: 0              Korrekter Wert: 0              OK!
Ergebnis: 0.196341       Korrekter Wert: 0.19635        OK!
Ergebnis: 1.22832        Korrekter Wert: 1.22837        OK!
Ergebnis: 0.196369       Korrekter Wert: 0.19635        OK!
Ergebnis: 31.5267        Korrekter Wert: 31.5147        OK!
Ergebnis: 0.00031415     Korrekter Wert: 0.000314159    OK!
Ergebnis: 31419.2        Korrekter Wert: 31415.9        OK!
Ergebnis: 0              Korrekter Wert: 0              OK!


Laufzeit: 0.849s

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

13

28.01.2008, 00:22

Hm, ma n neuen run gemacht.

0.0005 Sekunden mit den Testcases die David erstellt hatte.

p0llux

Treue Seele

Beiträge: 101

Wohnort: Aachen

Beruf: HiWi (theo. Inf.)

  • Private Nachricht senden

14

28.01.2008, 11:19

Zitat von »"rootnode"«

Hm, ma n neuen run gemacht.

0.0005 Sekunden mit den Testcases die David erstellt hatte.


Da schließe ich mich an. Allerdings sind die Testcases zu klein! Wir brauchen größere. Die Schwankungen in den Messzeiten sind zu hoch.

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

16

28.01.2008, 11:37

Macht euch doch einfach welche. Zufallsgenerator ist gegeben und sollte bei jedem dieselben Zahlen ausspucken.
Ich bin momentan etwas im Prüfungsstress. Wenn das vorbei ist, mache ich mich an meinen eigenen Algorithmus und liefere dann auch größere Test-Cases!

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

17

28.01.2008, 21:12

Quellcode

1
2
3
4
5
6
7
8
9
10
Ergebnis: 0              Korrekter Wert: 0              OK!
Ergebnis: 0.785398       Korrekter Wert: 0.785398       OK!
Ergebnis: 0              Korrekter Wert: 0              OK!
Ergebnis: 0.19635        Korrekter Wert: 0.19635        OK!
Ergebnis: 1.22837        Korrekter Wert: 1.22837        OK!
Ergebnis: 0.19635        Korrekter Wert: 0.19635        OK!
Ergebnis: 31.5147        Korrekter Wert: 31.5147        OK!
Ergebnis: 0.000314159    Korrekter Wert: 0.000314159    OK!
Ergebnis: 31415.9        Korrekter Wert: 31415.9        OK!
Ergebnis: 0              Korrekter Wert: 0              OK!


Ich habe mal einen analytischen Ansatz verfolgt. Bei der Komplexität bin ich mir noch nicht schlüssig. Das hängt ganz davon ab, wie sich die Anzahl der Kreisbögen, die die Kontur des Schnittes bilden, in Abhängigkeit von der Anzahl der geschnittenen Kreise verhält.

Wenn der Zusammenhang proportional ist, dann fällt mein Algorithmus in die Klasse O(n^2 + n).
Allerdings gibt es - zumindest für überschaubare Beispiele Anordnungen, bei denen die Anzahl Konturkreisbögen stärker zunimmt, als die Anzahl der verschnittenen Kreise.

Beispiel:
Ich wähle eine Grundform, die sich aus x identischen Kreisbögen zusammensetzt, so wie es z.B. in Testfall 7 (vier gleich große Kreise auf einem Quadrat angeordnet) der Fall ist. Vier Kreise bilden da einen Schnitt, der durch vier gleiche Kreisbögen begrenzt ist.
Wenn ich nun einen Kreis in der Mitte platziere, dessen Radius nicht an die "Ecken" heran reicht, wohl aber über die Seiten hinaus geht, vergrößert man mit diesem fünften Kreis die Anzahl der Kreisbögen der Kontur des Schnittes um 4 auf 8.
Ich bin mir relativ sicher, dass sich solche Spielchen nicht beliebig fortsetzen lassen, aber eine schlüssige Herleitung einer Obergrenze will mir nicht gelingen :?

Über Denkanstöße würde ich mich sehr freuen !

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

18

28.01.2008, 21:29

Ich hab auch mal kurz geschaut...

Ich liege ca bei O(s*n+n), wobei s die Anzahl der Samples ist (ca 200 reichen). Da s eine Konstante ist, wäre das O(n).
Bin ma gespannt was für Ergebnisse so noch kommen.

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

19

28.01.2008, 21:37

Zitat von »"S.Seegel"«

Wenn der Zusammenhang proportional ist, dann fällt mein Algorithmus in die Klasse O(n^2 + n).

... was = O(n²) ist ;)

Zitat von »"S.Seegel"«

Ich wähle eine Grundform, die sich aus x identischen Kreisbögen zusammensetzt, so wie es z.B. in Testfall 7 (vier gleich große Kreise auf einem Quadrat angeordnet) der Fall ist. Vier Kreise bilden da einen Schnitt, der durch vier gleiche Kreisbögen begrenzt ist.
Wenn ich nun einen Kreis in der Mitte platziere, dessen Radius nicht an die "Ecken" heran reicht, wohl aber über die Seiten hinaus geht, vergrößert man mit diesem fünften Kreis die Anzahl der Kreisbögen der Kontur des Schnittes um 4 auf 8.
Ich bin mir relativ sicher, dass sich solche Spielchen nicht beliebig fortsetzen lassen, aber eine schlüssige Herleitung einer Obergrenze will mir nicht gelingen :?

Kannst du mal ein Bild davon machen?
Bei meinen Experimenten wuchs die "Kantenbogenmenge" nie über eine gewisse Zahl hinaus. Darum glaube ich, dass mein (geplanter) Algorithmus in O(n) läuft.

Schneller als O(n) geht es eh nicht, da man im Worst Case zumindest jeden Kreis einmal anfassen muss. Also wird es auf den konstanten Faktor hinauslaufen.

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

20

28.01.2008, 22:01

Nicht schön, aber selten:

(Link)

Der rote Kreis verdoppelt die Anzahl der den Schnitt begrenzenden Kreisbögen von 4 auf 8.
Oder - anders herum betrachtet - kappt jeder der großen Kreise ein kleines Stück vom kleinen roten ab. Bei n Kappungen und den nochmals n zwischen diesen liegenden Abschnitte des roten Kreises ergeben sich 2*(n-1) Kreisbögen.

Werbeanzeige