1. 程式人生 > 實用技巧 >Python+Selenium隱式等待操作程式碼

Python+Selenium隱式等待操作程式碼

啊淦,,不知道咕了多久了已經 對沒錯現在還要咕,現在才想起來寫,忘乾淨了都快,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的性質,

過程:

  1. fp 為 p 的父親,ffp 為 fp 的父親,oo 表示 p 為左兒子還是右兒子
  2. 讓 fp 的兒子 o[fp][oo]變為 2 o[p][oo ^ 1],讓 2 f[o[p][oo ^ 1]] 的父親變為 fp
  3. 讓 p 的兒子 o[p][oo ^ 1] 變為 fp ,讓 fp 的父親 f[fp] 變為 p
  4. 如果存在 fp 的父親 ffp(fp不是根節點),讓 ffp 的兒子 o[ffp][get[fp]]
    變為 p,p 的父親變為 ffp

\(\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);
}

咕著,三天內更完【真香警告】