php.de

Zurück   php.de > Lösungen durch Skripte > Scriptbörse

Scriptbörse PHP Lösungen für nen schmalen Taler

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.03.2009, 15:12  
Neuer Benutzer
 
Registriert seit: 28.03.2009
Beiträge: 2
ppppp befindet sich auf einem aufstrebenden Ast
Standard nachschauen ob geschlossene kette vorliegt

will eine (rekusive?)funktion bauen, die nachschaut ob eine geschlossene kette vorliegt:

jedes element x kann ein anderes element y zu seiner freundeliste hinzufügen.
habe folgenden mysql datensatz
id | x | y

also z.b.:
1 | a | f //a will f
2 | f | b //f will b
3 | b | c //b will c
4 | b | e //b will e
5 | e | d //e will d
6 | d | a //d will a

würde dann die geschlossene kette: a->f->b->e->d->a ergeben.

-> wie kann ich algemein auslesen, ob so eine kette vorliegt? thx

Geändert von ppppp (28.03.2009 um 15:21 Uhr).
ppppp ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.03.2009, 15:15  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.992
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Willkommen im Forum!

Damit Du hier nicht mit dem falschen Fuß einsteigst beherzige bitte diesen Thread.
Wichtige Punkte:
  • Wir helfen gern, wenn Du Initiative zeigst. Macht mal ist nicht.
  • Bitte benutze die Code-Box-Buttons und poste relevanten Code.
  • Bitte stelle verständliche Fragen in ordentlicher Sprache. Sei prägnant!
  • Bitte verwende für spätere Leser einen Threadtitel, der das Problem kurz beschreibt
  • Bitte drängle nicht.
  • Bitte markiere abgeschlossene Themen über den "Erledigt"-Link oben links.

Dieses Posting erfüllt nicht die Voraussetzung des Fortgeschrittene-Forums. Und wenn es keinen eigenen Code gibt, nicht mal die für Einsteiger. Also Eigenbeteiligung oder Scriptbörse.

[MOD: verschoben]
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 28.03.2009, 15:58  
Neuer Benutzer
 
Registriert seit: 28.03.2009
Beiträge: 2
ppppp befindet sich auf einem aufstrebenden Ast
Standard

ok, sorry.

verlange auch kein fertiges script, sondern eher ein paar ratschläge, z.b.:
nehmen wir an ich habe eine rekusive funktion die das hoffentlich wie gewünscht prüft:

pseudocode:
Zitat:
//anfangsuser
select elementb von xyz where elementa = $anfangselement
testen($elementb);

function testen(elementa)
{
select elementb von xyz where elementa = $elementa
if ($elementb == $anfangselement) //kette zu
{break;}
else //weitersuchen mit neuen startelement
{testen($elementb);}
}
sobald ein treffer kommt, will ich die funktion mit break abbrechen.
wenn aber kein treffer kommt, würde die rekusive funktion ewig laufen:
-> wie kann ich das machen, dass jeder eintrag nur 1x getestet wird, also die datenbank max 1x durchlaufen wird (bzw. schon vorher abbricht, wenn trefferkette gefunden wird)?
ppppp ist offline   Mit Zitat antworten
Alt 28.03.2009, 16:17  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Schau dir mal dafür den Algorithmus für Breitensuche an!

Was bei dir noch wichtig wäre die besuchten Knoten zwischen zu speichern. Wenn du die eine Klasse bastelst kannst du ein Array nutzen in dem eben alle IDs der besuchten Knoten drin stehen. Und dann kannst du eben doppelte Routen abfangen.

Um abzubrechen wenn du eine Route gefunden hast könntest du eben die gefundene ID per return zurück geben. Und das eben rekursiv wieder nach oben zur "root" Funktion. (Schwer zu erklären aber auf jeden Fall sollte eben bei gefundener Route die komplette Suche abgebrochen werden und alle IDs die in der Route enthalten sind zurückgegeben werden.)

Desweitern solltest du noch eine maximale Tiefe haben die nicht überschritten wird. Ich weiß nicht wie dein System aufgebaut ist aber wenn es sein kann das KEINE Route zwischen zwei Knoten existiert dann terminiert natürlich der Algorithmus wenn alle Knoten besucht wurden (da ja keine doppelt besucht werden dürfen) aber das kann unter Umständen extrem aufwendig werden.
Daher eine maximale Tiefe angeben z.B. 6 Knoten danach wird der Algorithmus abgebrochen.

Kleine Annotation am Schluss: Jeder Mensch ist mit jedem anderen über 6-7 Ecken verbunden. Natürlich im Durchschnitt aber dass man jede andere Person auf der Erde über höchstens 7 Ecken kennt ist schon interessant
Flor1an ist offline   Mit Zitat antworten
Alt 28.03.2009, 16:41  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.992
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich persönlich finde es gruselig, in einer Schleife massig Selects abzusetzen. Bei einer großen Useranzahl kannst Du dir dann gleich immer nen Wecker stellen oder Kaffee kochen gehen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
algorithmus kaffee kochen, algorithmus kaffeekochen, geschlossene kette, algorithmen kaffee kochen, rekusive breitensuche, html nicht geschlossene tags prüfen, algorithmus kaffee, php datei auf nicht geschlossene tags prüfen, html nach geschlossenen tags prüfen, php geschlossene tags überprüfen, php auf geschlossene tags prüfen, eine geschlossene kann, ich gehe nachschauen ob, eine vorliegt, algorithmen kaffekochen, php html auf geschlossene tags prüfen, kaffeekochen algorithmus

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum