SQL Such "Algorythmus" für Vokabeltrainer

Hanni2k

Commander
Registriert
Apr. 2006
Beiträge
2.833
Hey,

ich bin am basteln eines Vokabeltrainers... (ja ich weiß, es gibt ihn schon. Aber ich möchte ein eigenen machen um bissl in der "materie" zu bleiben. Der wird danach auch gebraucht). Und nein, es ist keine Hausaufgabe ;)

Ich würde gerne die Vokabeln so raussuchen, das welche die besonders oft schlecht gemacht sind eine höhere Priorität haben. Dabei sollen aber leichte nicht vernachlässigt werden. (Nich das später ine Vokabel 200mal und die andere 1 mal abgefragt wurde).

Ich speicher in der DB die anzahl der richtigen und falschen antworten.

Ich habe bisher 2 verschiedene ansätze um die Vokabeln herauszubekommen.

A)

1. Ich suche als erstes nach Vokabeln die noch NIE abgefragt werden.
2. Ich suche nach Vokabeln die eine differenz von 5 zu der am meisten abgefragte Vokabel hat. (Zb. Die am meisten abgefragte Vokabel wurde 20 mal gefragt. So finde ich alle die weniger als 15 mal abgefragt wurde.).
3. Ist dies nicht gegeben wird als letzte instanz die Vokabel herausgesucht, die den schlechtesten Fehlerquotienten hat. (fehler/gesamtanzahl).

B)

1. Ich habe mit einer Rand funktion zu 1/3 die Chance die Vokabel abzufragen die am wenigsten aufgerufen wurde.
2. Ich habe mit der Rand Funktion zu 2/3 die Chance die Vokabel mit dem schlechtesten Fehlerquotienten aufzurufen.

Ich weiß das es ein wenig übertrieben is, aber irgendwie macht mir das grad halt spaß sowas zu schreiben und mache mir da nen kopf. Für welche Variante währt ihr? Oder gibts da ne bessere alternative?

Ist zwar nur für meine Freundin für die Uni, da handelt es sich so um 200-300 Vokabeln und dann kommen noch 100 Definitionen dazu oderso. Sie lernt zwar mit ihren mitschriften, dachte mir aber das sie damit vll auch noch lernen kann.
 
erstelle doch sowas wie einen "wiederholungsfaktor" für jeden vokabeleintrag und einen counter.

ersterer steigt dann bei einer falschen antwort und sinkt bei einer richtigen.
danach kannst du die abfrageergebnisse dann ordnen lassen und bei gleichem wiederholungsfaktor die vokabeln mit dem niedrigeren counter vorziehen.

beide werte allerdings nur zur beeinflussung der wahrscheinlichkeit verwenden und nicht zur direkten auswahl.

das wäre dann praktisch a und b kombiniert.

edit:
nur die umsetzung mit der wahrscheinlichkeitstendenz ist nicht ohne. ich könnte mir das so vorstellen, dass man einer vokabel darauf basierend einen gewissen zahlenraum zuspricht (stell dir das am besten als kuchendiagramm vor oder so).
das problem würde hier dann sein, den zahlenraum von lücken durch editierungen zu befreien. erinnert ein bisschen an die defragmentierung.
die lösung hat allerdings den vorteil, dass diese am genausten wärr, aber performance frisst.

anderer ansatz diesbezüglich wäre eine rasterisierung der vokabeln in blöcke, in denen vokabeln die gleichen werte haben. dann kann man das wie eine pyramide abarbeiten. zuerst den block raussuchen und dann nochmals per zufall die vokabel. dann die oben genannten werte editieren und diese vokabel unter umständen einem anderen block zuordnen.
vorteil davon ist die bessere performance und die beliebige auflösung/blockanzahl.
 
Zuletzt bearbeitet:
Hallo,

kennst du diese Kartons mit denen man mit Kärtchen lernt?
Auf der Vorderseite steht es aus deutsch, auf der Rückseite in der Fremdsprache.

Die Karten kommen alle ganz vorne rein.
Beantwortet man die Karte richtig, kommt sie in ein Fach weiter hinten.
Beantwortet man sie falsch, kommt sie eins weiter.

Man nimmer immer die Karte vom vordersten Fach, wenn das leer ist vom nächsten...

So würde ich es machen.

Start:
Update Vokabeln
set fach = 0

Auswahl der Karte:
Select Top 1 Id, German, Fremdsprache from Vokabeln
oder by fach asc, lastuse asc

-> Damit bekommst die die älteste Vokabel vom vordersten Fach.

Beantwortet er die Frage richtig:
Update Vokabeln
set fach= fach +1, lastuse = getdate()

Beantwortet er sie Falsch:
Update Vokabeln
set fach= 0, lastuse = getdate()

Gruß.
 
Schonmal danke für die antworten.

Das mit dem "wiederholungsfaktor" hab ich noch nich so ganz verstanden, aber die rastarisierung in "blöcken" finde ich garnich so verkehrt. Ich habe ja schon meinen Fehlerquotienten. Ich könnte diese Quotienten einteilen zb.

0.00 - 0.25
0.25 - 0.5
0.50 - 0.75
0.75 - 1.0

und diese bereiche mit einer gewissen warscheinlichkeit aufrufen lassen. zb. 50%, 25%, 15%, 10%.

Das mit den Fächern ist auf jedenfall nich schlecht, allerdings is da noch das problem mit nachträglich neu hinzugefügten vokabeln. Diese würden bei 0 anfangen (oder man fängt das im skript ab). So würde man die neue vokabel solange nach "hinten" reichen bis man bei den anderen "boxen" angekommen ist.
 
So hab ichs mir ja auch gedacht, neue Vokabeln landen dann ganz vorne - ist ja auch irgendwie logisch :)
 
Grundlegend würde ich erst einmal relevante Faktoren festlegen.

Möglichkeiten:
- Wortlänge
- Schwierigkeit
- Anzahl richtig gelöst
- Anzahl falsch gelöst
- ...

Danach gewichtest du alle Faktoren (da muss nicht 1 raus kommen ;) )

Danach generierst du ausreichend Zufallszahlen damit jeder Faktor eine eigene besitzt.
Danach machst du ein Query dass dir das maximum ausgibt von faktor1*gewichtung*zufallszahl1 + faktor2*gewichtung*zufallszahl2+....
Wichtig ist die Gewichtung nicht schon in die DB mit ein zu rechnen da du den sonst nicht später leicht jusitieren kannst.
 
sorry das ich solange nich geantwortet habe. Werde mir eurer posts nochmal genauer angucken, vielen dank!.

Ich hab es bisher so gelöst:

50% Chance Vokabeln mit dem Quotienten von 1 - 0.75
25% Chance Vokabeln Quotient 0.75 - 0.5
15% Chance Vokabeln Quotient 0.5 - 0.25
10% Chance Vokabeln Quotient 0.25 - 0

zu kriegen. Bin aber gerne für änderunfgen bereit wenn cih mir das mal angeguckt habe ;)
 
Zurück
Oben