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

 
Реter Konow:
Warum wird eine perfekte Lösung für ein bestimmtes Problem als Verhöhnung empfunden? Im Ernst, ich verstehe das nicht...

Was war Ihre Aufgabe? Erinnern Sie sich bitte hier öffentlich daran.

 
Vasiliy Sokolov:

Sie haben etwas Unsinniges geschrieben. Im Wesentlichen eine Variante des Zugriffs auf ein Array über seinen Index. In Wirklichkeit sind die Transaktionsnummern zufällig, und Ihr ganzes Beispiel wird zusammenbrechen, wenn Sie das eigentliche Problem lösen müssen.


Warten Sie, bis Sie es richtig gemacht haben, ich bin sicher, morgen.

 
Реter Konow:

***

Wenn ich sicherstellen möchte, dass Daten nicht aus einem Array verschwinden, wenn dessen Größe geändert wird, muss ich die Daten in die Tabelle eintragen.

Hier ist eine Prüfung für dynamische Arrays: eindimensionalarr_dynamic und zweidimensionalarr_dynamic_multi.

//+------------------------------------------------------------------+
//|                                                  ArrayResize.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.001"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- объявим динамические массивы
   double arr_dynamic[];
   double arr_dynamic_multi[][2];
//--- новый размер в первом измерении массива
   if(ArrayResize(arr_dynamic,5)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic\"");
      return;
     }
   if(ArrayResize(arr_dynamic_multi,5)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic_multi\"");
      return;
     }

   for(int i=0;i<ArraySize(arr_dynamic);i++)
      arr_dynamic[i]=i;
   for(int i=0;i<ArrayRange(arr_dynamic_multi,0);i++)
     {
      arr_dynamic_multi[i][0]=i;
      arr_dynamic_multi[i][1]=i*10;
     }

//--- распечатка значений до увеличения размера
   Print("Перед ArrayResize массив \"arr_dynamic\" имеет такие элементы:");
   ArrayPrint(arr_dynamic);
   Print("Перед ArrayResize массив \"arr_dynamic_multi\" имеет такие элементы:");
   ArrayPrint(arr_dynamic_multi);

//--- увеличим размер на два элемента
   if(ArrayResize(arr_dynamic,ArraySize(arr_dynamic)+2)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic\"");
      return;
     }
   if(ArrayResize(arr_dynamic_multi,ArrayRange(arr_dynamic_multi,0)+2)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic_multi\"");
      return;
     }
//--- распечатка значений после увеличения размера
   Print("После ArrayResize (увеличения размера) массив \"arr_dynamic\" имеет такие элементы:");
   ArrayPrint(arr_dynamic);
   Print("После ArrayResize (увеличения размера) массив \"arr_dynamic_multi\" имеет такие элементы:");
   ArrayPrint(arr_dynamic_multi);

//--- новый размер в первом измерении массива установим равным 3 (то есть уменьшим размер массива)
   if(ArrayResize(arr_dynamic,3)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic\"");
      return;
     }
   if(ArrayResize(arr_dynamic_multi,3)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic_multi\"");
      return;
     }
//--- распечатка значений после уменьшение размера
   Print("После ArrayResize (уменьшение размера) массив \"arr_dynamic\" имеет такие элементы:");
   ArrayPrint(arr_dynamic);
   Print("После ArrayResize (уменьшение размера) массив \"arr_dynamic_multi\" имеет такие элементы:");
   ArrayPrint(arr_dynamic_multi);
  }
//+------------------------------------------------------------------+


Wie Sie sehen können, bleiben die vorherigen Werte erhalten, wenn das Array vergrößert wird:

Перед ArrayResize массив "arr_dynamic" имеет такие элементы:
0.00000 1.00000 2.00000 3.00000 4.00000
Перед ArrayResize массив "arr_dynamic_multi" имеет такие элементы:
         [,0]     [,1]
[0,]  0.00000  0.00000
[1,]  1.00000 10.00000
[2,]  2.00000 20.00000
[3,]  3.00000 30.00000
[4,]  4.00000 40.00000
После ArrayResize (увеличения размера) массив "arr_dynamic" имеет такие элементы:
  0.00000   1.00000   2.00000   3.00000   4.00000  -0.00000  +0.00000
После ArrayResize (увеличения размера) массив "arr_dynamic_multi" имеет такие элементы:
         [,0]     [,1]
[0,]  0.00000  0.00000
[1,]  1.00000 10.00000
[2,]  2.00000 20.00000
[3,]  3.00000 30.00000
[4,]  4.00000 40.00000
[5,] +0.00000 +0.00000
[6,] +0.00000 +0.00000
После ArrayResize (уменьшение размера) массив "arr_dynamic" имеет такие элементы:
0.00000 1.00000 2.00000
После ArrayResize (уменьшение размера) массив "arr_dynamic_multi" имеет такие элементы:
         [,0]     [,1]
[0,]  0.00000  0.00000
[1,]  1.00000 10.00000
[2,]  2.00000 20.00000
Dateien:
 
Vasiliy Sokolov:

Sie haben etwas Unsinniges geschrieben. Im Wesentlichen eine Variante des Zugriffs auf ein Array über seinen Index. In Wirklichkeit sind die Transaktionsnummern zufällig, und Ihr ganzes Beispiel wird zusammenbrechen, wenn Sie ein echtes Problem lösen müssen.

Ich nehme an, dass Sie sich auf die Eintrittskarten beziehen. Ich meine fortlaufende Transaktionsnummern.

Sie können eine parallele Anordnung nebeneinander machen, um die Tickets zu erfassen.

Oder mehrere parallele Arrays, um den Rest der Daten jeder Bestellung zu erfassen.

 
Vladimir Karputov:

Hier ist eine Prüfung für dynamische Arrays: eindimensionalarr_dynamic und zweidimensionalarr_dynamic_multi.


Wie Sie sehen können, bleiben die vorherigen Werte erhalten , wenn die Größe des Arrays erhöht wird:


verstecken Sie hier rein OOP und alles Nützliche

 
Vladimir Karputov:

Hier ist eine Prüfung für dynamische Arrays: eindimensionalarr_dynamic und zweidimensionalarr_dynamic_multi.


Wie Sie sehen können, bleiben die vorherigen Werte erhalten , wenn Sie die Größe des Arrays erhöhen:

Ich danke Ihnen. Dies ist eine sehr wertvolle Information.
 

Ich möchte über "Print and Comment" sprechen - warum niemand aufpasst

 
Vasiliy Sokolov:

Es gibt eine magische Eigenschaft: Kapazität, die übrigens aus irgendeinem Grund in CHashMap fehlt (was ein grobes Versäumnis der Entwickler ist). Durch diese Angabe umgehen wir die erneute Partitionierung. Sie können es in dieser Aufgabe angeben, so dass ich keine Probleme sehe.

Sie können dieKapazität in CHashMap über den Konstruktor angeben.

Vasiliy Sokolov:

Warum sie unterschiedliche Skalierungskoeffizienten haben, ist übrigens auch sehr merkwürdig. Es ist schwieriger, CHashMap neu zu ordnen als das einfachere CArrayList.

Bei CHashMap sollte die Wörterbuchgröße eine einfache Zahl sein, um die Einheitlichkeit der Hashes im Wörterbuch zu gewährleisten.
CHashMap verwendet CPrimeGenerator für die Auswahl von Primzahlen.
Aber leider entspricht die Implementierung von CPrimeGenerator nicht den Erwartungen und enthält nur die unten stehenden Werte:

const static int  CPrimeGenerator::s_primes[]=
  {
   3,7,11,17,23,29,37,47,59,71,89,107,131,163,197,239,293,353,431,521,631,761,919,
   1103,1327,1597,1931,2333,2801,3371,4049,4861,5839,7013,8419,10103,12143,14591,
   17519,21023,25229,30293,36353,43627,52361,62851,75431,90523,108631,130363,156437,
   187751,225307,270371,324449,389357,467237,560689,672827,807403,968897,1162687,1395263,
   1674319,2009191,2411033,2893249,3471899,4166287,4999559,5999471,7199369
  };
Der durchschnittliche Wachstumsfaktor liegt in der Größenordnung von 1,2
 
Vasiliy Sokolov:

Was war Ihre Aufgabe? Erinnern Sie sich bitte hier öffentlich daran.

Die schnellste und effizienteste Lösung für das Hinzufügen von Megabytes zu einem Array (Liste, Wörterbuch...) und das Abrufen von Megabytes aus einem Array nach Transaktionsnummer zufinden, wenn die Anzahl der zukünftigen Transaktionen unbekannt ist.

 
Реter Konow:

Finden Sie die schnellste und effizienteste Lösung für das Hinzufügen von Megabytes zu einem Array (Liste, Wörterbuch...) und das Abrufen von Megabytes aus dem Array, mit einer unbekannten Anzahl von zukünftigen Transaktionen.


Verständlicherweise kam ein Fahrschein nicht in Frage.

Dennoch rate ich Ihnen, Ihren Code mit allen möglichen Dingen wie Boilerplate-Funktionen zu verkomplizieren