學習筆記 Tire樹

2021-09-20 04:16:11 字數 1562 閱讀 6082

oot

root

rootoo

troot

root

->a->p->p->l->e,同理,bad

badba

d就是roo

troot

root

->b->a->d。字典樹的優點在於其不僅增加單詞的複雜度是線性的,其查詢單詞或字首的複雜度也是線性的。就好像翻字典一樣,先找第乙個字母,再第二個,比盲目的大海撈針要快上許多。

之前我有想到過開乙個二維的陣列tre

etree

tree

[字母][深度],來記錄,比如bad就是tree[『b』][0]=tree[『a』][1]=tree[『d』][2]=true。但是這樣做會存在乙個問題,比如我記錄單詞aa,ab,以及ba,那就會使得tree[『a』][0],tree['b][0],tree[『a』][1],tree[『b』][1]=true,然後查詢bb時就會出現「bb存在」的錯誤,然而「bb」是不存在的,所以這種表達方式會產生一些無中生有的交叉錯誤。

以乙個例子來說明。

給出乙個陣列a,求max( (a[i] + a[j]) xor a[k] ) (i, j, k互不相同)

input

第一行給出t代表資料組數,對於每一組資料第一行給出n代表陣列中數的數量,第二行給出n個數分別代表a中第i的元素

1≤t≤1000,3≤n≤1000,0≤ai≤1e9且n>100的資料最多只有10組output對於每一組資料,輸出答案,每組資料佔一行。

sample input23

1 2 3

3100 200 300

sample output

6400

這裡以01字典樹為例。(即用字典樹表示二進位制,其他情況類似)

struct tree 

; vector tree;

//字典樹

vector<

int>data;

//記錄陣列a

int n;

int now =0;

inline

void

add(

int num)

}inline

void

insert()

}inline

void

delete

(const

int&num)

//刪除

}inline

intgetans

(const

int& i,

const

int&j)

return ans;

}void

inline

input()

inline

long

long

query()

}return ans;

}inline

void

clear()

};intmain()

system

("pause");

return0;

}

Tire樹的學習

tire樹是一種基於空間換時間思想的,應用於字串處理的資料結構。題目位址 分析 設dp陣列can maxl can i 1表示第i位可以理解。當can i 1,對第i 1位進行匹配,若能匹配完整的單詞,那麼也是可以理解的。另外注意使用getline會讀進來一些奇怪的東西。include includ...

Tire樹(字典樹)

trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...

演算法 Tire樹

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一本詞典,於是小hi就向小ho提出了那個經典的問題 小ho,你能不能對於每乙個...