JQuery/WCF без Ajax ASP.NET:

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

В вашем примере for(i=1;i<=n;i++) - это цикл, выполняющий свое тело n раз.

for(j=1;j<=m;j++) будет запускать свое тело m раз, а for(k=1;k<=p;k++) - его тело p раз.

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

  1. Первый цикл будет запускать второй цикл n раз
  2. Второй цикл будет запускать третий цикл m раз, таким образом, третий цикл будет выполняться n*m раз
  3. Третий цикл будет запускать оператор печати p раз, таким образом, оператор печати выполняется n*m*p раз.

Таким образом, временная сложность этого кода составляет ϴ(n*m*p).

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

Теперь я хотел бы отметить, что здесь мы на самом деле считаем сравнения, сделанные циклами for, а не то, как часто выполняется оператор print. Тем не менее, подсчет с оператором print и телами циклов в качестве основы облегчает задачу, а временная сложность остается той же.

10
задан Program.X 23 April 2012 в 09:22
поделиться

2 ответа

На первый взгляд существует три проблемы с Вашим кодом:

1: необходимо использовать ServiceKnownTypeAttribute для определения известных типов при представлении только базовых типов в контрактах на операцию:

[ServiceContract(Namespace = "yyyWCF")]     
public interface IClientBroker
{
    [OperationContract]
    [ServiceKnownType(typeof(Client))]
    [WebInvoke(
        Method="GET",
        BodyStyle=WebMessageBodyStyle.WrappedRequest,
        ResponseFormat=WebMessageFormat.Json)]
    IClient GetClientJson(int clientId);

}

2: Необходимо использовать WebMessageBodyStyle.WrappedRequest вместо WebMessageBodyStyle.Wrapped потому что последний не совместим с WebScriptServiceHostFactory.

3: По моему скромному мнению, использование Метода = "ДОБИРАЕТСЯ", было бы БОЛЕЕ УСПОКОИТЕЛЬНЫМ для метода под названием GetClientJson, чем Метод = "POST"

Другой совет, который я мог дать Вам, когда работа с сервисами WCF должна использовать SvcTraceViewer.exe, связанный Visual Studio. Это - большой инструмент для отладки целей. Все, в чем Вы нуждаетесь, должно добавить следующий раздел к Вашему app/web.config:

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="sdt"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "WcfDetailTrace.e2e" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

Затем вызовите веб-метод, и файл WcfDetailTrace.e2e будет сгенерирован в Вашем корневом каталоге веб-сайта. Затем откройте этот файл с SvcTraceViewer.exe, и Вы будете видеть большую полезную информацию. Например, это могло сказать:

Не может сериализировать параметр типа 'MyNamespace. Клиент' (для операции 'GetClientJson', сократите 'IClientBroker'), потому что это не точный тип 'MyNamespace. IClient' в сигнатуре метода и не находится в известном наборе типов. Для сериализации параметра добавьте тип к известному набору типов для операционного использования ServiceKnownTypeAttribute.

Конечно, Вы не должны забывать комментировать этот раздел перед входом в производство, или Вы могли бы закончить с некоторыми довольно большими файлами.

10
ответ дан 4 December 2019 в 00:27
поделиться

Я на 99% уверен, что Вы наклоняетесь, возвращают интерфейс. Я не думаю, что Интерфейсы являются сериализуемыми.

проверьте этот поток

2
ответ дан 4 December 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: