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

 
Artyom Trishkin :

Gerisi şimdiye kadar sadece gülüp parmaklarını dürtecek cesarete sahip.

Gerçekten? işte alternatif bir bakış açısı.

Konusu hakkında en ufak bir fikri olmayan bir şubeye bir kişi geldi ve hemen oradan istendi ve onu en sevdiği ata sürükleyerek kirletti.

Sonuç olarak, ayrı bir şubeye geçerek, o başlıkta tartışılan jeneriklerle veya pratikle ilgisi olmayan anlaşılmaz bir görev buldu.

ve bu sorun en yaygın şekilde hatalarla çözüldü. gerçekten karar vermedi. Ayrıca, hataları belirtme girişimleri saçmadır.

Üstelik bu performansında ilk kez olmuyor.

uuu zavallı şey gücendi mi?

Ya da belki de dizinin maksimum sıralamasını arayanlardan birisiniz ve sadece ne olduğunu anlamıyorsunuz?

 
Комбинатор :

Gerçekten? işte alternatif bir bakış açısı.

Konusu hakkında en ufak bir fikri olmayan bir şubeye bir kişi geldi ve hemen oradan istendi ve onu en sevdiği ata sürükleyerek kirletti.

Sonuç olarak, ayrı bir şubeye geçerek, o başlıkta tartışılan jeneriklerle veya pratikle ilgisi olmayan anlaşılmaz bir görev buldu.

ve bu sorun en yaygın şekilde hatalarla çözüldü. gerçekten karar vermedi. Ayrıca, hataları belirtme girişimleri saçmadır.

Üstelik bu performansında ilk kez olmuyor.

uu zavallı şey rahatsız mı?

Ya da belki de dizinin maksimum sıralamasını arayanlardan birisiniz ve sadece ne olduğunu anlamıyorsunuz?


Bilirsiniz, çok uzun zaman önce, önce programlamayı öğrendim - ve sonra programlama dersleri olduğunu öğrendim. OOP ve diğer şeylerin gelişimi ile aynıydı.

yine de bir gerçek kimse örnek vermedi

tercihen iki tabakalı ve tabakasız (yani genellikle bir sınıfsız).

Tabii ki, herhangi bir dize dizisi kullanmadan (bu, sınıfsız seçenek içindir)

 

Sıralama sorunu her zaman önemlidir - standart işlevden daha hızlı sipariş verme seçenekleri vardır ve genel olarak ne tür bir kod vardır?

 

En azından yürütme süresi açısından, sayılarda en üretken algoritmaları görmek ilginç olurdu.

Şimdiye kadar, her şey sürümünüzü en iyi olarak savunuyor gibi görünüyor.

Ancak, bu tür bir öz değerlendirme için kriterler belirsizdir.

 
Комбинатор :

Gerçekten? işte alternatif bir bakış açısı.

Konusu hakkında en ufak bir fikri olmayan bir şubeye bir kişi geldi ve hemen oradan istendi ve onu en sevdiği ata sürükleyerek kirletti.

Sonuç olarak, ayrı bir şubeye geçerek, o başlıkta tartışılan jeneriklerle veya pratikle ilgisi olmayan anlaşılmaz bir görev buldu.

ve bu sorun en yaygın şekilde hatalarla çözüldü. gerçekten karar vermedi. Ayrıca, hataları belirtme girişimleri saçmadır.

Üstelik, bu onun performansında ilk kez olmaktan çok uzak .

uu zavallı şey rahatsız mı?

Ya da belki de dizinin maksimum sıralamasını arayanlardan birisiniz ve sadece ne olduğunu anlamıyorsunuz?

Evet, katılıyorum ... Bekleniyordu ama Peter'dan tamamen farklı bir şey istedim (ona ne teklif ettiğimi analiz etmeye çalışırsam, hedefim netleşir)

Ve buna katılıyorum. Ama şube başka bir şey için yaratıldı - göstermek, tartışmak.

Ama sızlanma . Ve burada rahatsız? Balagan yetiştirildi. İlk olarak, Peter onu Vasily'de yetiştirmeye başladı, burada sadece Peter'ı değil, sakin bir tartışma istedim. Fikir farklıydı - sanrılara gülmek değil, anlatmak, açıklamak ... Daha da ilginç olanı - ilginç algoritmalar bulmaya çalışmak. Anlıyor musun? Değil?

:))) Kesinlikle. nerede yetim kalabilirim :)))

 
Renat Akhtyamov :

En azından yürütme süresi açısından, sayılarda en üretken algoritmaları görmek ilginç olurdu.

Şimdiye kadar, her şey sürümünüzü en iyi olarak savunuyor gibi görünüyor.

Ancak, bu tür bir öz değerlendirme için kriterler belirsizdir.

Vay canına, birçok insanın ilgileneceğini düşünüyorum.

Pekala, Peter'ın kendi Benliğine dayanması tuhaflıkları kanıtlıyor - buradaki herkes biliyor ve herkes bundan bıkmış durumda.

Şahsen, Peter'ın azmini farklı bir yöne yönlendirmesini istiyorum - bahçeleri çitle çevirmek için değil, ona ne teklif edildiğini anlamak için.

 
Artyom Trishkin :

Vay canına, birçok insanın ilgileneceğini düşünüyorum.

Pekala, Peter'ın kendi Benliğine dayanması tuhaflıkları kanıtlıyor - buradaki herkes biliyor ve herkes bundan bıkmış durumda.

Şahsen, Peter'ın azmini farklı bir yöne yönlendirmesini istiyorum - bahçeleri çitle çevirmek için değil, ona ne teklif edildiğini anlamak için.

Herhangi bir algoritmanın çalışması için harcanan süreyi tahmin etmek/hesaplamak bence daha kolay, eğer fonksiyonun yürütme süresini, örneğin 10000 kez tekrarlayarak biliyorsanız, bence

Ancak, ne kadar karmaşık olursa olsun, kodu sonuna kadar yürütmeme sorunuyla henüz karşılaşmadım.

Dedikleri gibi - bravo MQL!
 
Artyom Trishkin :

Vay canına, birçok insanın ilgileneceğini düşünüyorum.

Pekala, Peter'ın kendi Benliğine dayanması tuhaflıkları kanıtlıyor - buradaki herkes biliyor ve herkes bundan bıkmış durumda.

Şahsen, Peter'ın azmini farklı bir yöne yönlendirmesini istiyorum - bahçeleri çitle çevirmek için değil, ona ne teklif edildiğini anlamak için.

Evet, kimse yardım etmeye, açıklamaya vs. karşı değil. Ama Peter o kadar çok konuda her şeyi aynı şeye indirger ki, artık açıklama ve yardım etme arzusu yoktur.
 
Alexey Oreshkin :
Evet, kimse yardım etmeye, açıklamaya vs. karşı değil. Ama Peter o kadar çok konuda her şeyi aynı şeye indirger ki, açıklama ve yardım etme arzusu yoktur.

 
Artyom Trishkin :

Şimdiye kadar burada, kararını burada yayınlamaya cesaret eden bir kişinin alay konusu olduğunu görüyorum.

Hafifçe söylemek gerekirse - kelimeden hiç işe yaramaz. Ama mesaj attı. Gerisi şimdiye kadar sadece gülüp parmaklarını dürtecek cesarete sahip.


 #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 ;
}
Neden: