Python+Selenium隱式等待操作程式碼
阿新 • • 發佈:2020-07-30
雜
啊淦,,不知道咕了多久了已經 對沒錯現在還要咕,現在才想起來寫,忘乾淨了都快,qvq,一看這種程式碼一大片的就完全提不起勁兒的說
Splay簡述&結構
BST -- 二叉查詢樹,任意左兒子 < 父親節點 , 任意右兒子 > 父親節點(對每個節點都符合
Splay -- 是一種BST,它通過不斷將某個節點旋轉到根節點,使得整棵樹仍然滿足二叉查詢樹的性質,並且保持平衡而不至於退化為鏈,它由 Daniel Sleator 和 Robert Tarjan 發明,Tarjan np!!
維護的資訊
\(rt\) | \(tot\) | \(f[i]\) | \(o[i][0/1]\) | \(v[i]\) |
\(cnt[i]\) | \(sz[i]\) |
---|---|---|---|---|---|---|
根節點編號 | 節點個數 | 父親 | 左/右兒子編號 | 節點權值 | 權值出現次數 | 子樹大小 |
因為存在 左子樹任意節點的值 < 根節點的值 < 右子樹任意節點的值 的性質,我們能從這棵樹上查詢某個值
Various operations
the basic
- \(maintain(p)\) : 改變節點位置後更新節點的\(size\)
- \(get(p)\) : 判斷某節點為左兒子還是右兒子
- \(clear(p)\) : 銷燬節點
void maintain(int p) { sz[p] = sz[o[p][0]] + sz[o[p][1]]; } bool get(int p) { return o[f[p]][1] = p; } void clear(int p) { o[p][0] = o[p][1] = f[p] = v[p] = sz[p] = cnt[p] = 0; }
rotate
旋轉操作>>>>
以左圖到右圖為例,現在要將p節點向上移一個位置,將1-p-fp-3這條鏈往右移一個位置,2的父親由右上的p換為左上的fp(旋轉之後的結果),,過程中我們要維護這棵樹BST的性質,
過程:
- fp 為 p 的父親,ffp 為 fp 的父親,oo 表示 p 為左兒子還是右兒子
- 讓 fp 的兒子
o[fp][oo]
變為 2o[p][oo ^ 1]
,讓 2f[o[p][oo ^ 1]]
的父親變為 fp - 讓 p 的兒子
o[p][oo ^ 1]
變為 fp ,讓 fp 的父親f[fp]
變為 p - 如果存在 fp 的父親 ffp(fp不是根節點),讓 ffp 的兒子
o[ffp][get[fp]]
\(\lll-相互-\ggg\)
void rotate(int p) {
int fp = f[p], ffp = f[fp], oo = get(p);
o[fp][oo] = o[p][oo ^ 1];
f[o[p][oo ^ 1]] = fp;
o[p][oo ^ 1] = fp;
f[fp] = p; f[p] = ffp;
if(ffp) o[ffp][fp == o[ffp][1]] = p;
maintain(fp);
maintain(p);
}
咕著,三天內更完【真香警告】