Сообщение Re[85]: The door от 27.07.2018 7:29
Изменено 27.07.2018 7:41 Serginio1
Re[85]: The door
Здравствуйте, vdimas, Вы писали:
V>Это если бы курсы были на каждый день, но курс на данную дату нужно вычислять по max(change_date) where change_date<=doc_date.
V>В этом месте начинаются тормоза.
Поиск на == и <= используют один и тот же алгоритм половинного деления по индексу.
Сложность одинакова. Только при курсе на каждый день нужно заполнять все дни (выходные, праздники когда торги не проходят), что увеличивает размер таблицы и индекса
Посмотри метод Navigate http://rsdn.org/article/alg/tlsd.xml
V>Это если бы курсы были на каждый день, но курс на данную дату нужно вычислять по max(change_date) where change_date<=doc_date.
V>В этом месте начинаются тормоза.
Поиск на == и <= используют один и тот же алгоритм половинного деления по индексу.
Сложность одинакова. Только при курсе на каждый день нужно заполнять все дни (выходные, праздники когда торги не проходят), что увеличивает размер таблицы и индекса
Посмотри метод Navigate http://rsdn.org/article/alg/tlsd.xml
Автор(ы): Сергей Смирнов (Serginio1)
Дата: 14.08.2004
Пример реализации двухуровневого массива с помощью нового средства С# — generics. Сравнение производительности различных реализаций сортированных списков.
Дата: 14.08.2004
Пример реализации двухуровневого массива с помощью нового средства С# — generics. Сравнение производительности различных реализаций сортированных списков.
Кроме точного позиционирования, можно производить позиционирование на элемент, ключ которого больше, меньше, больше или равен и меньше или равен некоторому значению. Этим занимается функция Navigate. В качестве параметров она получает значение ключа и тип поиска. Тип поиска задается следующим перечислением:
public
enum NavigateFlag : byte
{
Eqality, // ==
LessThan, // <
GreaterThan, // >
LessThanOrEqval, // <=
GreaterThanOrEqval // >=
}
А вот реализация этой функции:
public
bool Navigate(K Key, NavigateFlag flag)
{
bool result = this.NavigateKey(Key);
// Запоминается последняя позиция поиска
// _currentElementIndex = lo;
switch(flag)
{
case NavigateFlag.Eqality :
return result;
case NavigateFlag.GreaterThanOrEqval:
if (result)
return true;
goto case NavigateFlag.GreaterThan;
case NavigateFlag.GreaterThan:
if (result)
_currentElementIndex++;
if (CurrentLeafPage.Count == _currentElementIndex)
{
if (CurrentLeafPage.NextPage == null)
{
_selected = false;
return false;
}
else
{
CurrentLeafPage = CurrentLeafPage.NextPage;
_currentElementIndex = 0;
}
}
_selected = true;
return true;
case NavigateFlag.LessThanOrEqval :
if (result)
returntrue;
goto case NavigateFlag.LessThan;
case NavigateFlag.LessThan:
return this.GetPriorRecord();
}
return result;
}
Re[85]: The door
Здравствуйте, vdimas, Вы писали:
V>Это если бы курсы были на каждый день, но курс на данную дату нужно вычислять по max(change_date) where change_date<=doc_date.
V>В этом месте начинаются тормоза.
Поиск на == и <= используют один и тот же алгоритм половинного деления по индексу.
Сложность одинакова. Только при курсе на каждый день нужно заполнять все дни (выходные, праздники когда торги не проходят), что увеличивает размер таблицы и индекса
Посмотри метод Navigate http://rsdn.org/article/alg/tlsd.xml
V>Это если бы курсы были на каждый день, но курс на данную дату нужно вычислять по max(change_date) where change_date<=doc_date.
V>В этом месте начинаются тормоза.
Поиск на == и <= используют один и тот же алгоритм половинного деления по индексу.
Сложность одинакова. Только при курсе на каждый день нужно заполнять все дни (выходные, праздники когда торги не проходят), что увеличивает размер таблицы и индекса
Посмотри метод Navigate http://rsdn.org/article/alg/tlsd.xml
Автор(ы): Сергей Смирнов (Serginio1)
Дата: 14.08.2004
Пример реализации двухуровневого массива с помощью нового средства С# — generics. Сравнение производительности различных реализаций сортированных списков.
Дата: 14.08.2004
Пример реализации двухуровневого массива с помощью нового средства С# — generics. Сравнение производительности различных реализаций сортированных списков.
Кроме точного позиционирования, можно производить позиционирование на элемент, ключ которого больше, меньше, больше или равен и меньше или равен некоторому значению. Этим занимается функция Navigate. В качестве параметров она получает значение ключа и тип поиска. Тип поиска задается следующим перечислением:
public
enum NavigateFlag : byte
{
Eqality, // ==
LessThan, // <
GreaterThan, // >
LessThanOrEqval, // <=
GreaterThanOrEqval // >=
}
А вот реализация этой функции:
public
bool Navigate(K Key, NavigateFlag flag)
{
bool result = this.NavigateKey(Key);
// Внутри NavigateKey(Key)
//если не нашли по ключу
// _selected = false;
// Помещаем в _currentElementIndex позицию в которую можно добавить элемент с искомым ключом.
// _currentElementIndex = lo;
switch(flag)
{
case NavigateFlag.Eqality :
return result;
case NavigateFlag.GreaterThanOrEqval:
if (result)
return true;
goto case NavigateFlag.GreaterThan;
case NavigateFlag.GreaterThan:
if (result)
_currentElementIndex++;
if (CurrentLeafPage.Count == _currentElementIndex)
{
if (CurrentLeafPage.NextPage == null)
{
_selected = false;
return false;
}
else
{
CurrentLeafPage = CurrentLeafPage.NextPage;
_currentElementIndex = 0;
}
}
_selected = true;
return true;
case NavigateFlag.LessThanOrEqval :
if (result)
returntrue;
goto case NavigateFlag.LessThan;
case NavigateFlag.LessThan:
return this.GetPriorRecord();
}
return result;
}