juan_gandhi: (VP)
[personal profile] juan_gandhi
Stats I got.

I count the average number of comparisons now. There's a challenge, implementing linear interpolation for strings, for instance. Doable, I guess. Thanks a lot for the idea of the integral of Cantor Set. It helped a lot to improve the algorithm.
datasetsizeboosted searchstandard binary
Sine100009.0015.36
Cantor Set102516.0017.86
Convex/concave2189834.526.45
Concave1099904.965.00
Linear500003.0015.36
Convex1089933.605.00
Concave100023.714.10

Date: 2016-10-21 03:15 am (UTC)
From: [identity profile] spamsink.livejournal.com
There's a challenge, implementing linear interpolation for strings, for instance.

Why? They are base-256 numbers, all of the same alleged very large length, with implied 0s at the end.

Date: 2016-10-21 05:47 am (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Yes, that's my plan. :)

Date: 2016-10-21 07:14 am (UTC)
From: [identity profile] spamsink.livejournal.com
Тут еще такое дело, что игра, по-видимому, стоит свеч только тогда, когда деление как минимум такое же быстрое, как сравнение. Для чисел, например, вряд ли.

Date: 2016-10-21 09:19 am (UTC)
From: [identity profile] nivanych.livejournal.com
Зависит от исходной задачи, от количества данных, по которым надо искать.

Date: 2016-10-21 02:35 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Да ну ладно, длинные поделить, много ли там. Правда, и сравнение бесплатно.
А вещественные поделить тоже фигня. Вот трансформировать строку в вещественное, это надо как-то насобачиться.

Date: 2016-10-21 03:39 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Трансформировать строки нужно в целые, начиная с первого отличающегося байта.

Рассмотрим набор aaa...aaa, aaa...aaб, ааа...аая, я, где букв а достаточно много, чтобы сделать численные представления строк одинаковыми.
Допустим, мы ищем ааа...ааю. Тогда у нас честный пропорциональный поиск превратится в линейный. Чтобы этого избежать, проверяемая позиция должна отстоять от края интервала не менее чем на какую-нибудь долю.

Ну и более или менее очевидное, но еще вопрос, насколько существенное на современных архитектурах: если мы помним, по какому количеству символов совпадают границы, то сравнивать будет нужно меньше.
Edited Date: 2016-10-21 03:48 pm (UTC)

Date: 2016-10-21 03:59 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Откуда ж целые, если одна строка аааччччч, а другая аааш?

Date: 2016-10-21 04:06 pm (UTC)
From: [identity profile] spamsink.livejournal.com
У нас есть три строки: две границы и искомая. Ликвидируем все начальные байты, совпадающие во всех трех строках, и берем следующие 4 или 8 в качестве целых чисел. Если число, соответствующее искомой строке, равно одному из граничных, в качестве тестовой позиции берем отстоящую на N% от этой границы, иначе пропорционально.

Date: 2016-10-21 05:37 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Ага; первая часть очевидна. нужно брать отрезок. А дальше - идея обрезать несколько первых цифр эквивалентна превращению в вещественные и последующему округлению. Ну типа имеем числа с фиксированной точкой. Имеет смысл, конечно, т.к. все числа между нулем и единицей (в вещественном представлении), а у длинных на мантиссу больше места остается. И преобразование элементарно.

Date: 2016-10-23 01:20 am (UTC)
From: [identity profile] zyxman.livejournal.com
Что-то запахло переизобретением Soundex :)

https://ru.wikipedia.org/wiki/Soundex

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

June 2025

S M T W T F S
1 2345 6 7
8 9 10 11 121314
15161718 1920 21
222324252627 28
29 30     

Most Popular Tags

Active Entries

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 10th, 2025 03:57 pm
Powered by Dreamwidth Studios
OSZAR »