Алгоритмы, методы решений, сравнение их производительности - страница 11

 
Artyom Trishkin:

Остальные пока только имеют смелость ржать и пальцем тыкать.

серьезно? а вот альтернативная точка зрения.

человек пришел в ветку, о теме которой не имеет ну ни малейшего понятия, причем его сразу оттуда попросили, и загадил ее, перетянув на свой любимый конек.

в итоге съехав в отдельную ветку, он придумал непонятную задачу, которая не имеет никакого отношения ни к обсуждаемым в той ветке дженерикам, ни к практике.

и задачу эту решил с ошибками найбредовейшим способом. по сути не решил. мало того на попытки указать ошибки несет бред.

мало того, это далеко не первый такой раз в его исполнении.

ууу бедненький обидели?

а может вы тоже из тех кто максимум сортировкой массива ищет и просто не понимаете что происходит?

 
Комбинатор:

серьезно? а вот альтернативная точка зрения.

человек пришел в ветку, о теме которой не имеет ну ни малейшего понятия, причем его сразу оттуда попросили, и загадил ее, перетянув на свой любимый конек.

в итоге съехав в отдельную ветку, он придумал непонятную задачу, которая не имеет никакого отношения ни к обсуждаемым в той ветке дженерикам, ни к практике.

и задачу эту решил с ошибками найбредовейшим способом. по сути не решил. мало того на попытки указать ошибки несет бред.

мало того, это далеко не первый такой раз в его исполнении.

ууу бедненький обидели?

а может вы тоже из тех кто максимум сортировкой массива ищет и просто не понимаете что происходит?


Знаете очень давно я сперва научился программировать - а потом узнал что есть учебники по программированию. Так же было и с освоением ООП и прочим. 

все же факт есть факт никто не привел примера 

желательно два с использованием листов и без (т.е. в обще без класса) . 

Конечно без всякого использование массива стринг(это для варианта без класса)

 

ну вопрос сортировки всегда актуален - есть варианты более быстрого упорядочивания чем стандартной функцией и в обще что там за код?.... насколько помню там разные способы сортировки используют в зависимости от величины массива который упорядочиваемым - и возможностью использования доп памяти для ускорения

 

Было бы интересно в цифрах видеть наиболее производительные алгоритмы, хотя бы по времени исполнения.

Пока что всё похоже на защиту своего варианта как лучшего.

Однако непонятны критерии такой самооценки.

 
Комбинатор:

серьезно? а вот альтернативная точка зрения.

человек пришел в ветку, о теме которой не имеет ну ни малейшего понятия, причем его сразу оттуда попросили, и загадил ее, перетянув на свой любимый конек.

в итоге съехав в отдельную ветку, он придумал непонятную задачу, которая не имеет никакого отношения ни к обсуждаемым в той ветке дженерикам, ни к практике.

и задачу эту решил с ошибками найбредовейшим способом. по сути не решил. мало того на попытки указать ошибки несет бред.

мало того, это далеко не первый такой раз в его исполнении.

ууу бедненький обидели?

а может вы тоже из тех кто максимум сортировкой массива ищет и просто не понимаете что происходит?

Да, согласен... Это было ожидаемо, но хотелось от Петра совсем иного (если попытаться проанализировать что я предложил ему, то будет понятна моя цель)

И с этим согласен. Но ветка была создана для иного - показать, обсудить.

Но не ржать. Причём тут обидели? Балаган развели. Сначала Пётр начал его разводить у Василия, я попросил сюда для спокойного обсуждения, и не только Петра. Задумка-то была другой - не поржать над заблуждением, а рассказать, разъяснить... Ну и, что более интересно - пытаться придумывать интересные алгоритмы. Понимаете? Нет?

:))) Конечно. Куда уж мне сирому :)))

 
Renat Akhtyamov:

Было бы интересно в цифрах видеть наиболее производительные алгоритмы, хотя бы по времени исполнения.

Пока что всё похоже на защиту своего варианта как лучшего.

Однако непонятны критерии такой самооценки.

Вооот - думаю, многим бы было это интересно.

Ну а то, что Пётр, уперевшись в своё Я, доказывает странности - тут все знают, и всем это уже надоело.

Лично мне хотелось бы, чтобы Пётр направил своё упорство в иное русло - не городить огороды, а понять что ему предлагается.

 
Artyom Trishkin:

Вооот - думаю, многим бы было это интересно.

Ну а то, что Пётр, уперевшись в своё Я, доказывает странности - тут все знают, и всем это уже надоело.

Лично мне хотелось бы, чтобы Пётр направил своё упорство в иное русло - не городить огороды, а понять что ему предлагается.

Время, затраченное на работу любого алгоритма проще спрогнозировать/просчитать по моему, если знать время выполнения функции повторив её к примеру 10000 раз

Но, я не сталкивался пока с проблемой невыполнения кода до конца, каким бы он сложным не получался

Как говорится - браво MQL !
 
Artyom Trishkin:

Вооот - думаю, многим бы было это интересно.

Ну а то, что Пётр, уперевшись в своё Я, доказывает странности - тут все знают, и всем это уже надоело.

Лично мне хотелось бы, чтобы Пётр направил своё упорство в иное русло - не городить огороды, а понять что ему предлагается.

Да никто не против помочь и объяснить и т.д. Но Пётр в стольких темах всё сводит к одному и тому же, что объяснять и помогать уже нет желания.
 
Alexey Oreshkin:
Да никто не против помочь и объяснить и т.д. Но Пётр в стольких темах всё сводит к одному и тому же, что объяснять и помогать нет желания.

 
Artyom Trishkin:

Пока что я тут вижу лишь высмеивание человека, который имел смелость выложить сюда своё решение.

Понятно, что оно ... мягко сказать - никудышное от слова совсем. Но он выложил. Остальные пока только имеют смелость ржать и пальцем тыкать.


#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;
}
Причина обращения: