Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2012.02.12;
Скачать: [xml.tar.bz2];

Вниз

Расчет индекса Хирша   Найти похожие ветки 

 
George ©   (2011-10-21 13:00) [0]

У меня, к стыду своему признаться, не очень хорошая дружба с алгоритмикой. И на сабжевой задачке я крепко призадумался и пока не могу понять, как реализовать.

"Индекс вычисляется на основе распределения цитирований работ данного исследователя. Хирш пишет: «Учёный имеет индекс h, если h из его Np статей цитируются как минимум h раз каждая, в то время как оставшиеся (Np — h) статей цитируются не более, чем h раз каждая». Иными словами, учёный с индексом h опубликовал h статей, на каждую из которых сослались как минимум h раз. Так, если у данного исследователя опубликовано 100 статей, на каждую из которых имеется лишь одна ссылка, его h-индекс равен 1. Таким же будет h-индекс исследователя, опубликовавшего одну статью, на которую сослались 100 раз. В то же время (более реалистический случай), если у исследователя имеется 1 статья с 9 цитированиями, 2 статьи с 8 цитированиями, 3 статьи с 7 цитированиями, …, 9 статей с 1 цитированием каждой из них, то его h-индекс равен 5."
Из википедии.

Может кто предложить решение? Язык не дельфи, мне интересен просто алгоритм. Ну и задачка, может быть, интересной для кого-нибудь будет.


 
И. Павел ©   (2011-10-21 13:03) [1]

Проход по числу статей  бинарным поиском? Например, всего статей A. Выбираете B = A div 2. Если у ученого нет B публикаций с цитированием B раз каждой, то B = B/2, иначе B = 3 * B/4.
Ну или простым перебором от 1 до A.


 
И. Павел ©   (2011-10-21 13:06) [2]

> [1] И. Павел ©   (21.10.11 13:03)

Перед эти лучше упорядочить публикации ученого по числу ссылок, чтобы было проще определить, сколько у ученого публикаций с числом ссылок не меньше N.


 
TUser ©   (2011-10-21 14:00) [3]

Что считать-то? Что на вход, что надо получить на выходе?


 
George ©   (2011-10-21 14:07) [4]

На входе массив ключ-значение (айдишник публикации - число ее цитирований), на выходе индекс Хирша.


 
OW ©   (2011-10-21 14:24) [5]


> если у исследователя имеется 1 статья с 9 цитированиями,
>  2 статьи с 8 цитированиями, 3 статьи с 7 цитированиями,
>  …, 9 статей с 1 цитированием каждой из них, то его h-индекс
> равен 5.

так понимаю, это все разные статьи должны быть?
т.е. среди 2х статей по 8 раз  нет той, что 9раз цитировалась?
(ну, раз она цитировалась 9 раз, то и меньшее кол-во раз она тоже цитировалась)


 
George ©   (2011-10-21 14:46) [6]

Ну вроде как так.


 
TUser ©   (2011-10-21 17:08) [7]


> айдишник публикации - число ее цитирований

по этим данным индекс Хирша вычислить невозможно, надо иметь базу публикаций и цитирований


 
MBo ©   (2011-10-21 17:13) [8]

Сортировка по цитированию по убыванию.
Искомый индекс - последнее (наибольшее) i, при котором A[i] >=i
Графически - точка пересечения прямой y=x и кривой распределения ссылок, обычно похожей на ветвь гиперболы


 
Компромисс   (2011-10-21 17:20) [9]


> Искомый индекс - последнее (наибольшее) i, при котором A[i]
> >=i


Неверно для 1,1,1,1,5


 
Компромисс   (2011-10-21 17:25) [10]

Компромисс   (21.10.11 17:20) [9]

А нет, торможу.


 
George ©   (2011-10-21 18:10) [11]


> TUser ©   (21.10.11 17:08) [7]

Вот она у меня есть.


 
George ©   (2011-10-21 20:42) [12]


> Графически - точка пересечения прямой y=x и кривой распределения
> ссылок, обычно похожей на ветвь гиперболы

Берем прямую y = x. Берем две точки с кривой распределения ссылок таких, где y - x = a при наименьшем a, и x - a = b, при наименьшем b. Т.е. две точки, самые близкие к искомой прямой. Через эти две взятые точки проводим прямую и находим точку пересечения с прямой y = x. Затем округляем ее координаты в меньшую сторону и получаем индекс Хирша. Оно? :)


 
George ©   (2011-10-21 21:45) [13]

Реализация на PHP получилась такой (под друпал):


// Запрос с выборкой "количеств" цитирований по определенному автору
$result = db_query("
 SELECT COUNT(fdfr.field_refer_nid) quotes
 FROM {field_data_field_refer} fdfr
 INNER JOIN {field_data_field_author} fdfa ON fdfr.field_refer_nid = fdfa.entity_id
 WHERE fdfa.field_author_nid = :author_id
 GROUP BY fdfr.field_refer_nid
 ORDER BY quotes DESC", array(":author_id" => $row->nid))->fetchCol();

// Ну и перебор массива
$h = 0;
foreach ($result as $key=>$record) {
 if (($key + 1) > $record) {
   $h = $key;
   break;
 }
}

if ($h == 0) $h = $key+1;
return $h;


 
TUser ©   (2011-10-22 10:37) [14]

Вообщем, мало понятно, что у автора имеется (список публикаий с указаниями цитирований, или оттудова надо эти цитирования доставать, парся текст, или они уже в базе, куда надо писать SQL, или ... ), и что надо получить (Хирш для конкретного автора, или для всех авторов в базе, или ... ).

Особенную прелесть такой задаче на практике придает обилие авторов с малораспространенной в России фамилией Lee/Yang/Wang/etc. Как всех этих Ли отличать друг от друга - на то отдельная наука есть.


 
Inovet ©   (2011-10-22 11:38) [15]

> [14] TUser ©   (22.10.11 10:37)
> Как всех этих Ли отличать друг от друга - на то отдельная
> наука есть.

И на фото они все похожи.


 
George ©   (2011-10-22 12:08) [16]


> TUser ©   (22.10.11 10:37) [14]

Ну, во-первых, цитирования указываются явно. Аналог списка использованной литературы. Есть база данных с публикациями, где есть еще таблица в которой хранятся связи-ссылки между публикациями.
Хирша получить надо для конкретного автора.
Проблем с фамилиями вроде бы нет, парсить ничего не приходится, все нормально хранится в базе данных.

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



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2012.02.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.004 c
2-1320134437
Dennis I. Komarov
2011-11-01 11:00
2012.02.12
LogonUser


2-1320428134
tcjkjl
2011-11-04 20:35
2012.02.12
окружность колца


2-1319994931
ProgRAMmer Dimonych
2011-10-30 20:15
2012.02.12
recv() с таймаутом


2-1320340245
vsafary
2011-11-03 20:10
2012.02.12
Память и динамические массивы


15-1319718265
И. Павел
2011-10-27 16:24
2012.02.12
Можно ли назначить триггер на чужую БД?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский