|
You last visited: Today at 04:59
Advertisement
Repräsentative Zahl für einen String
Discussion on Repräsentative Zahl für einen String within the General Coding forum part of the Coders Den category.
09/12/2010, 13:13
|
#16
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
das problem ist, das deine beiden kriterien sich gegenseitig ausschließen. um das zweite kriterium zu erfüllen, müsste man den buchstaben eine zahl zuweisen, die auf basis der stellung im alphabet erstellt wurde.
das ganze lässt sich recht leicht umsetzen. man könnte zb auf 2er potenzen basis arbeiten.
also zb array der buchstaben erstellen:
Code:
buchstabe[26] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
(man kann das natürlich auch in einer schleife über ascii umwandlung erledigen)
und dann jedem im string vorkommenden buchstabe, 2^arrayposition zuordnen und alle resultierenden zahlen addieren. so wäre rein logisch gesehen die kollisionsrate = 0. man könnte sogar noch im nachhinein genau bestimmen, welcher buchstabe wie oft im string vorkam.
das problem ist wenn man den buchstaben so zahlen zuordnet, kann man zb "ab" nichtmehr von "ba" unterscheiden im nachhinein.
wenn du auch die reihenfolge der buchstaben als wichtig erachtest, musst du den string als array von buchstaben betrachten, und diese auch dementsprechend in ein array aus zahlen umwandeln (einfach über ascii tabelle).
es ist definitiv nicht möglich einem string eine einzige zahl zu zuweisen, und dabei noch beide deiner kriterien zu erfüllen. das lässt sich wie bereits erwähnt nur über arrays von buchstaben/zahlen lösen.
|
|
|
09/12/2010, 14:32
|
#17
|
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
|
Wenn man die String Länge nicht erfasst kann man unmöglich auf die Zahl der vorkommenden Buchstaben schließen, es gibt nämlich schöne Kollisionen wie 'ii'=1024 und 'j'=1024 das gleiche gilt auch für 'aa'=2 'b'=2 und so weiter.
Und was der TE wirklich möchte ist wohl eher etwas anderes, wenn ich ihn richtig Verstehe möchte er eine Binäre Suche auf ein Array von Strings anwenden, dazu muss nur das Array Alphabetisch sortiert sein, wofür er natürlich eine Vergleichsfunktion benötigt um das Array zu sortieren.
Für ein Array von ASCII Strings verwendet man am besten einen std::vector<std::string>, dann kann man auch einfach std::sort und std::binary_search verwenden, wenn du natürlich zu lernzwecken die Funktionen selbst schreiben willst, dann benutzt wenigstens ein std::string array, denn mit char* wird das einfach nur unschön und du musst dich auch noch um den Speicherplatz für die Strings kümmern.
|
|
|
09/12/2010, 15:03
|
#18
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by Bot_interesierter
Wenn man die String Länge nicht erfasst kann man unmöglich auf die Zahl der vorkommenden Buchstaben schließen, es gibt nämlich schöne Kollisionen wie 'ii'=1024 und 'j'=1024 das gleiche gilt auch für 'aa'=2 'b'=2 und so weiter.
Und was der TE wirklich möchte ist wohl eher etwas anderes, wenn ich ihn richtig Verstehe möchte er eine Binäre Suche auf ein Array von Strings anwenden, dazu muss nur das Array Alphabetisch sortiert sein, wofür er natürlich eine Vergleichsfunktion benötigt um das Array zu sortieren.
Für ein Array von ASCII Strings verwendet man am besten einen std::vector<std::string>, dann kann man auch einfach std::sort und std::binary_search verwenden, wenn du natürlich zu lernzwecken die Funktionen selbst schreiben willst, dann benutzt wenigstens ein std::string array, denn mit char* wird das einfach nur unschön und du musst dich auch noch um den Speicherplatz für die Strings kümmern.
|
da hast du natürlich vollkommen recht. habe vergessen zu erwähnen das man die stringlänge natürlich immer mit speichern muss >.<
dennoch war ja seine hauptfrage ob es möglich ist, einem string eine zahl zu zuweisen und dabei noch die beiden kriterien zu berücksichtigen. und das ist leider nicht möglich.
|
|
|
09/12/2010, 16:17
|
#19
|
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
|
Seine Hauptfrage ging allerdings davon aus das er für die Binarysearch den Strings überhaupt eine Zahl zuweisen muss, was nicht der Fall ist, weshalb das ganze gerede über Hashs und CRCs dem TE in keinster Weise hilft der Lösung seines Problems näher zu kommen.
|
|
|
09/12/2010, 19:31
|
#20
|
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
|
machs doch einfach so:
versuchs mal mit der:
Code:
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
char get_string_num(char eingabe[])
{
char summe;
char * text = strtok(eingabe, "");
int textsize = sizeof( text );
char * krypt[textsize];
int versetzung = 0;
/* Zufallszahl erzeugen */
time_t t;
time(&t);
srand((unsigned int)t);
int zufall = rand() % textsize + 1;
summe += zufall;
/* Text kryptokrafieren */
for( int i = 0; i < textsize; i++ )
{
if(i+zufall>textsize)
{
versetzung = i+zufall-extsize;
}
krypt[verstzung] = text[i];
}
for( int i = 0; i < textsize; i++ )
{
summe += kyrpt[i];
}
return summe;
}
int main()
{
char eingabe[256]
while(1)
{
cin >> eingabe;
char ausgabe = get_string_num(eingabe);
cout << ausgabe << endl;
}
return 0;
}
Der Code vreschlüsselt den String nach der Cäsar methode mit einer Zufallszahl und kettet dann die ASCII Werte hintereinander
Die erste Ziffer ist die zufallszahl mit der Verschlüsselt wurde damit man wieder ohne Probleme entschlüsseln kann
Mit der Mehtode hast du eine Sehr minimale Kollisionrate (was nach deinem ersten post in ordnung ist) und kann den Zahlenwert ohne probleme in einen String zurückwandeln
Beispiel für den code:
String = Hallo
Zufallszahl = 2
Cäsar Methode
String = loHal
ASCII = 1081117297108
End Ausgabe: 21081117297108
|
|
|
09/12/2010, 22:49
|
#21
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Vielleicht solltest du mal besser lesen, es geht hier nicht darum, etwas zu verschlüsseln, sondern um eine Binäre Suche von Strings, die der TE mithilfe von String repräsentativen Zahlen implementieren wollte.
|
|
|
09/12/2010, 22:54
|
#22
|
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
|
Ist mir schon klar nur damit hat er dann einen Repäsentativen werde der eigentlich nur einmal bis max. zweimal vorkommt
|
|
|
09/12/2010, 23:40
|
#23
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Toll, dafür hat er nen gleichlangen verschlüsselten String ;O Kann er auch gleich den normalen nehmen.
|
|
|
09/15/2010, 17:45
|
#24
|
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
|
Entschuldigt, dass ich nicht mehr geantwortet hab, ich hab allerdings eben selber eine (zwar noch ausbaufähige, aber) funktionierende Möglichkeit gefunden.
Für alle die es auch mal interessieren könnte, hier mein Code:
PHP Code:
double stringRepresent (char* chrArr, int count)
{
int const conversionNr= 87;
int conversionRes;
int basic= chrArr[0] - conversionNr;
double result= basic;
cout << basic << "\n";
cin.get();
for( int i=1; i <= count - 2; i++)
{
conversionRes= chrArr[i] - conversionNr;
cout << conversionRes << "\n";
cout << conversionRes * multiply( 0.01, i) << "\n";
result += conversionRes * multiply( 0.01, i);
}
return result;
}
Bei multiply() handelt es sich um ne kleine Hilfsfunktion zum potenzieren.
Das verbleibende Problem ist nun, dass durch diese Methode z.B. "aaa" = 10.11 und ebenfalls "ab" = 10.11 ist.
Ich halte es für schlecht das mit nem einfachen If zu lösen (da das zu lahm wäre und dies den Algo ausbremst).
Vielleicht kann mir da wer weiterhelfen (da das Problem warscheinlich nen häufigeres Problem sein dürfte  )
|
|
|
 |
|
Similar Threads
|
Suche zahl für Reichsschlacht map
08/04/2010 - Metin2 Private Server - 3 Replies
Hallo ^^ nehem an das es der seleb bug in profizockers files v2 ist wei bei dem ox das er in der config ne zahl ergessen hatt , komem nähmlich nicht auf die reiche maps mit eddys quest :P kann mir mal wer dei nr nennen für die map ?
also :> di eman bei config hinnschreiben muss .. :>
|
Wofür steht die Zahl?
04/14/2010 - Metin2 Private Server - 3 Replies
http://img180.imageshack.us/img180/3105/bildjk.jpg
Weiß vielleicht jemand für was diese Zahlen stehen, die makiert sind?
Vllt für die Droprate?
|
C++ wie zeichnet fraps die fps zahl?
01/17/2010 - C/C++ - 4 Replies
Hi, ich suche eine Möglichkeit einen Text über das aktive Fenster zu zeichnen (wie es fraps mit der FPS zahl in games macht)
Was für Möglichkeiten habe ich um einen "schönen" Text über das aktive Window zu zeichnen ;)?
schön = Einstellbare Farbe/Größe/(optional: Font) und transparent, und flimmern darf es nicht :s.
|
Poste mir ne Zahl!
05/31/2009 - Off Topic - 16 Replies
Hi,
Ganz einfach^^
Zahlen posten
User 1, Postet die zahl 1
User 2 Die zahl2 immer so weiter^^
ich fang mal an an
http://www.firmenlauf-bonn.de/img/1.gif
|
Zahl ?
03/31/2008 - Kal Online - 3 Replies
Kurze frage ...
Welche zahl muss ich da nu raus nehmen was ich in UCE unter
FIRST SCAN und NEXT SCAN schreiben muss....
( skill
( key "knight-5")
( name "Transcendental Blow")
( limit knight)
|
All times are GMT +1. The time now is 05:01.
|
|