Рассмотрение группы пользователей Твиттера "узлы" и отношение u follows v
как "края", у нас есть график, из которого я хотел бы выбрать подмножество пользователей наугад. Я мог быть неправым, но от чтения документов API я думаю, что невозможно получить набор пользователей кроме путем получения подписчиков или друзей уже известного пользователя.
Так, начиная от меня и исследуя график Твиттера оттуда, из чего хороший путь состоит в том, чтобы выбрать случайную выборку (говорят 100), пользователи?
Я бы держался подальше от P/Invoke, поскольку это довольно медленно по сравнению с IJW (It Just Works). Последний позволяет плавно переплетать управляемые и неуправляемые c++. Все, что вам нужно сделать, это создать управляемую сборку c++, записать управляемый класс, который виден из c #, и вызвать неуправляемый код из этого.
Uhm... Ок. Я был под впечатлением, что P/Invoke звонки были медленнее, что они по своей природе. Однако, имея явный контроль над сортировкой, вы можете сделать свою версию C + +/CLI, чтобы работать лучше во многих случаях.
Вот статья Microsoft об обоих механизмах:
http://msdn.microsoft.com/en-us/library/ms235282.aspx
Преимущества IJW
- Нет необходимости писать объявления атрибутов DLLImport для неуправляемые API, используемые программой. Просто включить файл заголовка и ссылку с библиотека импорта.
- Механизм IJW немного быстрее (например, заглушки IJW не необходимо проверить необходимость закрепления или копировать предметы данных, поскольку это сделано явно разработчиком).
- Это наглядно иллюстрирует проблемы производительности. В данном случае то, что выполняется перевод из Юникода последовательность в последовательность ANSI и иметь распределение памяти оператора и освобождение. В этом случае a разработчик пишет код с помощью IJW осознает, что призвание _putws и использование PtrToStringChars было бы лучше для выполнения.
- При вызове нескольких неуправляемых API, использующих одни и те же данные, выполняется их сортировка один раз и прохождение упакованной копии гораздо эффективнее, чем повторная упаковка каждый раз.
Есть и эстетические преимущества:
Нет необходимости определять атрибут DLLImport
, нет необходимости определять какие-либо структуры данных (также с определенными атрибутами p/invoke), которые могли бы выглядеть следующим образом:
[StructLayout (LayoutKind.Sequential, CharSet = CharSet.Ansi)] публичная структура DevMode { [MarshalAs (UnmanagedType.ByValTStr, StartConst = 32)] общедоступная последовательность dmDeviceName; }
Marshal.PtrToString (ptr)
. IMHO при вызове нечетной функции в Windows SDK используйте P/Invoke. Если вы представляете умеренно сложный C++ API управляемому миру, определенно C + +/CLI.
-121--922064-Это также происходит при устаревшей или неполной установке PHPUnit. Помните, что после настройки PEAR необходимо добавить канал PHPUnit.de , чтобы получить актуальный пакет.
-121--830663- Я бы использовал числовой идентификатор пользователя
. Создайте кучу случайных чисел и получите пользователей на их основе. Если вы попали в несуществующий идентификатор, просто пропустите его.
Twitter API wiki, для пользователей/show:
id. Идентификатор или имя экрана пользователя.
Если шесть степеней разделения верны, вы можете выполнить поиск в ширину до 6 уровней и выбрать 100 случайных пользователей из этого списка. Или вы можете сказать: я перестану искать больше пользователей, когда получу, скажем, миллион уникальных пользователей и 100 из них.
Поскольку сохранение списка миллионов пользователей и попытка выборки могут быть недопустимыми, существует метод, называемый Выборка резервуара , который вы можете использовать, который позволяет вам выполнять выборку во время самого обхода.
Просто запросите общедоступную временную шкалу и используйте возвращенный набор пользователей:
http://apiwiki.twitter.com/Twitter-REST-API -Метод% 3A-statuses-public_timeline
Это не будет случайным, поскольку это всего лишь последние 20 твитов, отправленных кем-либо, но, скорее всего, это никогда не будет одним и тем же набором пользователей дважды.
Поскольку он дает вам только 20 за раз, а результаты кешируются на их серверах в течение 60 секунд, вам придется выполнить 5 разных запросов с 60-секундной паузой между ними.
Конечно, также возможно, что некоторые пользователи будут часто твитить в течение определенного периода времени, поэтому вы можете получить менее 100 пользователей за это время, поэтому вы можете просто зацикливаться, пока не получите 100, если вам нужно к.
Если у вас нет всей диаграммы пользователей Twitter (или ее случайной выборки), вы не сможете взять случайную выборку. В противном случае любой образец, который вы берете, будет предвзятым из-за его отношения к вам.