AndrewCrewKuznetsov / xneur-devel

Xneur main repository
55 stars 25 forks source link

Странная функция list_char_alike #52

Open Mingun opened 4 years ago

Mingun commented 4 years ago

Данная фунция возвращает новый список, который состоит из одинаковых элементов, потому что она извлекает из сортированного списка некоторый элемент, равный искомому, и идет по списку до тех пор, пока элемент равен искомому: https://github.com/AndrewCrewKuznetsov/xneur-devel/blob/362019ac27f388b319b654d33ec3b1799339bf72/xneur/lib/misc/list_char.c#L224-L245 Однако, первый элемент может быть из любого элемента подмассива одинаковых элементов, это не обязательно самый первый элемент равный искомому, из сортированного списка: https://github.com/AndrewCrewKuznetsov/xneur-devel/blob/362019ac27f388b319b654d33ec3b1799339bf72/xneur/lib/misc/list_char.c#L54-L78

Единственное место использования этой функции -- в этом месте, где, похоже, значение имеет лишь количество элементов. Но из-за указанной особенности алгоритма, вероятно, это не то количество, которое нужно -- оно может быть меньше, чем нужно: https://github.com/AndrewCrewKuznetsov/xneur-devel/blob/362019ac27f388b319b654d33ec3b1799339bf72/xneur/lib/main/program.c#L2199-L2253

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

Mingun commented 4 years ago

Не заметил сначала -- list_char_alike возвращает не список одинаковых элементов, а список всех элементов из _list_char, которые начинаются с искомого слова. Что тем не менее не отменяет того, что при наличии в списке дубликатов (а они там возможны, т.к. они не удаляются) не все дубликаты будут обрабатываться. Возможно, проблема как раз в том, что в списке могут быть дубликаты