[*]Оптимизация кода

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Jes, 10 Apr 2008.

  1. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Как я понял, Jes предложил что-то типа некоторого развлечения по поводу оптимизации кода.

    Предлагаю простую задачку:
    Code:
    var
      p, i, n: integer;
    ...
    p := 1;
    n := 1000000000;
    for i := 1 to n do
      p := (p * 11856) mod 1743;
    write(p);
    
    Цель - сделать это же за O(log(n))
     
    2 people like this.
  2. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    Как понять за O?
     
  3. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    за O(f(n)) - Это значит совершить порядка f(n) операций.
    То есть, тот код, что я привёл работает за O(n).

    К примеру, матрица n*n полностью заполняется за O(n^2)

    PS Даже если количество операций типа n*n*n*0.0001 + 0.0007*n*n + 1000*n - 50000*lg(n), то это всё равно O(n^3)
     
  4. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2desTiny бля, код оптимизировать - это надо тупо знать какие операторы/инструкции чем лучше заменять, вообще говоря оптимизировать код можно програмно. на это способен и gcc и vc и intel'овский компилятор. на программиста должна ложиться по большей части задача оптимизации алгоритма и на самом деле все.. тк все остальное даст лишь сомнительный прирост производительности. личный опыт.

    зы пример что ты дал слава богу хоть как-то на это похож. для новичков - http://algolist.manual.ru/maths/count_fast/fast_exp.php :

    Code:
    long powmod(long a, long k, long n)
    {
      long b=1;
    
      while (k) {
        if (k%2==0) {
          k /= 2;
          a = (a*a)%n;
          }
        else {
          k--;
          b = (b*a)%n; 
          }
      }
      return b;
    }
    
    int main()
    {
     return powmod(11856, n, 1743);
    }
    
     
    1 person likes this.
  5. KSoniX

    KSoniX Elder - Старейшина

    Joined:
    17 Jan 2008
    Messages:
    94
    Likes Received:
    12
    Reputations:
    1
    я все нашел функцию WideCharToMultiByte() если у каго есть еше варианты давайте :)
     
    #25 KSoniX, 12 Apr 2008
    Last edited: 17 Apr 2008
  6. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Стандартный метод GetBuffer(0) отлично пашет. Нечего придумывать ;)
     
  7. KSoniX

    KSoniX Elder - Старейшина

    Joined:
    17 Jan 2008
    Messages:
    94
    Likes Received:
    12
    Reputations:
    1
    nerezus GetBuffer(0) возвращает TCHAR а мне нужна ЧАР
    а если я в функции вместо CString поставлю TCHAR
    вот с этим как?
     
    #27 KSoniX, 12 Apr 2008
    Last edited: 12 Apr 2008
  8. KSoniX

    KSoniX Elder - Старейшина

    Joined:
    17 Jan 2008
    Messages:
    94
    Likes Received:
    12
    Reputations:
    1
    вот кусок года здес у меня ест 2 edit box в одном логин в другом пасс. я логин и пасс шифрую и записываю в файл но мой шифровальный алгоритм работает с char`ми и я с TCHAR в char конвертирую с помощью функции указанный чуть выше и я шифрую функций fmt_base64() ниже функция шифрования у меня все работает нормальна
    функция шифрование

     
    #28 KSoniX, 14 Apr 2008
    Last edited: 17 Apr 2008
    1 person likes this.
  9. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    В настройках проекта укажи кодировку "not using", не поможет?)
     
    1 person likes this.