Algorithmen, Lösungsmethoden, Vergleich ihrer Leistung - Seite 11

 
Artyom Trishkin:

Der Rest von uns hat bisher nur die Frechheit, zu lachen und mit dem Finger zu zeigen.

Ernsthaft? Hier ist eine alternative Sichtweise.

Ein Mann kam in ein Thema, von dem er überhaupt keine Ahnung hatte, und wurde sofort aufgefordert, es zu verlassen, und nahm es mit in sein Lieblingsrevier.

Schließlich wechselte er in einen anderen Zweig und stieß auf ein unverständliches Problem, das nichts mit den in diesem Zweig diskutierten Generika oder mit der Praxis zu tun hat.

Er hat nicht einmal auf Versuche, auf Fehler hinzuweisen, mit Unsinn geantwortet.

Dies ist nicht das erste Mal, dass er dies getan hat.

Oh, du armer Kerl.

Vielleicht gehören Sie auch zu denjenigen, die mit Hilfe der Array-Sortierung suchen und nicht verstehen, was da vor sich geht?

 
Комбинатор:

Ernsthaft? Hier ist eine alternative Sichtweise.

Ein Mann kam zu einem Thema, von dem er keine Ahnung hatte, und er wurde sofort aufgefordert, es zu verlassen, und er ging zu seinem Lieblingsthema über.

Schließlich wechselte er in einen anderen Zweig und stieß auf ein unverständliches Problem, das nichts mit den in diesem Zweig diskutierten Generika oder mit der Praxis zu tun hat.

Er hat nicht einmal auf Versuche, auf Fehler hinzuweisen, mit Unsinn geantwortet.

Dies ist nicht das erste Mal, dass er dies getan hat.

Oh, du armer Kerl.

Vielleicht gehören Sie auch zu denjenigen, die mit Hilfe der Array-Sortierung suchen und nicht verstehen, was da vor sich geht?


Wissen Sie, vor langer Zeit habe ich zum ersten Mal programmieren gelernt - und dann habe ich herausgefunden, dass es Lehrbücher zum Programmieren gibt. Das Gleiche galt für die Beherrschung von OOP und anderen Dingen.

Aber eine Tatsache ist eine Tatsache, und niemand hat ein Beispiel genannt.

Zwei Beispiele mit und ohne Verwendung von Blättern (d. h. ohne Klassen).

Natürlich ohne die Verwendung von String-Arrays (dies gilt für die Variante ohne die Klasse).

 

Nun, die Frage der Sortierung ist immer relevant - gibt es Optionen für eine schnellere Sortierung als die Standardfunktion und wie sieht der Code im Allgemeinen aus? .... Soweit ich mich erinnere, gibt es verschiedene Möglichkeiten der Sortierung in Abhängigkeit von der Größe des zu sortierenden Arrays - und die Möglichkeit, zusätzlichen Speicher zu verwenden, um die Geschwindigkeit zu erhöhen

 

Es wäre interessant, die besten Algorithmen in Zahlen zu sehen, zumindest was die Ausführungszeit betrifft.

Bislang sieht es so aus, als würden wir unsere Version als die beste verteidigen.

Die Kriterien für diese Selbstbeurteilung sind jedoch unklar.

 
Комбинатор:

Ernsthaft? Hier ist eine alternative Sichtweise.

Ein Mann kam zu einem Thema, von dem er keine Ahnung hatte, und er wurde sofort aufgefordert, es zu verlassen, und er ging zu seinem Lieblingsthema über.

Schließlich wechselte er in einen anderen Zweig und stieß auf ein unverständliches Problem, das nichts mit den in diesem Zweig diskutierten Generika oder mit der Praxis zu tun hat.

Er hat das Problem nicht wirklich gelöst, und wenn er versucht, auf Fehler hinzuweisen, macht er sich etwas vor.

Dies istnicht das erste Mal, dass er dies getan hat.

Oh, du armer Kerl.

Vielleicht gehören Sie auch zu den Menschen, die ein Maximum an Array-Sortierung betreiben und einfach nicht verstehen, was da vor sich geht?

Ja, ich stimme zu... Das war zu erwarten, aber was ich von Peter wollte, war etwas ganz anderes (wenn Sie versuchen, zu analysieren, was ich ihm angeboten habe, wird mein Ziel klar)

Und ich stimme dem zu. Aber der Thread wurde zu einem anderen Zweck erstellt - um zu zeigen und zu diskutieren.

Aber nicht zum Lachen. Was hat das mit "beleidigt sein" zu tun? Es ist eine Farce. Zuerst hat Peter bei Vasily damit angefangen, dann habe ich ihn hier um eine ruhige Diskussion gebeten, und zwar nicht nur bei Peter. Die Idee war eine andere - nicht um sich über falsche Vorstellungen lustig zu machen, sondern um zu erzählen, zu erklären... Und, was noch interessanter ist - zu versuchen, interessante Algorithmen zu entwickeln. Verstehen Sie das? Nein?

:))) Ja, natürlich. Ich weiß nicht so recht :)))

 
Renat Akhtyamov:

Es wäre interessant, die besten Algorithmen in Zahlen zu sehen, zumindest was die Ausführungszeit betrifft.

Bislang scheint es nur darum zu gehen, die eigene Version als die beste zu verteidigen.

Die Kriterien für eine solche Selbsteinschätzung sind jedoch nicht eindeutig.

Ich glaube, das würde viele Leute interessieren.

Nun, jeder weiß, dass Peter in seinem Ego hartnäckig Fremdartigkeit beweist - und jeder hat die Nase voll davon.

Ich persönlich würde mir wünschen, dass Peter seine Beharrlichkeit in eine andere Richtung lenkt - nicht um einen Gemüsegarten anzulegen, sondern um zu verstehen, was ihm angeboten wird.

 
Artyom Trishkin:

Ich glaube, das würde viele Leute interessieren.

Nun, die Tatsache, dass Peter sein eigenes Ich anstarrt, beweist die Fremdheit - jeder weiß es hier, und jeder hat es satt.

Ich persönlich würde mir wünschen, dass Peter seine Beharrlichkeit in eine andere Richtung lenkt - nicht um einen Gemüsegarten anzulegen, sondern um zu verstehen, was ihm angeboten wird.

Die für die Ausführung eines Algorithmus benötigte Zeit lässt sich leichter vorhersagen/berechnen, wenn man die Zeit der Funktionsausführung kennt, z. B. durch 10 000-malige Wiederholung.

Aber ich bin noch nie auf das Problem gestoßen, dass ich den Code nicht bis zum Ende fertigstellen kann, egal wie kompliziert er ist.

Wie man so schön sagt - bravo MQL!
 
Artyom Trishkin:

Ich glaube, das würde viele Leute interessieren.

Nun, die Tatsache, dass Petrus, stur wie er ist, beweist die Fremdheit - jeder weiß es hier, und jeder hat es schon satt.

Ich persönlich würde mir wünschen, dass Peter seine Beharrlichkeit in eine andere Richtung lenkt - nicht um einen Gemüsegarten anzulegen, sondern um zu verstehen, was ihm angeboten wird.

Niemand hat etwas dagegen, zu helfen und zu erklären usw. Aber Peter reduziert in so vielen Threads alles auf das Gleiche, dass keine Lust besteht, zu erklären und zu helfen.
 
Alexey Oreshkin:
Niemand hat etwas gegen Hilfe und Erklärungen usw. Aber Peter reduziert in so vielen Threads alles auf das Gleiche, dass man keine Lust hat, zu erklären und zu helfen.

 
Artyom Trishkin:

Bis jetzt sehe ich hier nur eine Verhöhnung des Mannes, der die Kühnheit besaß, seine Entscheidung hier zu veröffentlichen.

Offensichtlich ist es... um es milde auszudrücken, ist es eine völlige Zeitverschwendung. Aber er tat es. Die anderen haben bisher nur den Mut, zu lachen und mit dem Finger zu zeigen.


#include <Generic\ArrayList.mqh>


//+------------------------------------------------------------------+
//|  Defines                                                                |
//+------------------------------------------------------------------+

#define  TEST_LOG true
      
#define  TEST_START(NAME) string TEST_START_STRING_INFO_##NAME = StringFormat("%s, Step:%s, Test was started....", __FUNCTION__, string(NAME));  \
                         if (TEST_LOG) Print(TEST_START_STRING_INFO_##NAME);                                                                                  \
                         ulong TEST_TIMER_##NAME = GetMicrosecondCount();                                                                 
                          
#define  TEST_END(NAME)   ulong TEST_DURATION##NAME = GetMicrosecondCount() - TEST_TIMER_##NAME;                                                                                \
                         string TEST_END_STRING_INFO_##NAME = StringFormat("%s, Step:%s, Test has been finished. Duration: %I64i.", __FUNCTION__, string(NAME), TEST_DURATION##NAME);  \
                         if (TEST_LOG) Print(TEST_END_STRING_INFO_##NAME);
                         
#define  TEST_DURATION(NAME)  TEST_DURATION##NAME


#define  TEST_ERROR_INVALID_VALUE(NAME) string TEST_ERROR_STRING_INFO_##NAME = StringFormat("%s, Step:%s, Getting value does not match the original one.", __FUNCTION__, string(NAME));    \
                                 if (TEST_LOG) Print(TEST_ERROR_STRING_INFO_##NAME);                                                                                                              \
                                 DebugBreak();                                                                                                                                      \
                                 break;                                                                                          
                                 
#define  TEST_ERROR_NULL_GENERATOR(NAME) string TEST_ERROR_STRING_INFO_##NAME = StringFormat("%s, Was not found correspond Generator class - %s. Please implement it.", __FUNCTION__, string(NAME));  \
                                 if (TEST_LOG) Print(TEST_ERROR_STRING_INFO_##NAME);




//+------------------------------------------------------------------+
//|   Generators                                                               |
//+------------------------------------------------------------------+

template<typename T>
interface IGenerator{
   T GetNext(int index);
};

class IntGenerator : public IGenerator<int>{
   int GetNext(int index){return index;}
};


// TODO bypass the problem with explicit template specialization
template<typename T>
IGenerator<T>* CreateGenerator(){
   string generatorName = typename(T);
   StringToUpper(generatorName);
   
   if (generatorName == "INT"){
      return new IntGenerator();
   }
    
   return NULL;
}

//template<>
//IGenerator<int>* CreateGenerator<int>(){
//   return NULL;
//};




//+------------------------------------------------------------------+
//|    TestCollection Interfaces                                                              |
//+------------------------------------------------------------------+

template<typename T>
interface ITestRandomAccessCollection{
   bool Add(T value);
   T GetValue(int index);
};



//+------------------------------------------------------------------+
//|    TestCollection Implementations                                                   |
//+------------------------------------------------------------------+

template<typename T>
class TestRandomAccessCollectionCArrayList : public ITestRandomAccessCollection<T>{
   CArrayList<T> collection;

public:
   TestRandomAccessCollectionCArrayList(){};
   TestRandomAccessCollectionCArrayList(int capacity):collection(capacity){};
   
   bool Add(T value){
      return collection.Add(value);
   };
   T GetValue(int index){
      int value = -1; 
      collection.TryGetValue(index,value); 
      return value;
   };
};




//+------------------------------------------------------------------+
//|    Test Functions                                                              |
//+------------------------------------------------------------------+

template<typename T>
ulong TestRandomAccessCollectionAfterAdding(ITestRandomAccessCollection<T> &testCollection, const int iterationCount = 1000, int srandValue = 0){
      //TODO add shared_ptr / move out generator (Dependency Injection)
      IGenerator<T>* generator = CreateGenerator<T>();
      if (generator == NULL){
TEST_ERROR_NULL_GENERATOR("FirstGenerator")
         return 0;
      }

      if (srandValue == 0)
         srandValue = int(TimeCurrent());
         
      T validationArray [];
      ArrayResize(validationArray,iterationCount);
      

      for(int i = 0; i < iterationCount; i++){
         T value = generator.GetNext(rand());
         testCollection.Add(value);
         validationArray[i] = value;
      }
      
TEST_START ("GetValue")
      for(int i = 0; i < iterationCount; i++){
         int index = rand() % iterationCount;
         
         T value = testCollection.GetValue(index);
         T originalValue = validationArray[index];
         if (value != originalValue){
TEST_ERROR_INVALID_VALUE("Validate")
         }
      }
TEST_END ("GetValue")
      return TEST_DURATION("GetValue");
}




int OnInit()
{
  ulong result;
  
  // TODO average result
  {
     printf ("TestRandomAccessCollectionAfterAdding: Started.", result);
     TestRandomAccessCollectionCArrayList<int> testCollection();
     result = TestRandomAccessCollectionAfterAdding(testCollection, 10000, 1);
     printf ("TestRandomAccessCollectionAfterAdding: Fineshed. Total result: %I64i\n", result);
  }
  
  
  //TestArrayListRandomAccessDuringAdding(10000);
  return INIT_FAILED;
}