Algoritmalar, karar yöntemleri, performanslarının karşılaştırılması - sayfa 18

 
Реter Konow :
Belirli bir sorunun ideal çözümü neden alay konusu olarak algılanıyor? Cidden, anlamıyorum...

Senin görevin neydi? Ona burada herkese açık bir şekilde hatırlat lütfen.

 
Vasiliy Sokolov :

Saçma sapan yazmışsın. Esasen bir diziye dizinine göre erişmenin bir çeşidi. Gerçekte, anlaşma sayıları rastgeledir ve gerçek bir sorunu çözmeniz gerektiğinde tüm örneğiniz çökecektir.


Evet bekle her şeyi doğru yazacak yarın eminim

 
Реter Konow :

***

Yeniden boyutlandırıldığında verilerin diziden kaybolmadığından emin olsaydım, ***

İşte dinamik diziler için bir kontrol: tek boyutlu arr_dynamic ve iki boyutlu arr_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);
  }
//+------------------------------------------------------------------+


Gördüğünüz gibi, dizinin boyutunu arttırırken önceki değerler kalır :

Перед 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
Dosyalar:
 
Vasiliy Sokolov :

Saçma sapan yazmışsın. Esasen bir diziye dizinine göre erişmenin bir çeşidi. Gerçekte, anlaşma sayıları rastgeledir ve gerçek bir sorunu çözmeniz gerektiğinde tüm örneğiniz çökecektir.

Bilet demek istedin sanırım. İşlemlerin seri numaralarını kastediyorum.

Biletleri kaydetmek için yan yana paralel bir dizi oluşturabilirsiniz.

Veya her siparişin geri kalan verilerini kaydetmek için birkaç paralel dizi.

 
Vladimir Karputov :

İşte dinamik diziler için bir kontrol: tek boyutlu arr_dynamic ve iki boyutlu arr_dynamic_multi.


Gördüğünüz gibi, dizinin boyutunu arttırırken önceki değerler kalır :


tamamen burada saklayın OOP ve faydalı olan her şey

 
Vladimir Karputov :

İşte dinamik diziler için bir kontrol: tek boyutlu arr_dynamic ve iki boyutlu arr_dynamic_multi.


Gördüğünüz gibi, dizinin boyutunu arttırırken önceki değerler kalır :

Teşekkür ederim. Bu çok değerli bir bilgi.
 

Yazdır ve Yorum Yap konusunu tartışmak istiyorum - neden kimse ilgilenmiyor

 
Vasiliy Sokolov :

Böyle büyülü bir özellik var: Bu arada, CHashMap'te bir nedenden dolayı eksik olan (bu, geliştiricilerin büyük bir hatasıdır). Belirterek, yeniden eşlemeyi atlıyoruz. Bu görevde belirtebilirsiniz, bu yüzden herhangi bir sorun görmüyorum.

CHashMap, yapıcı aracılığıyla Kapasite olarak ayarlanabilir.

Vasili Sokolov :

Bu arada, ölçek katsayılarının neden farklı olması da çok garip. CHashMap'i yeniden eşlemek, daha basit olan CArrayList'ten daha zor olacaktır.

CHashMap için, hash'lerin sözlükte eşit olarak dağılmasını sağlamak için sözlük boyutu bir asal sayı olmalıdır.
CHashMap, asal sayıları seçmek için CPrimeGenerator'ı kullanır.
Ancak ne yazık ki CPrimeGenerator uygulaması beklentileri karşılamıyor ve yalnızca aşağıdaki değerleri içeriyor:

 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
  };
Yaklaşık 1,2 ortalama büyüme faktörü
 
Vasiliy Sokolov :

Senin görevin neydi? Ona burada herkese açık bir şekilde hatırlat lütfen.

Bir diziye (liste, sözlük...) megas eklemek ve gelecekteki bilinmeyen sayıda anlaşma ile anlaşmanın sıra numarasına göre diziden megas almak için en hızlı ve en verimli çözümübulun .

 
Реter Konow :

Gelecekteki bilinmeyen sayıda işlemle bir diziye (liste, sözlük...) megas eklemek ve bir diziden megas almak için en hızlı ve en verimli çözümübulun .


Biletlerden bahsedilmediği açıktı

yine de, şablon işlevleri gibi her türlü gadget'la kodu karmaşıklaştırmaya başlamanızı tavsiye ederim.