striker159
Lt. Junior Grade
- Registriert
- Dez. 2008
- Beiträge
- 327
Kurze Amerkung zu b): Man muss backtracking nicht rekursiv implementieren. Das geht auch ganz einfach iterativ, wenn man sich die Konfigurationen manuell abspeichert.
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
CyborgBeta schrieb:Danke, gelegentlich zufällig die Richtung zu wechseln, zum Beispiel alle 10 Schritte, also ein semi-randomisierter Ansatz, scheint mir eine kluge Wahl zu sein...
Die Kantenlängen des Labyrinthes sind irrelevant. Wie du dem Wikipedia Artikel entnehmen kannst lässt sich ein Labyrinth als ein ungerichteter Graphen beschreiben. Meine Erfahrungen mit Graphen sind begrenzt, aber ich gehe davon aus, dass der Ansatz darin besteht, den Graphen zusammen mit der angedachten Lösungsstrategie als Markov-Kette zu kodieren. Diese wird einen stationären Zustand (steady state distribition) einnehmen, da du vom Ziel aus nie mehr raus gehen wirst.CyborgBeta schrieb:Wäre nur die Frage, wie viele Schritte dann bei einem i x j=n Labyrinth gebraucht werden. Also was dabei optimale Parameter wären.
Hinweis: Viele haben den ersten Satz nicht richtig gelesen:Piktogramm schrieb:Man könnte einen deterministischen Algorithmus implementieren, der im präzise abschätzbarem Intervall von {min, max} garantiert zum gewünschtem Ergebnis kommt
Hervorhebung durch mich. Ebenfalls nicht erlaubt:CyborgBeta schrieb:Nabend... Gibt es einen (einfachen, prozeduralen und iterativen) Algorithmus, um immer den Ausgang aus einem Labyrinth zu finden, ohne sich dabei den gelaufenen Weg zu merken?
CyborgBeta schrieb:Nicht erlaubte Aktionen: Orientierung/ Position erfragen.
Jap, es sei denn, es gibt in der Sprache auch keine dynamischen Strukturen bzw. Speicher/Behälter...striker159 schrieb:Kurze Amerkung zu b): Man muss backtracking nicht rekursiv implementieren. Das geht auch ganz einfach iterativ, wenn man sich die Konfigurationen manuell abspeichert.
Viele haben eben jene Aufgaben in ihrem Grundlagen Informatik, Algorithmik 1, Programmieren 1 oder ähnlichen Kursen/Fächern gelöst...BeBur schrieb:Hinweis: Viele haben den ersten Satz nicht richtig gelesen:
Nein, weil das macht nicht der Lösungsalgorithmus selber, das geschieht außerhalb, wenn man zufällig durch das Labyrinth läuft, dann kann ich mir das zwar notieren, das ist aber nicht Teil der Lösungsstrategie.Piktogramm schrieb:Zudem, wenn wir einfach mal pedantisch sind, das Merken der abgelaufenen Anzahl an Schritten ist ja bereits ein Speichern eines Attributes des abgelaufenen Weges.
Ich befürchte ich kann dir an der Stelle nicht folgen. Hättest du bitte mal einen Ansatz Pseudocode, der nach n Schritten randomisiert, ohne n selbst zu verwenden?!BeBur schrieb:Nein, weil das macht nicht der Lösungsalgorithmus selber, das geschieht außerhalb, wenn man zufällig durch das Labyrinth läuft, dann kann ich mir das zwar notieren, das ist aber nicht Teil der Lösungsstrategie.
Achso, jetzt verstehe ich dich, mir war nicht klar, dass du dich in dem Absatz darauf beziehst. In dem Fall stimme ich dir zu.Piktogramm schrieb:nach n Schritten randomisiert
Bei manchen Antworten fragt man sich schon... ob der Antwortende schon mal eine Uni von innen gesehen hat.Gnah schrieb:Na wenn dein erster Reflex bei ner Denksportaufgabe darin besteht nicht zu denken sondern andere zu fragen wird das sicher was mit dem Studium.
c ← 0;
While True {
If vornExit() {
Exit;
}
If c == 10 {
c ← 0;
richtung ← zufall(0, 2);
If richtung == 0 {
geheLinks();
If Not vornFrei() {
geheLinks();
geheLinks();
If Not vornFrei() {
geheLinks();
}
}
} Else {
geheRechts();
If Not vornFrei() {
geheRechts();
geheRechts();
If Not vornFrei() {
geheRechts();
}
}
}
}
While Not vornFrei() {
geheLinks();
}
c ← c+1;
geheVor();
}
Yeah, well, nach dem LEsen des Threads will ich das definitiv nicht mehr. Anscheinend lernt man dort nix mehr. Hoffe mal daß das nur die eine Uni ist und nicht exemplarisch. 🤔CyborgBeta schrieb:Bei manchen Antworten fragt man sich schon... ob der Antwortende schon mal eine Uni von innen gesehen hat.![]()
Ganz und gar nicht so in etwa. Wie ich schon dargelegt habe, ist die Fragestellung weit davon entfernt, trivial zu sein und jemand ohne zufällig passende Spezialkenntnisse in Graphentheorie wird sich schwer tun auch nur simple Aussagen über ein zufälliges Durchlaufen des Labyrinthes herzuleiten. Die Antwort auf deine Frage lautet übrigens: "Mindestens eine einzelne Frage", nur falls du etwas anderes gedacht haben solltest.Iqra schrieb:So in etwa wie "denk dir ne Zahl zwischen 1 und 1000, wieviele fragen brauchst du mindestens um die richtige Zahl zu ermitteln?" .
Gegeben sei ein Labyrinth der Größe 12x12. Es gibt keine Kreise/Zyklen darin und jedes Feld in dem Labyrinth ist von der Startposition aus erreichbar. Es gibt genau ein Ziel. Ohne mir zu merken wo ich langlaufe gehe ich an jeder Kreuzung in eine zufällige Richtung. Wie lange muss ich im Durchschnitt laufen um ans Ziel zu gelangen?
Ggf. fehlende Angaben (Anzahl der Kreuzungen u.ä.) können selber in einem sinnvollen Rahmen festgelegt werden.
Ich will meinen für jede vorgegebene Wahrscheinlichtitanskin schrieb:Ohne sich etwas zu merken und Polygonen mit Löchern/Hosen gegeben zu haben, ist es nicht möglich ein Verfahren zu entwickeln, welches immer hält.
ϵ
gibt es einen Zeitpunkt t
für den gilt, dass die Wahrscheinlichkeit, dass der Algorithmus angehalten hat kleiner als ϵ
ist. Das ist so viel wie man bei zufallsbasierten Verfahren prinzipiell nur erreichen kann.Das vermute ich ist vergleichsweise einfach zu beweisen, denn es reicht zu beweisen, dass das Verfahren jede Stelle eines Labyrinthes erreichen kann.titanskin schrieb:Überlege dir ob dein Verfahren in allen Problem Instanzen (= Irrgärten) determiniert, d.h. überhaupt das Ende findet, wenn du deinen Randomisierer bestimmen könntest. Diese Aussage bei deinem Vorgehen ist schon ordentlich schwer zu beantworten.
Und jetzt noch die Betrachtung, wie erfolgreich das Ganze wenn gilt: x sei die mittlere, zu laufende Strecke (im Zweifelsfall schätzen) und es gilt x >>10CyborgBeta schrieb:Na gut, hier wäre mein "naiver" randomisierter Ansatz in Pseudocode:
Heh, okay, Analogie schlecht gewählt. 😅 ich meinte nur, Probleme wie dieses erfordern keine besondere Forschung insbesondere durch Studienanfänger. Natürlich habe ich grad eher das Gefühl von … wie nenne ich es… wissenschaftlicher Faulheit? Also einen Mangel an Wissenwollen. Und das ist für studis glaub ich eine sehr unglückliche Eigenschaft, bis zum Punkt wo ich frage, ist Studium wirklich der beste Weg?BeBur schrieb:Ganz und gar nicht so in etwa.
Abgesehen vom eigentlichen Thema finde ich es krass, wie weit du dich aus dem Fenster lehnst und einfach mal nach ein paar Beiträgen die Eignung zum Studium in Frage stellst von jemandem der sich hier in seiner Freizeit austauscht zu einem Thema mit dem er sich freiwillig gedanklich auseinander setzt.Iqra schrieb:Also einen Mangel an Wissenwollen. Und das ist für studis glaub ich eine sehr unglückliche Eigenschaft, bis zum Punkt wo ich frage, ist Studium wirklich der beste Weg?
Das stimmt. Man betrachte mal folgendes Labyrinth:Piktogramm schrieb:Da gibt es einen randomisierten Ansatz, der an der Stelle besser funktioniert, der randomisiert aber nicht(!) nach gelaufener Wegstrecke.
void main() {
int r = algorithm_1(5, 15);
schreib("" + r);
}
int algorithm_1(int min, int max) {
int r = 0;
int c = 0;
while (true) {
if (kornDa()) return r;
if (c >= 10) {
c = (int) (Math.random() * (max-min)) + min;
int z = (int) (Math.random() * 2);
if (z == 0) {
linksUm();
linksUm();
}
linksUm();
if (!vornFrei()) {
linksUm();
linksUm();
if (!vornFrei()) {
linksUm();
}
}
}
while (!vornFrei()) linksUm();
r++;
c++;
vor();
}
}
min
, max
wählt...