Lug'at ma'lumotlarini saqlash uchun Btree-dan foydalanishmi?

10000 ta so'zni lug'atda saqlab qolish uchun btree-ni ishlatib (bir so'z bosh va ta'rifni o'z ichiga oladi) 100 ming so'zni 100 ming turli xil kalitlarga aralashtirishni bilmayman. Faqat hash 3 so'zning birinchi xarakterini, lekin ba'zi bir so'z bilan nima qilishni tasavvur qila olmayman 3dan ortiq belgi. Iltimos menga T_T ga yordam bering

0
Bu erda yana bir maslahat bor: Alifbo harflari bo'yicha Ascii qiymatlarini ishlatib, har bir so'zning faqat dastlabki 3 harfini ishlatib, lug'atda alifboizatsiyani saqlaydigan aralashgan formuladan foydalaning.
qo'shib qo'ydi muallif Gilbert Le Blanc, manba

1 javoblar

Bu erda g'oyalar hash-to'qnashuvlarning yaxshi bo'lishi mumkin: siz xashni hisoblaysiz (masalan, dastlabki uchta belgining ASCCI qiymatlarini qo'shsangiz, ammo haqiqiy dunyoda "xash" deb tan olinmaydi) va xeshlarni solishtiring. Agar ular teng bo'lsa, siz (yana qimmat) simlar taqqoslashini qilasiz. Kabi:

int compare(Node *left, Node *right) {
    if (left->hash == right->hash) {
        return stringCompare(left, right);
    }

    if (left->hash < right->hash) {
        return -1;
    } else {
        return 1;
    }
}
0
qo'shib qo'ydi
Sizning yordamingiz uchun Gilbert Le Blanc va DarkDust ga rahmat. Lekin bu hali hammani tashqariga chiqishga yordam berolmaydi. Menda juda ko'p savol bor. Ko'p so'zni qo'shganda (100.000 dan ortiq) Btry ko'p vaqtni muvozanatlashtirishi kerak va bu uzoq vaqt talab etiladi, uni qanday qilib tuzataman? 2 so'z bilan nima qilishim mumkin?
qo'shib qo'ydi muallif kasparov, manba