ООП C++ для процедурной памяти и аномалии времени в Leetcode [закрыто] ⇐ C++
-
Anonymous
ООП C++ для процедурной памяти и аномалии времени в Leetcode [закрыто]
Я пытался задать этот вопрос по лит-коду, когда столкнулся с ошибкой «Превышен лимит памяти». Я нашел в списке решений более оптимальное решение и попытался понять, что у них получается лучше. Я уменьшил разницу во времени выполнения наших кодов, имеющих функции-члены, и процедурные функции. Разница огромна; процедурная реализация, кажется, работает намного быстрее и потребляет гораздо меньше памяти. Я не уверен, почему это произошло, поскольку функции-члены не особо потребляют память на экземпляр класса. Более того, остальная часть кода точно такая же. Я разместил фрагменты ниже:
Моя OO-версия с (намного) более высоким временем выполнения и потреблением памяти:
int maxxor = 0; класс Трие{ публика: Три* ptrs[2]; Трие(){ птрс[0] = НОЛЬ; ptrs[1] = NULL; } недействительная вставка (интервал n) { Попробуйте * t = это; набор бит б(п); внутренний индекс; for(int j=31;j>-1;j--){ индекс = (b[j] != 0)?1:0; если (т->ptrs[индекс]==NULL){ t->ptrs[index] = новый Trie; } т = т->ptrs[индекс]; } возвращаться; } int findpartner(int n){ Trie* t = это; набор бит b(n),ans(0); индекс int, пиндекс; for(int j=31;j>-1;j--){ индекс = (b[j] != 0)?1:0; пиндекс = 1-индекс; //индекс партнера: 1- мой индекс if(t->ptrs[pindex]!=NULL){ ан[j] = 1; } еще{ pindex = 1-pindex;//проверяем другой индекс, но xor в этом бите равен нулю. } т = т->ptrs[пиндекс]; // if((((long long)1)ptrs[индекс]==NULL){ t->ptrs[index] = новый Trie; } т = т->ptrs[индекс]; } возвращаться; } int findpartner(int n, Trie* t){ набор бит b(n),ans(0); индекс int, пиндекс; for(int j=31;j>-1;j--){ индекс = (b[j] != 0)?1:0; пиндекс = 1-индекс; //индекс партнера: 1- мой индекс if(t->ptrs[pindex]!=NULL){ ан[j] = 1; } еще{ pindex = 1-pindex;//проверяем другой индекс, но xor в этом бите равен нулю. } т = т->ptrs[пиндекс]; // if((((long long)1)
Я пытался задать этот вопрос по лит-коду, когда столкнулся с ошибкой «Превышен лимит памяти». Я нашел в списке решений более оптимальное решение и попытался понять, что у них получается лучше. Я уменьшил разницу во времени выполнения наших кодов, имеющих функции-члены, и процедурные функции. Разница огромна; процедурная реализация, кажется, работает намного быстрее и потребляет гораздо меньше памяти. Я не уверен, почему это произошло, поскольку функции-члены не особо потребляют память на экземпляр класса. Более того, остальная часть кода точно такая же. Я разместил фрагменты ниже:
Моя OO-версия с (намного) более высоким временем выполнения и потреблением памяти:
int maxxor = 0; класс Трие{ публика: Три* ptrs[2]; Трие(){ птрс[0] = НОЛЬ; ptrs[1] = NULL; } недействительная вставка (интервал n) { Попробуйте * t = это; набор бит б(п); внутренний индекс; for(int j=31;j>-1;j--){ индекс = (b[j] != 0)?1:0; если (т->ptrs[индекс]==NULL){ t->ptrs[index] = новый Trie; } т = т->ptrs[индекс]; } возвращаться; } int findpartner(int n){ Trie* t = это; набор бит b(n),ans(0); индекс int, пиндекс; for(int j=31;j>-1;j--){ индекс = (b[j] != 0)?1:0; пиндекс = 1-индекс; //индекс партнера: 1- мой индекс if(t->ptrs[pindex]!=NULL){ ан[j] = 1; } еще{ pindex = 1-pindex;//проверяем другой индекс, но xor в этом бите равен нулю. } т = т->ptrs[пиндекс]; // if((((long long)1)ptrs[индекс]==NULL){ t->ptrs[index] = новый Trie; } т = т->ptrs[индекс]; } возвращаться; } int findpartner(int n, Trie* t){ набор бит b(n),ans(0); индекс int, пиндекс; for(int j=31;j>-1;j--){ индекс = (b[j] != 0)?1:0; пиндекс = 1-индекс; //индекс партнера: 1- мой индекс if(t->ptrs[pindex]!=NULL){ ан[j] = 1; } еще{ pindex = 1-pindex;//проверяем другой индекс, но xor в этом бите равен нулю. } т = т->ptrs[пиндекс]; // if((((long long)1)
Мобильная версия