O (1): Простой код без циклов. Просто потоки через. Поиски в таблице поиска являются O (1), также.
O (журнал (n)): эффективно оптимизированные алгоритмы. Пример: алгоритмы двоичного дерева и двоичный поиск. Обычно не причиняет боль. Вы удачливы, если у Вас есть такой алгоритм под рукой.
O (n): единственный цикл по данным. Вред для очень большого n.
O (n*log (n)): алгоритм, который делает своего рода деление и завоевывать стратегию. Вред для большого n. Типичный пример: сортировка слиянием
O (n*n): какой-то вложенный цикл. Вред даже с маленьким n. Распространенный с наивными матричными вычислениями. Вы хотите избежать этого вида алгоритма, если Вы можете.
O (n^x для x> 2): злая конструкция с несколькими вложенными циклами. Вред для очень маленького n.
O (x^n, n! и хуже): причудливый (и часто рекурсивный) алгоритмы, которые Вы не хотите иметь в производственном коде кроме очень управляемых случаев для очень маленького n и если действительно нет никакой лучшей альтернативы. Время вычисления может взорваться с n=n+1.
Спущение Вашего алгоритма от более высокого класса сложности может заставить Ваш алгоритм полететь. Думайте о Fourier преобразовании, которое имеет O (n*n) алгоритм, который был неприменим с аппаратными средствами 1960-х кроме редких случаев. Тогда Cooley и Tukey уже сделали некоторые умные сокращения сложности путем многократного использования вычисленных значений. Ведомый к широко распространенному введению FFT в обработку сигналов. И в конце это также, почему Steve Jobs нажил состояние с iPod.
Простой пример: Наивные программисты C пишут этот вид цикла:
for (int cnt=0; cnt < strlen(s) ; cnt++) {
/* some code */
}
Это - O (n*n) алгоритм из-за реализации strlen (). Вложенные циклы приводят к умножению сложностей в большом-O. O (n) в O (n) дает O (n*n). O (n^3) в O (n) дает O (n^4). В примере, предварительно вычисляя длину строки сразу превратит цикл в O (n). Joel также записал об этом.
все же класс сложности не все. Необходимо следить за размером n. При переделке O (n*log (n)) алгоритм к O (n) не поможет, если количество (теперь линейный) инструкции вырастет в широком масштабе из-за переделки. И если n будет маленьким так или иначе, оптимизация не даст много удара, также.
It все о разъединении и косвенном обращении .
А с TDataSource их два вида:
Вы можете рассматривать это как своего рода паттерн модель-представление-контроллер.
Данные находятся в DataSet (модели), который ничего не знает о том, кто их использует и для чего.
Компоненты, поддерживающие БД, предоставляют различные интерфейсы (представления) для взаимодействия пользователя с этими данными, не зная, кто их хранит.
DataSource - это посредник (контроллер), который обеспечивает связь и отправляет любое изменение данных или команду либо модели, либо представлениям.
Это позволяет легко привязать к другому набору данных, не касаясь представлений, а также изменять или добавлять новые представления без необходимости заботиться о них наборе данных.
Я думаю, что элементы управления, учитывающие данные, могут быть прикреплены к разным наборам данных, просто изменив набор данных, на который указывает связанный с ними источник данных, вместо того, чтобы изменять каждый набор данных элемента управления.
Итак, вы могли изменить используемую базу данных, просто изменив один источник данных вместо множества TDBEdits, TDBGrids и т. д.
Если вы объедините эти во-вторых, компонент вашей базы данных становится зависимым от конкретной инфраструктуры пользовательского интерфейса, которую вы используете. Подобные зависимости могут быть приемлемы в вашей собственной программе, но не подходят для API, который распространяется среди множества разработчиков.
Я не знаю, точно ли это то, о чем думала команда разработчиков, но один из способов, которым это может быть полезно, - это изменение наборов данных. Допустим, у вас есть целый набор элементов управления с учетом данных, и все они привязаны к одному набору данных, а затем вы хотите переключиться на другой. Если все они связаны через посредника, все, что вам нужно сделать, это изменить свойство источника данных .Dataset вместо того, чтобы перебирать все элементы управления и изменять их свойства.
(Хотя вам все равно, возможно, придется изменить несколько имен полей , в зависимости от того, как все устроено, поэтому это может быть не лучший пример.)