離散數學 II(最全面的知識點匯總)_網頁設計公司

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

離散數學 II(知識點匯總)

目錄

  • 離散數學 II(知識點匯總)
    • 代數系統
      • 代數系統定義
        • 例子
      • 二元運算定義
    • 運算及其性質
      • 二元運算的性質
        • 封閉性
        • 可交換性
        • 可結合性
        • 可分配性
        • 吸收律
        • 等冪性
        • 消去律
      • 特殊的元素性質
        • 幺元
        • 零元
        • 逆元
          • 證明逆元且唯一定理
      • 二元運算表中性質的體現
    • 半群
      • 廣群
        • 成立條件
      • 半群
        • 定義
        • 特性
        • 子半群
      • 獨異點
        • 成立條件
        • 特性
      • 證明是半群或獨異點
    • 群和子群
        • 定義
        • 階數、有限群、無限群
          • 1階、2階、3階、4階群
        • 特性
          • 冪特性
          • 運算表特性
        • 運算
        • 子群
          • 定義
          • 判定條件
          • 性質
          • 平凡子群
          • 中心
          • 共軛子群
    • 阿貝爾群和循環群
      • 阿貝爾群 / 交換群
        • 定義
        • 判定
      • 循環群
        • 定義
        • 特性
        • 元素的階
          • 定義
          • 性質
        • 子群性質
    • 置換群和伯恩賽德定理
      • 置換
        • 成立條件
        • 運算
      • 置換群
        • 定義
        • 對稱群
        • 交錯群
        • 輪換
          • 定義
          • 記法
          • 對換
            • 定義
            • 性質
        • 誘導的二元關係
          • 定義
          • 性質
        • 三元素集的置換群
          • 對稱群
          • 交錯群
      • 伯恩賽德定理
    • 陪集和拉格朗日定理
      • 陪集
        • 定義
        • 性質
      • 特殊關係
        • 劃分
        • 等價關係
        • 等價類
        • 商集 A/R
      • 子群的指數
      • 拉格朗日定理
        • 推論
    • 正規子群和商群
      • 正規子群 / 不變子群
        • 定義
        • 判別
        • 單群
        • 性質
      • 商群
        • 運算
        • 定義
        • 性質
        • 推論
    • 同態與同構
      • 同態映射 / 同態 ~
        • 定義
        • 同態象
        • 自然同態
        • 分類
          • 同構
            • 凱萊定理
        • 自同態 / 自同構
      • 同態映射性質
      • 同態核
        • 定義
        • 性質
      • 同態基本定理
      • 第一同構定理 / 商群同構定理
    • 環與域
      • 定義
        • 零元
        • 單位元
        • 負元
        • 逆元
      • 例子
      • 性質
      • 特殊環
        • 交換環
        • 含幺環
        • 無零因子環
          • 零因子
      • 整環
        • 定義
      • 子環
        • 定義
        • 判定定理
        • 定義
        • 例子
      • 域與整環的關係
      • 環的同態定義
        • 分類
        • 同態像及其特性
          • 綜合例題

代數系統

代數系統定義

一個非空集合A,連同若干個定義在該集合上的運算f1,f2,…,fk,所組成的系統就稱為一個代數系統,記作<A, f1,f2,…,fk >。

例子

例:<N,+>,<Z,+,·>,<R,+,·>都是代數系統,其中+和·分別表示普通加法和乘法。
例:<Mn(R),+,·>是代數系統,其中+和·分別表示n階(n≥2)實矩陣的加法和乘法。
例:<ρ(S),∪,∩,~ >也是代數系統,其中含有兩個二元運算∪和∩以及一個一元運算 ~。

二元運算定義

S為非空集合,從S×S->S的映射: f: S×S->S稱為集合S上的一個二元運算。

運算及其性質

二元運算的性質

封閉性

  • Premise:\(*\)是定義在集合A上的二元運算, \(\forall\ x,y\in A\)
  • Condition:\(\ x*y\in A\)
  • Summary:\(*\)在A上是封閉的

可交換性

  • Premise:\(*\)是定義在集合A上的二元運算, \(\forall\ x,y\in A\)
  • Condition:\(x*y=y*x\)
  • Summary:\(*\)在A上是可交換的

可結合性

  • Premise:\(*\)是定義在集合A上的二元運算, \(\forall\ x,y,z\in A\)
  • Condition:\((x*y)*z=x*(y*z)\)
  • Summary:\(*\)在A上是可結合的

可分配性

  • Premise:\(*,\triangle\)是定義在集合A上的二元運算, \(\forall\ x,y,z\in A\)
  • Condition:\(x*(y\triangle z)=(x*y)\triangle (x*z)\)\((y\triangle z)*x=(y*x)\triangle (z*x)\)
  • Summary:在A上,\(*\)對於$\triangle $是可分配的

吸收律

  • Premise:\(*,\triangle\)是定義在集合A上的二元運算, \(\forall\ x,y\in A\)
  • Condition:\(x*(x\triangle y)=x\)\(x\triangle (x*y)=x\)
  • Summary:\(*\)和$\triangle $在A上滿足吸收律

等冪性

  • Premise:設\(*\)是定義在集合A上的二元運算, \(\forall\ x\in A\)
  • Condition:\(x*x=x\)
  • Summary:\(*\)在A上是等冪的

消去律

  • Premise:設\(*\)是定義在集合A上的二元運算, \(\forall\ x,y,z \in A\)
  • Condition:(左消去律)\(x*y=x*z\Rightarrow y=z\)、(右消去律)\(y*x=z*x\Rightarrow y=z\)
  • Summary:\(*\)在A上是滿足消去律的

特殊的元素性質

\(*\)是定義在集合A上的二元運算

幺元

  • 左幺元:對於\(e_l\in A,\ \forall\ x\in A,\ e_l*x=x\)
  • 右幺元:對於\(e_r\in A,\ \forall\ x\in A,\ x*e_r=x\)
  • 幺元:對於\(e\in A\)\(e\)既是左幺元又是右幺元

零元

  • 左零元:對於\(\theta_l\in A,\ \forall\ x\in A,\ \theta_l*x=\theta_l\)
  • 右零元:對於\(\theta_r\in A,\ \forall\ x\in A,\ x*\theta_r=\theta_r\)
  • 零元:對於\(\theta\in A\)\(e\)既是左零元又是右零元

逆元

設在代數系統\(<A,*>\)中,\(*\)為二元運算,e為A中關於\(*\)的幺元,\(a,b\in A\)

  • 左逆元\(b*a=e\),則b為a的左逆元
  • 右逆元\(a*b=e\),則b為a的右逆元
  • 逆元:b​既是a的左逆元又是右逆元,則b為a的逆元,記為a^-1^
    • 此時有a與b互為逆元
證明逆元且唯一定理
  • Premise:\(\forall\ a\in A\),e為A的逆元,\(*\)為A的二元運算
  • Condition:a都有左逆元,\(*\)可結合
  • Summary:a的左逆元為a的逆元且唯一

二元運算表中性質的體現

\(*\)是定義在集合A上的二元運算

  • 封閉性\(\Leftrightarrow\)運算表中所有元素\(\in A\)
  • 可交換性\(\Leftrightarrow\)運算表中所有元素沿對角線對稱
  • 等冪性\(\Leftrightarrow\)運算表中主對角線元素等於本身
  • 零元\(\Leftrightarrow\)該元素運算行列元素與其本身相同
  • 幺元\(\Leftrightarrow\)該元素運算行列元素與其對應的行列元素一致
  • 逆元\(\Leftrightarrow\)兩元素行列相交處都是幺元

半群

廣群

成立條件

  • \(*\)運算封閉

半群

定義

  • \(*\)運算封閉
  • \(*\)運算可結合

特性

  • A元素有限,則必有等冪元

證:

∵ <S, *>是半群,∴對於\(\forall\)b \(\in\)S,由運算*封閉可知:
b^2^=b*b\(\in\)S,b^2^ *b=b*b^2^=b^3^\(\in\)S ,b^4^,b^5^… \(\in\)S
∵ S有限,∴必定\(\exists\)i,j,j>i,有b^i^=b^j^(第一輪)
∴ b^i^ =b^j^ =b^j-i^ * b^i^
令p=j-i ,則有 b^i^ =b^p^ * b^i^
∴ 對任意q≥i, 有b^q^= b^p^ *b^q^ (第二輪)
又∵p≥1 ∴$\exists $k,有kp≥i,則有b^kp^=b^p^ *b^kp^ (第三輪)
由b^kp^=b^p^ *b^kp^得: b^kp^=b^p^ *b^kp^=b^p^ *(b^p^ *b^kp^)=…=b^kp^ *b^kp^
∴令a=b^kp^ \(\in\)S 則a*a=a,∴b^kp^是等冪元。

子半群

  • \(B\subseteq A\)
  • \(*\)在B上運算封閉

獨異點

成立條件

  • 為半群
  • 含幺元

特性

  • 運算表任意兩行兩列都不相同

證:

設獨異點中幺元為e,對於任意 a,bS且a≠b,總有
(1)∵a*e=a ≠ b=b*e
由a,b任意性, 有<S, *>運算表中任兩行不同;
(2)∵e*a = a ≠ b = e*b
由a,b任意性,有<S, *>運算表中任兩列不同。

  • 若a,b均有逆元,則
    • \((a^{-1})^{-1}=a\)
    • \(a*b\)有逆元,且\((a*b)^{-1}=b^{-1}*a^{-1}\)

證:

a) ∵a^-1^是a的逆元

​ ∴a^-1^既是a的左逆元又是a的右逆元

​ 即:a^-1^ *a=a *a^-1^=e

​ ∴a既是a^-1^的右逆元又是a^-1^的左逆元,

​ ∴ a是a^-1^的逆元 即(a^-1^)^-1^=a

b) 要證(a *b)^-1^=b^-1^ *a^-1^,即證b^-1^ *a^-1^為a*b的逆元。

∵(a*b) *(b^-1^ *a^-1^)=a* (b*b^-1^) *a^-1^=a*e*a^-1^=e

∴b^-1^ *a^-1^是a*b的右逆元,

又∵(b^-1^ *a^-1^)*(a *b)=b^-1^ *(a^-1^ *a)*b=e

∴b^-1^ *a^-1^是a*b的左逆元,

∴(a*b)^-1^=b^-1^ *a^-1^

證明是半群或獨異點

按定義證明

群和子群

定義

  • 運算封閉
  • 可結合
  • 存在幺元e
  • 對於每一個元素\(x\in G\),存在逆元$x^{-1}

階數、有限群、無限群

如果\(<G,*>\)為群且元素有限,則稱為有限群,元素個數稱為群的階數,否則稱為無限群

1階、2階、3階、4階群

1~4階都有循環群,可以用mod運算推

4階還有克萊因四元群,如下

* e a b c
e e a b c
a a e c b
b b c e a
c c b a e

特性

  • 階大於1的群中不可能有零元

證:

(1)當群的階為1時,它的唯一元素視作幺元e;

(2)設|G|>1且群<G, *>中有零元q,那麼群中

​ ∀x∈G,*都有q*x=x*q=q ≠ e

所以零元q不存在逆元,這與<G, *>是群矛盾。

  • $\forall\ a,b\in G,\ \exists\ \(唯一的\)x,\ a*x=b$

證:

(1)存在性
設群<G, *>的單位元為e,令x=a^-1^ *b, 則
a*x=a*(a^-1^ *b)=(a*a^-1^) *b=e*b=b
所以x=a^-1^ *b是方程a*x=b的解。
(2)唯一性
若還有x′∈G, 使得a*x′=b, 則
x′=e*x′
=(a^-1^ *a)*x′=a^-1^ *(a*x′)=a^-1^ *b=x
故x=a^-1^ *b是方程a*x=b的唯一解。

  • 滿足消去律

證:

a*b=a*c

$\Rightarrow $ a^-1^ *(a*b)=a^-1^ *(a*c)

$\Rightarrow $ (a^-1^ *a) *b=(a^-1^ *a)*c

$\Rightarrow $ e*b=e*c

$\Rightarrow $ b=c

冪特性
  • 除了幺元外,不存在其他等冪元
  • 關於逆元,群中任一元素逆元唯一,且有:
    • \((a^{-1})^{-1}=a\)
    • \((a*b)^{-1}=b^{-1}*a^{-1}\)
    • \((a^{n})^{-1}=(a^{-1})^n=a^{-n}\)

證:

已學定理5-2.4:設代數系統<A, *> , A中存在幺元e,且$\forall $x∈A,都存在左逆元,若*是可結合的運算,那麼<A, *> 中任何一個元素的左逆元必定也是該元素的右逆元,且每個元素的逆元唯一。

證明:

∵群滿足結合律,且群中每個元素都有逆元,

∴每個元素都有左逆元,

∴每個元素的逆元唯一。

運算表特性
  • 每一行與每一列都是G元素的一個置換,沒有相同元素
  • 運算表中任意兩行或者兩列都不相同

運算

AB={ab|a∈A,b∈B}
A^-1^={a^-1^|a∈A}
gA={ga|a∈A}

子群

記為H\(\leq\)G,真子群記為H<G

定義
  • 為一個群的非空子集
  • 也為群
判定條件
  1. 非空\(S\subseteq G\),且S也是群
  2. 非空\(S\subseteq G\),G為有限群,S中運算封閉
  3. 非空\(S\subseteq G\),有\(a*b^{-1}\in S\)
性質

若<H, *>和<K, *>為<G, *>子群,則

  • <H\(\cap\)K, *>也是子群
  • <H\(\cup\)K, *>是子群 當且僅當 H\(\subseteq\)K或K\(\subseteq\)H
  • HK是子群 當且僅當 HK=KH
平凡子群

\(S=\{e\}\quad OR\quad S=G\)

中心

對於\(C=\{y|y*a=a*y,y\in G\}\),則<C, *>為子群,稱為G的中心

共軛子群

若H為G子群,則xHx^-1^={x*h*x^-1^|h ∈H}也是G的子群,稱xHx^-1^是H的共軛子群

阿貝爾群和循環群

阿貝爾群 / 交換群

定義

  • 是群
  • \(*\)可交換

判定

  • 是群,且\(\forall\ a,b\in G,\ (a*b)*(a*b)=(a*a)*(b*b)\)

證:

充分性 即證a*b=b*a。
∵ (a*b)*(a*b)=(a*a)*(b*b) 且<G,*>是群,*可結合
∴ a*(b*a)*b=a*(a*b)*b
∴ a^-1^ *(a*(a*b)*b)*b^-1^=a^-1^ *(a*(b*a)*b)*b^-1^
即有:a*b=b*a, ∴ <G,*>是阿貝爾群。
必要性 ∵ <G,*>是阿貝爾群,
∴對∀a,b∈G,有:a*b=b*a
∴ (a*b)*(a*b)=a*(b*a)*b=a*(a*b)*b=(a*a)*(b*b)

循環群

定義

\(\exists\ a\in G,\ \forall\ b\in G\),b都能表示成a的冪,a稱為生成元

特性

  • 是阿貝爾群
  • 如果是有限群,階數為n,則
    • 幺元為a^n^
    • \(\psi(n)\)個生成元,(歐拉函數,表示小於n且與n互質的正整數個數)
    • G的其他生成元即\(a^k\),k與n互質
  • 若階數無限,則只有兩個生成元e和e^-1^

元素的階

定義

最小正整數k使某一元素\(a^k=e\),則k為a的階(周期)

性質
  • a^k^=e \(\iff\) r | k

    (k是r的整數倍,即存在整數m,使得k=rm )

證:

充分性:r | k \(\Rightarrow\) a^k^=e

設 r | k,則存在整數m,使得k=rm,

​ a^k^= a^rm^=(a^r^)^m^=e^m^=e

必要性:a^k^=e \(\Rightarrow\) r | k

若a^k^=e,由帶余除法,一定存在整數p,q,使得

k=pr+q(0≤q<r),於是a^k^=a^pr+q^=a^pr^ *a^q^=(a^r^)^p^ *a^q^ =(e)^p^ *a^q^ =e*a^q^ =a^q^ =e (a^k^=e)

∵ r是a的階,即使得a^r^=e的最小正整數

∴只有q=0才可能有a^q^ =e, ∴ k=pr 即r | k。

  • O(a)= O(a^-1^)(元素與其逆元的階相同)

證:

O(a)= O(a^-1^)(元素與其逆元的階相同)

證:∀a∈G,a的階為r, a^-1^的階為r’,

則 (a^-1^)^r’^=e ,a^r^=e

∵ (a^r^)^-1^ *a^r^=e 且a^r^=e,
∴ (a^r^)^-1^=e( (a^r^)^-1^與e做運算=e,則(a^r^)^-1^必=e)
由紅色部分可得(a^r^)^-1^=(a^-1^)^r’^=e-----①
∵ <G,*>是群,即(a^n^)^-1^=(a^-1^)^n^成立,則
(a^r^)^-1^=(a^-1^)^r^ 成立-----②
由①②可得,(a^-1^)^r^ =(a^-1^)^r’^=e
∵ 已知r’是a^-1^的階,即r’是使得(a^-1^)^k^ =e的最小正整數,
∴ r=mr’(m為正整數),即r’|r。 (定理中的(1)剛證明過)
同理可證r|r’。
(a^-1^)^r’^= (a^r’^)^-1^=e
∵ (a^r’^)^-1^ * a^r’^=e
∴ a^r’^=e
∵ 已知r是a的階,即r是使得(a)^r^ =e的最小正整數,
∴ r’=mr (m為正整數),即r|r’ .由r’|r與 r|r’即可證得r=r’。

  • r ≤ |G|(元素的階一定小於等於群的階)

證:

一個元素a, a的階是r,且r>|G|,則由a可生成一個集合S={a,a^2^,a^3^,…,a^r-1^,a^r^},因為運算*封閉,所以S⊆G, 則S的元素個數小於|G|.
然後證明a,a^2^,a^3^,…,a^r-1^,a^r^各不相同。
若不然,假設S中存在兩個元素相同:
a^i^=a^j^,其中1≤i<j≤r,就有e=a^j-i^ (1≤ j-i<r,a^i^=a^j^右側同*a-i),而已知r是使得a^r^=e的最小整數。
a,a^2^,a^3^,…,a^r-1^,a^r^都各不相同,即集合S的元素個數大於|G|,與S⊆G矛盾。綜上,r≤|G|

子群性質

  • 循環群的子群也是循環群
  • 循環群是無限階的,則其子群除了{e}也是無限階的
  • 循環群是n階的,對於每個n的因子,有且只有一個循環子群

置換群和伯恩賽德定理

置換

成立條件

  • 對於非空集合S,\(S\rightarrow S\)的雙射稱為S的置換

運算

先運用\(\pi_2\),再運用\(\pi_1\)

  • 左複合 $\circ \(:\)\pi_1\circ\pi_2$
  • 右複合 $\diamond \(:\)\pi_2\diamond\pi_1$

置換群

定義

  • 具有n個元素的集合S中所有的置換組成的群\(<S_n,\circ>\),其中元素個數有 n! 個
  • 任意\(<S_n,\circ>\)的子群都是S上的置換群

對稱群

\(S_n\)稱為S的對稱群

交錯群

\(S_n\)中所有偶置換組成的群,記為\(A_n\)\(|A_n|=n!/2\)

輪換

定義

設s是S={1,2,…,n}上的n元置換,且:

\[s(i_1)=i_2, s(i_2)=i_3, …, s(i_k-1)=i_k, s(i_k)=i_1 \]

\(\forall\ x\in S,\ x\ne i_j (j=1,2,…,k)\),有 s(x)=x(即s 不改變其餘元素),稱s是S上的一個k輪換, 當k=2, s也稱為對換

記法

\((i_1,i_2,…,i_k)\)

對換
定義

k=2時

性質
  • 任意輪換可以寫成對換的乘積。即

    (a1 a2…ar)=(a1 ar)(a1 ar-1)…(a1 a3)(a1 a2)

誘導的二元關係

定義

\(<G,\circ>\)為S的一個置換群,則其誘導的二元關係有

\[R=\{<a,b>|\pi(a)=b,\ \pi\in G\} \]

性質
  • 是一個等價關係(條件:自反性、對稱性、傳遞性)

三元素集的置換群

對稱群

S~3~={ (1), (1 2), (1 3), (2 3), (1 2 3), (1 3 2) }

交錯群

A~3~={ (1), (1 2 3), (1 3 2) }

伯恩賽德定理

\(\pi\)是劃分S的置換群的一個置換,\(\phi(\pi)\)指置換中不變元個數

\[等價類數目=\frac{1}{|G|}\sum_{\pi\in G}\phi(\pi) \]

陪集和拉格朗日定理

陪集

定義

設H是G的子群,\(a\in G\),則

  • aH={a*h|h∈H} H關於a的左陪集
  • Ha={h*a|h∈H} H關於a的右陪集

a稱為陪集的代表元素

性質

元素\(\Rightarrow\)陪集

  • 陪集元素個數相等,\(\forall a\in G\),|aH|=|H|

  • a∈H$\iff $aH=H,Ha=H

  • a∈aH

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

  • b∈aH $\iff $ bH=aH

陪集與陪集

  • aH和bH關係只有兩種
    • aH∩bH=\(\varnothing\)(Ha∩Hb=\(\varnothing\)
    • aH=bH(Ha=Hb)

陪集\(\Rightarrow\)元素,a/b屬於同一陪集

  • aRb \(\iff\) a^-1^ *b∈H \(\iff\) b∈aH \(\iff\) aH=bH

所有左陪集的集合∑剛好是G的一個劃分

特殊關係

劃分

  • 每個元素非空。不存在空塊
  • 所有元素並集為G
  • 任兩個元素交集為空

等價關係

關係R滿足自反、對稱、傳遞

  • 若<x,y>\(\in\)R,稱x等價於y,記作x~y

等價類

有等價關係的元素組成的一個集合,記為[a]~R~

  • a稱為[a]~R~的代表元素

商集 A/R

以R的所有等價類作為元素的集合稱為A關於R的商集

子群的指數

G對H的陪集的集合的基數,即陪集的數目,記為[G:H ]

拉格朗日定理

H為G的子群,則:

  • R={<a,b>|a∈G,b∈G且a^-1^ *b∈H}是G上的一個等價關係。對於a∈G,若記[a]~R~={x|x∈G且<a,x>∈R},則[a]~R~=aH
  • 如果G是有限群,|G|=n,|H|=m,則m|n。

推論

  • 素數階群的子群一定是平凡群。(素數階的群不存在非平凡子群)
  • 設<G,*>是n階群,則對任意a∈G,有a^n^=e
  • 有限群中,元素的階能整除群的階
  • 素數階群一定是循環群,且每個非幺元均為生成元

正規子群和商群

正規子群 / 不變子群

定義

H\(\leq\)G,\(\forall g\in G\),gH=Hg,記為H\(\unlhd\)G

判別

\(\forall a\in G\)

  • aH=Ha,(即H\(\unlhd\)G)
  • \(\forall h\in H\),aha^-1^\(\in\)H
  • aHa^-1^\(\subseteq\)H
  • aHa^-1^=H

如果G是交換群,則G的任何子群都是正規子群

[G:H]=2 , 則H是G的正規子群

單群

G除了平凡子群外無其他正規子群

性質

  • 正規子群與子群的乘積是子群
  • 正規子群與正規子群的乘積是正規子群
  • 傳遞性

商群

運算

在G/H上定義陪集乘法運算∙,對於任意aH,bH∈G/H, 有

\[aH·bH=(ab)H \]

定義

設G為群,H為正規子群,則G/H關於運算∙構成一個群,稱為G的商群

性質

  • 商群G/H的單位元是eH(=H)
  • 在G/H中aH的逆元是a^-1^H

推論

  • 若G是交換群,G/H也是交換群
  • 商群的階是G階數的因子

同態與同構

同態映射 / 同態 ~

定義

<A,\(\star\)>與<B,*>滿足\(f(a_1\star a_2)=f(a_1)*f(a_2)\)

稱 f 為同態映射 / 同態,<A,\(\star\)>同態於<B,*>

記為 A~B

同態象

<f(A), *>為<A,\(\star\)>的一個同態象

自然同態

群G到商群G/H的同態,為 a\(\rightarrow\)aH

分類

  • f:A\(\rightarrow\)B 為滿射,f 稱為滿同態
  • f:A\(\rightarrow\)B 為入射,f 稱為單一同態
  • f:A\(\rightarrow\)B 為雙射,f 稱為同構映射
同構

f 為同構映射時,稱<A,\(\star\)>與<B,*>同構,記為A\(\cong\)B

  • 同構關係是等價關係
凱萊定理

任何一個有限群同構於一個置換群。

置換群即運算表中所有行 OR 所有列

自同態 / 自同構

自身到自身的映射

同態映射性質

在 f 作用下

  • <A, $\star $>的所有性質在同態象上保留
  • 若同構,則<B, *>擁有<A, $\star $>的所有性質

同態核

定義

A中元素映射 f 後為幺元。記為 Ker(f),稱為 f 的同態核

Ker(f) = {x|x∈G且f(x)=e’}

性質

  • 同態核N為A的正規子群
  • f 為單同態 \(\iff\) Ker(f)={e}
  • 若Ker(f)=N ,則 f(a)=f(b) \(\iff\) aN=bN

同態基本定理

  • 若 f 為A到B的滿同態,Ker(f)=N,則A/N\(\cong\)B
  • 若h為A自然同態,存在A/N到B的同構g,有f=gh

第一同構定理 / 商群同構定理

  • 若 f 為A到B的滿同態,Ker(f)=N,H\(\unlhd\)A 且 N\(\subseteq\)H
    • 則 A/H \(\cong\) B/f(H)
  • 若 H\(\unlhd\)A 且 K\(\unlhd\)A 且 K\(\subseteq\)H
    • 則 A/H \(\cong\) (A/K) / (H/K)

環與域

定義

對於<A, +, ·>有兩種二元運算的代數系統

  • <A, +>是阿貝爾群

  • <A, ·>是半群

  • 運算 · 對於 + 是可分配的,即\(\forall a,b,c\in A\)

    a·(b+c)=(a·b)+(a·c)

    (b+c)·a=(b·a)+(c·a)

為了區別環中的兩個運算,通常稱+運算為環中的加法,·運算為環中的乘法。

零元

加法單位元,記為0(\(\theta\))

單位元

乘法單位元,記為1

負元

加法逆元,記為-x

逆元

乘法逆元,記為x^-1^

例子

  • <R,+,·> 實數環
  • <Q,+,·> 有理數環
  • <I,+,·> 整數環
  • <M~n~(I),+, ·> n階整數矩陣環
  • <N~k~ , +~k~ , ×~k~> 模k整數環
  • <Z[i], +, ·>(Z[i]=a+bi,a,b\(\in\)Z,i^2^=-1) 高斯整數環 (複數)
  • <R[x] ,+, ·> R[x]為實數多項式

性質

與理解的加法乘法相同,消去律不一定

  • \(\theta\)=\(\theta\)·a=\(\theta\)
  • a·(–b)=(–a)·b = –(a·b)
  • (–a)·(–b)=a·b
  • a·(b–c)=(a·b)–(a·c)
  • (b–c)·a=(b·a)– (c·a)

特殊環

交換環

<A, · >可交換

含幺環

<A, · >含幺元

無零因子環

等價於乘法消去律)

\(\forall a,b\in A, a\neq\theta, b\neq \theta\),則必有\(a·b\neq\theta\)

零因子

\(a,b\in A, a\neq\theta, b\neq \theta\),有\(a·b=\theta\),則a或b為零因子

整環

定義

(基於乘法運算的性質)

交換、無零因子 OR 含幺、無零因子

即同時滿足交換環、含幺環和無零因子環的條件

子環

定義

環的子集,也是環

判定定理

\(\forall a,b\in S,a-b\in S,a·b\in S\)

定義

滿足如下:

  • <A, +>是阿貝爾群
  • <A – {\(\theta\)}, ·>是阿貝爾群
  • 運算 · 對運算+是可分配的

例子

  • 實數域
  • 有理數域
  • 〈Z~n~,+~n~, · ~n~ 〉是域的充要條件是n是素數

域與整環的關係

  • 域一定是整環
  • 有限整環一定是域

環的同態定義

V~1~=<A,*,∘>和V~2~=<B,⊛,◎>是兩環,其中*、∘、⊛和◎都是二元運算。f 是從AB的一個映射,使得對\(\forall\)a, b\(\in\)A有:

f(a*b)=f(a)⊛f(b)

f(ab)=f(a)◎f(b)

則稱f是環V1到環V2的同態映射

分類

如果f單射、滿射和雙射,分別稱f單同態、滿同態和同構

同態像及其特性

<f(A),⊛,◎>是<A,*,∘>的同態像

  • 任何環的同態像是環
綜合例題

設<R,+, · >是環,其乘法單位元記為1,加法單位元記為0,對於任意a,b\(\in\)R,定義

a⊕b=a+b+1,a⊙b=a·b+a+b。求證: <R, ⊕, ⊙ >也是含幺環,並與<R,+, · >同構。

證明:

首先證明<R, ⊕, ⊙ >是環。

(1) <R, ⊕ >是阿貝爾群。

(2) <R, ⊙ >是含幺半群。

(3) ⊙對⊕可分配,再證明同構。

(4)構造雙射f: f(a)=a-1,驗證同構性。

(1) <R, ⊕ >是阿貝爾群。

顯然R關於⊕是封閉的且⊕運算是可交換的。

結合性:對於任意的x,y,z\(\in\)R,有

(x⊕y)⊕z=(x+y+1)⊕z=x+y+z+2,而

x⊕(y⊕z )= x⊕ (y+z+1)=x+y+z+2, 即⊕運算滿足結合律。

幺元:對於任意x\(\in\)R, x⊕-1= x+(-1)+1=x,-1是R關於⊕運算的幺元。

逆元:對於任意x\(\in\)R, x⊕(-x-2)= x+(-x-2)+1=-1, +(-x-2)是x關於⊕運算的逆元。

所以<R, ⊕ >是阿貝爾群。

(2) <R, ⊙ >是含幺半群。

顯然R關於⊙是封閉的、可交換的。

結合性:對於任意的x,y,z ÎR,有

(x ⊙ y) ⊙ z=(xy+x+y) ⊙ z=xyz+xz+yz+xy+x+y+z,而

x ⊙(y ⊙ z )= x ⊙ (yz+y+z)=xyz+xy+xz+yz+x+y+z, 即⊙運算滿足結合律。

幺元:對於任意xÎR, x ⊙ 0=0+ x+0=x,0是R關於⊙運算的幺元。

所以<R, ⊙ >是含幺半群.

(3) ⊙對⊕可分配

對於任意的x,y,z\(\in\)R,有

x⊙(y⊕z )= x⊙(y+z+1)=xy+xz+x+x+y+z+1=xy+xz+2x+y+z+1

(x⊙y)⊕(x⊙z)=(xy+x+y)⊕(xz+x+z)=xy+xz+2x+y+z+1

同理可以證明右可分配性。

綜上所述, <R, ⊕, ⊙ >也是含幺環

再證明同構。

構造雙射f: f(a)=a-1,驗證同構性。

(4)證明同構。構造函數f: f(x)=x-1

雙射:對於任意x\(\in\)R,則有x+1\(\in\)R,使得f(x+1)=x,所以f是滿射

x,y\(\in\)R,若f(x)=f(y),則有x-1=y-1,即x=y,所以f是單射。

同態: f(x+y)=x+y-1

f(x)⊕f(y)=(x-1)⊕(y-1)=x-1+y-1+1=x+y-1

所以f(x+y)= f(x)⊕f(y)

又因為 f(x·y)=x·y-1

f(x)⊙f(y)=(x-1) ⊙(y-1)=(x-1)· (y-1)+x-1+y-1

​ =x·y-x-y+1+x-1+y-1=x·y-1

所以f(x·y)= f(x)⊙f(y)

​ 綜上,<R, ⊕, ⊙ >與<R,+, ∘ >同構。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

[leetcode] 並查集(Ⅱ)_包裝設計

※產品缺大量曝光嗎?你需要的是一流包裝設計!

窩窩觸角包含自媒體、自有平台及其他國家營銷業務等,多角化經營並具有國際觀的永續理念。

最長連續序列

題目[128]:鏈接。

解題思路

節點本身的值作為節點的標號,兩節點相鄰,即允許合併(x, y)的條件為x == y+1

因為數組中可能會出現值為 -1 的節點,因此不能把 root[x] == -1 作為根節點的特徵,所以採取 root[x] == x 作為判斷是否為根節點的條件。默認較小的節點作為連通分量的根。

此外,使用 map<int, int> counter 記錄節點所在連通分量的節點個數(也是merge 的返回值)。

class Solution
{
public:
    unordered_map<int, int> counter;
    unordered_map<int, int> root;
    int longestConsecutive(vector<int> &nums)
    {
        int len = nums.size();
        // use map to discard the duplicate values
        for (int x : nums)
            root[x] = x, counter[x] = 1;
        int result = len == 0 ? 0 : 1;
        for (int x : nums)
        {
            if (root.count(x + 1) == 1)
                result = max(result, merge(x, x + 1));
        }
        return result;
    }
    int find(int x)
    {
        return root[x] == x ? x : (root[x] = find(root[x]));
    }
    int merge(int x, int y)
    {
        x = find(x);
        y = find(y);
        if (x != y)
        {
            root[y] = x;
            counter[x] += counter[y];
        }
        return counter[x];
    }
};

連通網絡的操作次數

題目[1319]:Link.

解題思路

考慮使用並查集。

考慮到特殊情況,要使 N 個點連通,至少需要 N-1 條邊,否則返回 -1 即可。

通過並查集,可以計算出多餘的邊的數目(多餘的邊是指使得圖成環的邊),只要 findroot(x) == findroot(y) 說明邊 (x,y) 使得圖成環。

遍歷所有邊,在並查集中執行合併 merge 操作(多餘的邊忽略不合併,只進行計數)。設 components 為合併后后 root 數組中 -1 的個數(也就是連通分量的個數),要想所有的連通分支都連起來,需要 components - 1 個邊,所以要求「多餘的邊」的數目必須大於等於 components - 1

一個簡單的例子如下:

0--1         0--1                0--1
| /    =>    |          =>       |  | 
2  3         2  3                2  3
             components = 2
             duplicateEdge = 1

代碼實現

class Solution
{
public:
    vector<int> root;
    int result = 0;
    int makeConnected(int n, vector<vector<int>> &connections)
    {
        int E = connections.size();
        // corner cases
        if (n == 0 || n == 1)
            return 0;
        if (E < n - 1)
            return -1;
        root.resize(n), root.assign(n, -1);
        // merge
        for (auto &v : connections)
        {
            int a = v[0], b = v[1];
            merge(a, b);
        }
        int components = count(root.begin(), root.end(), -1);
        if (counter >= (components - 1))
            return components - 1;
        // should not be here
        return -1;
    }
    int find(int x)
    {
        return root[x] == -1 ? x : (root[x] = find(root[x]));
    }
    // the number of duplicate edges
    int counter = 0;
    void merge(int x, int y)
    {
        x = find(x), y = find(y);
        if (x != y)
            root[y] = x;
        else
        {
            // there is a duplicate edge
            counter++;
        }
    }
};

等式方程的可滿足性

題目[990]:Link.

解題思路

考慮並查集。遍歷所有的包含 == 的等式,顯然,相等的 2 個變量就合併。對於不等式 x!=y ,必須滿足 findroot(x) != findroot(y) 才不會出現邏輯上的錯誤。也就是說,不相等的 2 個變量必然在不同的連通分支當中。

#define getidx(x) ((x) - 'a')
class Solution
{
public:
    vector<int> root;
    bool equationsPossible(vector<string> &equations)
    {
        root.resize('z' - 'a' + 1, -1);
        vector<int> notequal;
        int len = equations.size();
        for (int i = 0; i < len; i++)
        {
            auto &s = equations[i];
            if (s[1] == '!')
            {
                notequal.emplace_back(i);
                continue;
            }
            int a = getidx(s[0]), b = getidx(s[3]);
            merge(a, b);
        }
        for (int i : notequal)
        {
            auto &s = equations[i];
            int a = getidx(s[0]), b = getidx(s[3]);
            if (find(a) == find(b))
                return false;
        }
        return true;
    }
    int find(int x)
    {
        return (root[x] == -1) ? x : (root[x] = find(root[x]));
    }
    void merge(int x, int y)
    {
        x = find(x), y = find(y);
        if (x != y)
            root[y] = x;
    }
};

盡量減少惡意軟件的傳播 II

題目[928]:這題有點難。

解題思路

參考 題解1 和 題解2 。

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

上新台中搬家公司提供您一套專業有效率且人性化的辦公室搬遷、公司行號搬家及工廠遷廠的搬家服務

首先,對原來的並查集結構添加一點改進,利用 vector<int> size[N] 記錄某個連通分量中節點的數目,注意當且僅當 x 是該連通分量的根節點時,size[x] 才表示該連通分量的節點數目。這是因為在 merge 中,只對根節點的 size 進行了處理。

vector<int> root;
vector<int> size;
int find(int x)
{
    return root[x] == -1 ? (x) : (root[x] = find(root[x]));
}
void merge(int x, int y)
{
    x = find(x), y = find(y);
    if (x != y)
        root[y] = x, size[x] += size[y];	// pay attention here
}
// get the size of the connected component where node x is in
int getComponentSize(int x)
{
    return size[find(x)];
}

然後,建立一個基本圖,該圖是原圖 graph 去除所有感染節點 initial 的結果,並把這個基本圖轉換為上述改進后的並查集。把這個基本圖中的節點暫且稱為 clean nodes 或者 non-infected nodes .

從直覺上來說,我們應該在 initial 中找到那個標號最小,感染最多 non-infected nodes 的節點,但是這樣是否符合預期?

顯然是不符合的,來看個例子,設 initial nodes = [a,b,c] ,並設 2 個沒有被感染的連通分量為 N1, N2 ,且這 2 個連通分量的點數滿足 size(N1) > size(N2),原圖 graph 結構如下:

a--N1--c

b--N2

根據題目的意思,需要找到的是使得最終感染數目 M(initial) 最小的節點。

如果我們按照上述所謂的「直覺」:“在 initial 中找到那個感染最多 non-infected nodes 的節點”,應該去除的是節點 a ,但是由於 c 的存在,N1 依舊會被感染,這樣 M(initial) = size(N1) + size(N2)。(也就是說,某個連通分量相鄰的感染節點多於 1 個,該連通分量最終是必然被感染的,因為我們只能去除一個感染節點。)

實際上,這種情況下正確答案是去除 b ,因為除 b 后:M(initial) = size(N1) ,該結果才是最小的。

所以,我們要找的是:在 initial 中找到那個感染最多 non-infected nodes 的節點 ans,但這些 non-infected nodes 節點只能被 ans 感染,不能被其他的 initial 節點感染(即只能被感染一次)。

代碼實現

class Solution
{
public:
    vector<int> root;
    vector<int> size;
    int minMalwareSpread(vector<vector<int>> &graph, vector<int> &initial)
    {
        int N = graph.size();
        root.resize(N, -1);
        size.resize(N, 1);

        // use hash table to mark infected nodes
        vector<bool> init(N, false);
        for (int x : initial)
            init[x] = true;
        // change the non-infected graph into disjoint union set
        for (int i = 0; i < N; i++)
        {
            if (init[i])
                continue;
            for (int j = 0; j < i; j++)
            {
                if (init[j])
                    continue;
                if (graph[i][j] == 1)
                    merge(i, j);
            }
        }
        // table[x] = {...}
        // the set {...} means the non-infected components which initial node x will infect
        // counter[x] = k
        // k means that the non-infected component x will be infected by initial nodes for k times
        vector<int> counter(N, 0);
        unordered_map<int, unordered_set<int>> table;
        for (int u : initial)
        {
            unordered_set<int> infected;
            for (int v = 0; v < graph[u].size(); v++)
            {
                if (!init[v] && graph[u][v] == 1)
                    infected.insert(find(v));
            }
            table[u] = infected;
            for (int x : infected)
                counter[x]++;
        }

        // find the node we want
        int ans = N + 1, maxInfected = -1;
        for (int u : initial)
        {
            int sum = 0;
            for (int x : table[u])
                if (counter[x] == 1)	// must be infected only once
                    sum += getComponentSize(x);
            if (sum > maxInfected || (sum == maxInfected && u < ans))
            {
                ans = u;
                maxInfected = sum;
            }
        }
        return ans;
    }

    int find(int x)
    {
        return root[x] == -1 ? (x) : (root[x] = find(root[x]));
    }

    void merge(int x, int y)
    {
        x = find(x), y = find(y);
        if (x != y)
            root[y] = x, size[x] += size[y];
    }

    int getComponentSize(int x)
    {
        return size[find(x)];
    }
};

盡量減少惡意軟件的傳播

題目[924]:做了上面那題之後簡單一點。

解題思路

依然是使用上題中 盡量減少惡意軟件的傳播 II 改進后的並查集結構。

對整個原圖處理,轉換為並查集。然後,模擬處理。即 \(\forall x \in initial\) ,使用集合 \(newSet = initial – \{x\}\) 去模擬感染原圖,得到最終的感染節點數 t,選取感染節點數 t 最小且標號值最小的 \(x\) 作為返回結果。

代碼實現

class Solution
{
public:
    vector<int> root, size;
    int minMalwareSpread(vector<vector<int>> &graph, vector<int> &initial)
    {
        int N = graph.size();
        root.resize(N, -1);
        size.resize(N, 1);

        for (int i = 0; i < N; i++)
            for (int j = 0; j < i; j++)
                if (graph[i][j] == 1)
                    merge(i, j);

        int ans = N + 1, minval = N + 1;
        // assume that discard the node x in the initial set
        // get the injected value
        for (int x : initial)
        {
            int t = getInjected(x, initial);
            if (t < minval || (t == minval && ans > x))
            {
                minval = t;
                ans = x;
            }
        }
        return ans;
    }
    // use set initial - {x} to inject the graph
    int getInjected(int x, vector<int> &initial)
    {
        unordered_set<int> s;
        for (int k : initial)
        {
            if (k == x)
                continue;
            s.insert(find(k));
        }
        int sum = 0;
        for (int t : s)
            sum += size[find(t)];
        return sum;
    }
    int find(int x)
    {
        return root[x] == -1 ? (x) : (root[x] = find(root[x]));
    }
    void merge(int x, int y)
    {
        x = find(x), y = find(y);
        if (x != y)
            root[y] = x, size[x] += size[y];
    }
};

被圍繞的區域

題目[130]:本題難度一般。

解題思路

本題最特殊的節點是邊界上的 O 以及內部與邊界 O 相鄰的節點。

首先,通過邊界的 O 入手,從它開始進行 DFS 搜索,把所有這些的特殊節點標記為 Y 。然後,在 board 中剩下的 O 就是普通的節點(必然是不與邊界 O 相鄰且被 X 所圍繞的),可以把它們全部換成 X 。最後,把所有的 Y 還原為 O

對於搜索方法,既可以是 DFS 也可以是 BFS

代碼實現

class Solution
{
public:
    const vector<vector<int>> direction = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
    int row, col;
    void solve(vector<vector<char>> &board)
    {
        row = board.size();
        if (row == 0)
            return;
        col = board[0].size();
        #define func bfs
        for (int j = 0; j < col; j++)
        {
            if (board[0][j] == 'O')
                func(0, j, board);
            if (board[row - 1][j] == 'O')
                func(row - 1, j, board);
        }

        for (int i = 0; i < row; i++)
        {
            if (board[i][0] == 'O')
                func(i, 0, board);
            if (board[i][col - 1] == 'O')
                func(i, col - 1, board);
        }

        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < col; j++)
            {
                if (board[i][j] == 'O')
                    board[i][j] = 'X';
                if (board[i][j] == 'Y')
                    board[i][j] = 'O';
            }
        }
    }

    void dfs(int i, int j, vector<vector<char>> &board)
    {
        board[i][j] = 'Y';
        for (auto &v : direction)
        {
            int a = i + v[0], b = j + v[1];
            if (a < 0 || b < 0 || a >= row || b >= col)
                continue;
            if (board[a][b] == 'O')
                dfs(a, b, board);
        }
    }

    void bfs(int i, int j, vector<vector<char>> &board)
    {
        typedef pair<int, int> node;
        queue<node> q;
        q.push(node(i, j));
        board[i][j] = 'Y';
        while (!q.empty())
        {
            node n = q.front();
            q.pop();
            for (auto &v : direction)
            {
                int a = n.first + v[0], b = n.second + v[1];
                if (!(a < 0 || b < 0 || a >= row || b >= col) && board[a][b] == 'O')
                    board[a][b] = 'Y', q.push(node(a, b));
            }
        }
    }
};

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網動廣告出品的網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上她。

其實 AirPods Max 閒置 5 分鐘就會進入 Smart Case 低耗電模式,還有個超低耗電模式等著呢_貨運

※評比南投搬家公司費用收費行情懶人包大公開

搬家價格與搬家費用透明合理,不亂收費。本公司提供下列三種搬家計費方案,由資深專業組長到府估價,替客戶量身規劃選擇最經濟節省的計費方式

儘管 AirPods Max 已經是蘋果主動降噪無線耳機中續航最長,可達 20 小時連續聆聽時間的存在。然而,許多人似乎對於將這台美型耳機塞回具備 Smart Case 聰穎耳機套感到有些抗拒(?)。但仍會擔心假如無法藉由它啟動低耗電 AirPods Max 是否就會續航不足?好在,蘋果最近釋出了支援文件,分別提到了有無放在耳機套中,低功耗功能啟動的時機點。繼續閱讀其實 AirPods Max 閒置 5 分鐘就會進入 Smart Case 低耗電模式,還有個超低耗電模式等著呢報導內文。

【 AirPods Max 官網購買頁面 】


▲圖片來源:Apple

其實 AirPods Max 閒置 5 分鐘就會進入 Smart Case 低耗電模式,還有個超低耗電模式等著呢

▲圖片來源:Apple

雖然 AirPods Max 支援充電 5 分鐘即可獲得 1.5 小時聆聽時間的快充功能,不過無線耳機的重點想必就是「無線」這兩個字,所以大多數人應該都會希望在使用過程中盡量不需要插線使用吧!好在,這次的蘋果耳罩式主動降噪無線耳機 AirPods Max 支援最高 20 小時的聆聽時間,理論上來講應該能夠支援大多數人整天甚至多天的使用。

但很多人也會對於搭配聰穎耳機套來盡量省電的必要性有所疑問。現在,透過官方的說明文件,我們終於知道 AirPods Max「各種」低功耗模式的觸發時間點,在有無搭配聰穎耳機套的正確資訊。

▲圖片來源:Apple

簡單的講,AirPods Max 分為幾個「狀態」:

· 透過光感應確認耳機離開耳朵的暫停狀態,類似暫停。
· 靜置超過一定時間或收納到 Smart Case 聰穎耳機套內進入省電模式,類似待機。

上述兩者再維持更長時間後,則是會進入類似休眠的「超低耗電模式」。將會關閉藍牙與 Find My 尋機功能。

▲圖片來源:Apple

以上,其實大多數人關心的是耳機如果不搭配聰穎耳機套的話,是否就會一直處於暫停狀態造成續航損耗過多。而根據官方的說法,雖然想省電還是將 AirPods Max 放入聰穎耳機套最快,會立即啟動低耗電模式。不過其實這款耳機只要靜止閒置 5 分鐘的時間也就會進入放入聰穎耳機套的狀態。

沒錯,兩者就只差 5 分鐘而已。沒先前傳出的 18 小時那樣久。

※智慧手機時代的來臨,RWD網頁設計為架站首選

網動結合了許多網際網路業界的菁英共同研發簡單易操作的架站工具,及時性的更新,為客戶創造出更多的網路商機。

至於更低功耗的 Ultra-low power 超低耗電模式則是需要再等 18 小時(Smart Case)/ 72 小時(靜置)才會啟動。

▲圖:說明文件提到,AirPods Max 耳機上也會有類似以往 AirPods 充電盒顯示有無低於 15% 電量的狀態燈號。

是說,除了超低耗電模式到底能讓 AirPods 續航延長到多少,該如何喚醒,還有包括「靜置(stationary)」的定義也蠻讓人好奇的 — 是代表儘管是塞在包包裡,只要有偵測到動態就會恢復一般的暫停狀態嗎?

假若如此,這應該代表 AirPods Max 放在固定場地使用的話,是不太需要塞回聰穎耳機套中。不過如果想保證通勤移動過程中攜帶時的低耗電狀態,最有效延長外出時的續航時間,也許原廠的耳機套(或類似功能的專用攜行盒)都還是要裝回比較好囉。

【 AirPods Max 官網購買頁面 】

本篇圖片 / 引用來源

延伸閱讀:

HomePod mini 開箱體驗:一顆就能敲開蘋果智慧家門,兩顆更是不嫌多

AirPods Max 過保電池維修價格公佈,這算… 便宜?

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※回頭車貨運收費標準

宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念

GoPro 將藍牙遙控器加上了螢幕,還可以一次控制 5 台運動相機_網頁設計公司

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

如果你是愛用 GoPro 進行創作的朋友,應該不會對官方的遙控器裝置太陌生 — 基本上就是個讓你在無法觸及 GoPro 運動相機時,可以幫忙執行各種設定與拍攝的好夥伴。而隨著新世代的 Hero9 推出,他們則是再推出了一款算是先前超小巧方形的藍牙遙控器的升級版「The Remote」,是說這中文應該就只叫做遙控器?繼續閱讀 GoPro 將藍牙遙控器加上了螢幕,還可以一次控制 5 台運動相機報導內文。

▲圖片來源:GoPro

GoPro 將藍牙遙控器加上了螢幕,還可以一次控制 5 台運動相機

說起來這次新推的 GoPro 遙控器,比較像是介於很早以前的 Wi-Fi 遙控器與後來推出的藍牙遙控器之間的產品 — 同時可以控制的相機數也是,搭載螢幕的 Wi-Fi 版本,可以一次遙控 50 台是其中最高階的存在(算是吧);外型就是「一顆按鈕」且支援語音功能的藍牙遙控器,則是僅能與單機連線;這次的新款遙控器,則是可以跟 5 台支援的機型,包括:GoPro Hero9、 Hero8 與 Max 連線使用。

▲圖片來源:GoPro

儘管 GoPro 在官網寫上了它搭載了大尺寸的「高解析度螢幕」。不過很可惜,它支援的顯示功能其實比較接近於 Hero8 的前螢幕,並非 Hero9 的全彩自拍螢幕 — 雖然官方真的打上了 high-resolution display。

遙控距離方面,相對於先前藍牙遙控器的 10 公尺,這次的版本更遠到了 60 公尺,並支援水下最深近 5 公尺的防水能力。但最遠距離還是由 Wi-Fi 版本的智慧遙控器的 180 公尺為最強。

▲圖片來源:GoPro

機身上則是除了正面的拍攝鈕外,側面還有模式與設定按鈕共 4 顆按鈕(其中一個從官圖看不出來,但應該在頂部,也許是電源鈕吧)。大螢幕的好處是,這次的遙控器不再像 Wi-Fi 版本那樣,一切資訊擠成一團,讓人很難在激烈的運動活動下快速查看,並會直接顯示剩餘電量的百分比而非圖示(這個好,誒… 應該是相機電量吧?),遙控器螢幕的頂部也有錄影燈號。

The Remote 現已在美國官網開賣,建議售價為 US$80(約 NT$2,300),據稱其他國家的開賣時間將會需要等到明年二月。所以如果急著要入手的話,可能就只能從海外官網入手囉。

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

本篇圖片 / 引用來源

延伸閱讀:

HomePod mini 開箱體驗:一顆就能敲開蘋果智慧家門,兩顆更是不嫌多

其實 AirPods Max 閒置 5 分鐘就會進入 Smart Case 低耗電模式,還有個超低耗電模式等著呢

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

​雲中奈飛(一):Netflix的上雲之旅_網頁設計公司

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

作者按: 

Netflix(譯為奈飛/網飛)公司自1997年創立以來,已發展成為美國最大的互聯網流媒體服務商。它從2008到2015年間長達七年的將其所有IT系統從自有數據中心遷移到AWS之上的旅程,在當時可謂前無古人的創舉,對公有雲的發展、傳統企業上雲及基於雲的業務轉型等都有很大的推動和促進作用。雖然已過去多年,有些東西已略微顯得過時,但奈飛上雲的理念、步驟、做法等,對當今企業上雲及用雲仍有很大的參考價值。 

因此,在接下來的幾周內,筆者打算花上些許時間,對奈飛的上雲之旅,及其雲上運行,基於網上公開資料,從上雲歷程、雲上架構、支撐團隊、雲上安全等維度做下梳理和總結,形成系列文章。它山之石,可以攻玉。本文為這系列文章的第一篇,介紹奈飛的總體上雲歷程。

 

本文目錄

零、公司簡介………………………………… 1

一、發端………………………………………. 4

二、驗證………………………………………. 6

三、進行………………………………………. 8

四、完成………………………………………. 11 

五、筆者感受

 

零、公司簡介

 

 

Netflix(https://www.netflix.com/)公司總部設在美國加利福尼亞州,是全世界最大的視頻流媒體平台,在除中國大陸地區以外的所有國家和地區均提供視頻點播服務,相當於國內的愛奇藝、優酷和騰訊視頻等視頻網站。 

1997年,當Reed Hastings和Marc Randolph創建 Netflix時,這家公司唯一業務是DVD郵購業務。2002年上市,股票發行價為15美元;2007年開始發展流媒體業務;2013年,發布其首部原創電視劇《紙牌屋》;2016年宣布全球化,全世界200多個國家和地區可訂閱Netflix觀看電影電視劇。 2017年,Netflix用戶數量超過美國有線電視用戶總數。如今,Netflix的股價是419美元,已成為世界上大型的電視劇和電影製片公司之一、美國最大的互聯網流媒體服務商,在世界範圍內擁有很強的影響力,高峰時刻佔據了互聯網流媒體流量的33%。 

 

除了商業上非常成功外,Netflix在技術上也非常成功,它雖然是家娛樂公司,但實際上是一家技術公司。從2008年開始,直到2015年底,它花了整整七年時間,把公司整套IT系統搬到了AWS上。這可謂前無來者。除此之外,Netflix在分佈式系統開源上具有巨大的影響力,其開源項目叫做Netflix OSS(Open Source Software),涵蓋範圍基本包括了業界絕大部分分佈式系統領域,包括但不限於: 

·       公共運行時服務及庫,比如Eureka, Ribbon, Hystrix

·       大數據,比如Genie

·       構建和發布工具,比如Asgard/Spinnaker

·       數據持久化,比如EVCache

·       可觀察性、可靠性和性能,比如Simian Army 

 

一、發端

 

Netflix的上雲之旅始於2008年8月。從公開資料來看,當時主要有兩個驅動力促使其上雲: 

(1)發生了系統宕機。 

當時,Netflix的IT系統運行在高端昂貴的IBM服務器、Oracle數據庫和SAN存儲搭建的平台之上。某次,因為SAN存儲硬件故障導致的數據庫宕機,使得Netflix的DVD配送服務不得不停止了3天。這個故障使得公司管理層開始意識到,由IT團隊利用昂貴的平台來保證系統可用性的做法存在問題,更應該從應用層面去保障系統可用性。因此,需考慮IT系統從傳統垂直擴展的帶有單點故障的架構,轉向高可用、水平擴展的分佈式架構。與此同時,他們開始思考是否可以利用剛剛出現的低成本雲基礎設施來替代昂貴傳統IT基礎設施來支撐需具備高可用性的應用。

 

 

(2)新業務帶來巨大數據中心擴容壓力。 

Netflix的傳統DVD寄送服務的服務模式下,客戶瀏覽Netflix網站選擇DVD,然後公司開始寄送。因為受到DVD來回寄送速度的限制,通常是以周為周期給客戶寄送DVD。因此,這種傳統業務模式對IT系統的業務壓力較輕。 

傳統DVD寄送業務模式

 

儘管DVD業務增長迅速,但2007年Netflix仍然決定推出第一款流媒體產品“Watch Now”來革新其業務。這種業務也是它後來蓬勃發展的關鍵因素之一。這種新服務模式下,用戶與Netflix網站之間的交互頻率是傳統DVD寄送業務下交互頻率的100倍甚至不止。 

流媒體服務模式

 

新模式下,用戶每周看的視頻數量是之前的十倍,而每個視頻對數據中心中的IT系統產生的流量則是百倍,因此每個用戶對IT系統產生的流量是之前的千倍。也就是說,只要0.1%的用戶從傳統模式轉向新模式,那IT系統的容量就必須翻倍。其實這種規律也很常見。即使用戶並沒有顯著增長,只要因為業務模式的變化,對IT系統的壓力也可能成倍增加。 

這就要求Netflix找到一種快速擴容數據中心的方法,因為根據當時的業務預測,其用戶很快就會轉向在線流媒體服務模式。時間來到2009年,隨着新業務的發展,Netflix面臨兩個選擇:自建數據中心,或利用其業務競爭對手亞馬遜於2006年才發布的AWS雲。前者需要大量前期資金投入,並且未來的容量需求無法預測且是變化不定的,而後者則是在視頻流領域的最大競爭對手Amazon的雲上開展業務。Netflix決定選擇後者。他們認為,相比在不實際產生業務價值的數據中心上做前期巨大投入,將資金投入在視頻內容和開發人員身上會更有價值。

 

 

二、驗證

於是這一年(2009年),Netflix開始研究利用AWS雲來開展業務的各種風險,包括業務競爭風險、規模性風險、商業風險和公關風險等。就業務競爭風險,Netflix與AWS溝融了AWS是如何與Amazon Premier做業務分離的。然後開展實驗去驗證AWS上的資源快速擴容能力。Netflix還與AWS簽訂了首批企業許可協議,這種協議下Netflix不需要通過授權信用卡方式來使用AWS資源,而信用卡授權是當時大多數人在AWS上消費時使用的主要方式。 

隨着兩家合作消息的傳開,2010年4月,紐約時報還發表了一篇關於Netflix和AWS業務的文章,說兩者將進行業務合作。請注意其中的“peculiar(特有)“一詞,表示那時候企業上雲是新聞,而上到競爭對手的雲上更是新聞。 

 

當時Netflix還諮詢了一些業界專家,專家們認為這種做法非常瘋狂,因為當時很少有企業這麼做,而且企業業務上雲在當時還是一個非常不成熟的策略。但Netflix決定堅持下去,成為首批上雲企業客戶之一。 

接下來,Netflix實驗性地將一些沒有真正面向客戶的應用遷移到AWS上。首先從電影編碼開始,當時其只有數據中心沒有足夠的容量來容納編碼服務器。有一次Netflix申請3000台服務器,結果AWS一個小時內就交付了,這就驗證AWS資源交付的彈性和及時性。而且隨着這項工作的完成,不用的機器即被釋放,這證明了雲計算的“按需使用和付費”特徵。

接下來驗證視頻服務QoS日誌上雲。隨着進入數據中心數據庫的流量越來越多,這些流量正在溢出,而且自己的機房缺乏足夠的存儲空間來保存想要的信息。於是,Netflix利用S3來存儲數據,利用EMR來處理數據。Netflix是Hadoop早期用戶之一,曾與AWS合作將Hive作為基於EMR的處理選項。

 

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

 

到2010年,可行性驗證基本完成,Netflix認為上雲看起來是可行的。於是2011年,Netflix作出決定,不再擴容自有IDC。

 

三、進行

 

Netflix開始真正地要在AWS雲上起飛了。從最簡單的API服務開始,然後是最簡單的Web網頁,然後是更多的API和網頁。

 

到2010年底,Netflix成功地將網站前端都遷移到了AWS上,但後端依然在自有數據中心內。

 

用戶訪問流量還是進入其自有數據中心,但是有選擇地將部分流量利用HTTP Redirect將請求轉向AWS Cloud。這其實也就是我們現在常常提到的金絲雀模式,通過導入部分用戶到新環境上來驗證和逐步地完成系統遷移。

 

 

接下來是數據遷移。2010年的主要工作之一,是將主數據系統放在數據中心,將副本放在雲中,並將數據從本地持續地同步到雲中。

 

 

2011年,Netflix決定將所有數據放到雲上。其中一個問題是如何做數據備份。Netflix沒有採用當時常見的利用本地數據中心中的磁帶來備份雲中數據的做法,而是充分利用了S3的安全性和持久性,用不同的賬戶在不同的AWS區域中創建S3存儲桶,然後將生產數據導入生產區域S3存儲桶,再經過壓縮和加密並傳送到容災區域的桶中。利用不同的賬戶,主要是從安全角度考慮。後來,AWS發布了Glacier后,Netflix利用它來做長期歸檔的數據存儲。

 

 

 

到2015年,除了計費和賬單系統外,其餘所有系統都已經遷移到AWS上了。到2016年1月4日,Netflix完成了最後這兩個系統的遷移,詳細信息請參加其公司博客https://netflixtechblog.com/netflix-billing-migration-to-aws-451fba085a4。

 

 

四、完成

 

2016年2月,Netflix宣布其上雲遷移工作全部完成。這一年,Netflix的用戶數是2008年開始上雲遷移時候的8倍,而用戶的月度觀看視頻數則有幾千倍的增長,用戶遍布全球超過130個國家,Netflix也成為了一家國際化視頻服務提供商。

 

到2017年,除了CDN由其自建外,Netflix使用AWS來滿足其幾乎所有計算和存儲需求,包括數據庫、分析、建議引擎、視頻轉碼等數百種功能。而且,Netflix系統的可用性在持續增加,正在不斷接近99.99%的既定目標。

  • Netflix的視頻服務在高峰時段佔據了高達37%的Internet流量。相比之下,YouTube 僅佔到15.6%,網頁瀏覽約 6%, Facebook約2.7%, Amazon Instant Video 約2.0%。

  • 在AWS上共利用超過10萬個 EC2 Instances 的80萬CPU Cores,且在此基礎上有約 20% 的波動。

  • 在每個服務區域上的 AWS Elastic Load Balancing 的流量超過 50Gbps

  • 在 S3 上存儲和管理超過15億個對象的 60 PB 的數據。其中每天要丟棄超過 400TB 的過期數據以及新增 600TB 的數據。

 

2016年Netflix在AWS上的系統架構:

儘管降低成本支出並不是Netflix上雲的主要出發點之一,但是實際上,現在每個視頻的播放成本是當初利用自有數據中心的幾分之一,這是一種非常可觀的額外收益。這主要歸功於雲的彈性,使得Netflix可以持續地優化實例類型,近乎實時地增加或減少所用的資源,而不需要維持大規模的備用容量,以及公有雲的規模不斷擴大帶來的單位成本下降。 

那為什麼需要7年時間才能完成上雲遷移呢?這是因為全業務上雲是一項艱巨的工作,需要做好多的艱難決策。可以想到的是,最簡單的方式是將所有系統緣分不斷地搬到雲上,但是隨着系統一起搬過去的還有你在傳統數據中心中遇到的所有問題和限制。因此,Netflix選擇了一條另外的道路,重構所有系統,徹底改變公司IT運營方式,將單體應用改變為微服務架構應用、重構數據模型、使用NoSQL數據庫。將過去那種預算嚴格受控制、版本發布嚴格受管控、花幾周時間來做物理容量擴容的傳統方式,改變為持續集成和發布、技術團隊獨立做決策、基於松耦合DevOps環境的新方式。這種方式使得Netflix花了七年時間才完成上雲之旅,但是正是這種轉變,也使得它成為了一家國際化的網絡視頻服務提供商。 

五、筆者感受

 

大膽決策,開先河。不說10年前,就是在現在,要不要上(公有)雲、源代碼和核心數據能不能上雲、雲上安全怎麼搞、以什麼步驟上雲、應用要不要做架構升級等等這些問題,依然是評估上雲時會引發爭論的話題。而十年前的Netflix,從自身業務出發,做出了艱難決策,決定把資金用在核心業務上,將數據中心外包給公有雲,這前無來者,開了業界先河。要為他們的眼光、勇氣和決心點贊!

先易后難,保安全。Netflix並非倉促上陣,而是總體上執行先易后難、先驗證再推廣的策略。從最簡單的API、網頁前端、離線視頻編碼系統等開始,做技術可行性驗證。驗證成功后,再推廣至其它系統,最後做最核心的賬單和支付系統遷移,在保障業務穩定和用戶體驗的前提下,花了七年時間才完成全部遷移工作。要為他們的務實精神點贊!

以終為始,高標準。Netflix並沒有簡單地將其IT系統從其自有數據中心搬到AWS上,而是以終為始,高標準完成遷移工作。“終”是系統的可用性要達到四個九,確保用戶體驗。要實現這個目標,需要在遷移上雲前對應用做分佈式改造。只有這樣,才能充分利用雲的彈性和分佈式能力。而且,Netflix主要利用的是AWS的IaaS,自研了全球分佈的PaaS平台。一方面是因為當時AWS所提供的是以IaaS為主,還考慮到了供應商綁定以及未來多雲等可能。這些做法都具有開創性和前瞻性,不僅這種做法對後來更多用戶如何上雲極具參考價值,而且Netflix將其PaaS中很多組件都開源了,直接促進了行業發展。要為他們對自己的嚴格要求和對業界的貢獻點贊!

 

參考資料:

  • 復盤Netflix發展史:如何用20年成為一家千億美元公司?,克魯斯2018年5月14日。https://www.gelonghui.com/p/179693

  • Completing the Netflix Cloud Migration,https://media.netflix.com/en/company-blog/completing-the-netflix-cloud-migration,2016.1

  • YouTube video,Globally Distributed Cloud Applications at Netflix,October 2012,Adrian Cockcro

  • Migrating to Cloud – Lessons from Netflix, Brought Up to Date,Adrian Cockcroft,https://media.netflix.com/en/company-blog/completing-the-netflix-cloud-migration

  • Companies Slowly Join Cloud-Computing,By Brad Stone and Ashlee Vance,https://www.nytimes.com/2010/04/19/technology/19cloud.html

 

感謝您的閱讀,歡迎關注我的微信公眾號:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

【python系統學習16】編碼基礎知識_網頁設計公司

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

編碼

計算機是怎麼傳輸和存儲數據的?

就是把人類認識的中英文字、其他國家語言、数字甚至運算符等符號轉成二進制的0、1,並進行存儲和傳輸。

編碼

人類語言:中英文字、其他國家語言、数字甚至運算符等符號

計算機語言:二進制的0、1【沒錯,計算機只認識0和1】

編碼:將人類語言轉換為計算機語言。

除了0、1這些阿拉伯数字,像a、b、c這樣的52個字母(包括大小寫),還有一些常用的符號(例如*、#、@等)在計算機中存儲時也要使用二進制數來表示,而具體用哪些二進制數字錶示哪個符號,理論上每個人都可以有自己的一套規則(這就叫編碼規則,形成編碼錶)。

如果使用了不同的編碼規則,就會有計算機識別不了的情況,出現亂碼

進制

二進制、八進制、十六進制。

八進制和十六進制分別是二進制的3次方和4次方。方便和二進制之間非常直接的相互轉換

二進制

由0和1構成的

二進制 十進制
00 0
01 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
  • 二進制的00,代表十進制的0
  • 二進制的01,代表十進制的1
  • 二進制的10,代表十進制的2【笑話:世界上有10種人,懂二進制的和不懂二進制的】
  • 二進制的11,代表十進制的3
  • 二進制的100,代表十進制的4
  • 以此類推…
  • 當有兩位數時,我們可以表示0到3,共4種狀態,即2的平方
  • 當有三位數時,我們可以表示0到7,共8種狀態,即2的三次方
  • 當有八位數時,我們可以表示0到255,共256種狀態,即2的8次方

八進制

使用0、1、2、3、4、5、6、7組成的

十六進制

使用0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f組成的

ASCII編碼錶中的“K”

二進制 八進制 十進制 十六進制 字母
01001011 113 75 4B K

注意這裏還是大寫的字母K哦~

存儲單位

計算機里的存儲單位

位/比特(bit)

位:又叫比特(bit)是計算機里最小的存儲單位。用來存放一位二進制書,即0或1。

字節(byte)

八個比特是一個字節,是計算機里最常用的單位。簡寫“B”

千字節(Kilobyte)

兆字節(Megabyte)

簡稱“兆”

吉字節(Gigabyte)

又叫千兆

單位換算

1B(byte 字節) = 8bit
1KB(Kilobyte 千字節) = 1024B
1MB(Megabyte 兆字節) = 1024KB
1GB(Gigabyte) = 1024MB

為什麼辦的100兆的寬帶,撐死就只有10幾兆的下載速度?

因為運營商的帶寬是以比特每秒為單位的,比如100M就是100Mbit/s。

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

而我們常看到的下載速度KB卻是以字節每秒為單位显示的,1byte = 8bit,所以運營商說的帶寬得先除以8,你的百兆寬帶下載速度,也就是十幾兆了。

編碼錶

為了避免亂碼,人類就約定了一套共同的編碼規則。就像計算機世界的新華字典、牛津英語字典。

編碼錶歷史

ASCII

  • ASCII編碼(讀音:/ˈæski/),美國首先出台。統一規定了常用符號用哪些二進制數來表示。 因為英文字母、数字再加上其他常用符號,也就100來個,因此使用7個比特位(最多表示128位)就夠用了,所以一個字節中被剩下的那個比特位就被默認為0。

  • 但歐洲不光有英語,還有法語字母上的注音符。於是歐洲用了美國剩下的那個比特位,普遍使用一個全字節(8個比特位)進行編碼,最多可表示256位,至此,一個字節就用滿了!

ASCII統一了前面0-127位,但從狀態128到255這一段的解釋就完全亂套了,比如135在法語,希伯來語,俄語編碼中完全是不同的符號。

GB2312和GBK

  • 中國10萬漢字,256位也不夠用。於是一張新編碼錶
    GB2312被中國科學家發明了。 用2個字節,也就是16個比特位,來表示絕大部分(65535個)常用漢字。後來,為了能显示更多的中文,又出台了
    GBK標準。

Unicode

因各個國家的編碼錶都不同。不同國家間通信又會亂碼。

  • 於是
    Unicode(萬國碼)來統一。 這套編碼錶將世界上所有的符號都納入其中。每個符號都有一個獨一無二的編碼,現在Unicode可以容納100多萬個符號,所有語言都可以互通,一個網頁上也可以显示多國語言。

萬國碼的缺點是讓英文字符被迫佔用兩個字節,耗費計算機存儲空間。(如A:用00010001就行,但是為了順從統一,需要用兩個字節:00000000 00010001)

UTF-8

  • UTF-8(8-bit Unicode Transformation Format)被提出。針對Unicode的可變長度字符編碼。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度。而當字符在ASCII碼的範圍時,就用一個字節表示,所以UTF-8還可以兼容ASCII編碼。

Unicode與UTF-8這種曖昧的關係一言以蔽之:Unicode是內存編碼的規範,而UTF-8是如何保存和傳輸Unicode的手段。

編碼錶對比

編碼錶 適用性 特點
ASCII碼 英文大小寫,字符,不支持中文 美國人發明,佔用空間小,用一個字節就行
GB2312碼、GBK碼 支持中文 中國人發明,GBK是GB2312的升級,增加了更多原來沒有的文字字符
Unicode碼 支持國際語言,萬國碼 適用性強但佔用空間大。在ASCII碼前面補8個bit位就是Unicode碼
UTF-8碼 支持國際語言 Unicode的升級,兩者容易互相轉化。佔用空間小、適用性強。ASCII碼被UTF-8碼包含。

編碼方案使用情況表

編碼錶 當前使用情況 備註
ASCII碼
GB2312碼、GBK碼 中文的文件和中文網站,使用GBK、GB2312
Unicode碼 計算機內存中處理數據時使用的統一標準格式 Python3中,程序處理我們輸入的字符串使用Unicode編碼
UTF-8碼 數據在硬盤上存儲,或者網絡上傳輸時,用的UTF-8 因為節省空間。程序來轉換編碼。

基於上表,有時候面對不同編碼的數據,我們還需要手動操作實現編碼轉換。就要用到encode(編碼)decode(解碼)

編碼操作和解碼操作

編碼:encode()

語法:

'你想編碼的內容'.encode('你使用的編碼錶名稱')

用法:

print('一天打魚兩個月曬網的小石頭'.encode('utf-8'))
# b'\xe4\xb8\x80\xe5\xa4\xa9\xe6\x89\x93\xe9\xb1\xbc\xe4\xb8\xa4\xe4\xb8\xaa\xe6\x9c\x88\xe6\x99\x92\xe7\xbd\x91\xe7\x9a\x84\xe5\xb0\x8f\xe7\x9f\xb3\xe5\xa4\xb4'
print('I Love U'.encode('gbk'))
# b'I Love U'
print('小石頭'.encode('utf-8'))
# b'\xe5\xb0\x8f\xe7\x9f\xb3\xe5\xa4\xb4'

將上述人類語言編碼得到機器語言后的打印結果在註釋里。

字母b

這裏之所以有個字母b,代表他是bytes(字節)類型的數據。 可以用type()函數驗證一下:

print(type(b'\xe5\xb0\x8f\xe7\x9f\xb3\xe5\xa4\xb4')) # <class 'bytes'>

符號\x

另外,幾乎每個字母/数字前邊都有的\x,他的作用是分隔符,用來分隔一個字節和另一個字節。

這樣的分隔符,我們還見過:

<a href="https://www.baidu.com/s?wd=%e5%b0%8f%e7%9f%b3%e5%a4%b4" />

對比發現下邊兩段字符串,你有發現什麼奧妙么!:

%e5%b0%8f%e7%9f%b3%e5%a4%b4
\xe5\xb0\x8f\xe7\x9f\xb3\xe5\xa4\xb4

%\x一樣,都是一種分隔符。只不過%是url中的、\x是python中的

解碼:decode()

語法:

'你想解碼的內容'.encode('你使用的編碼錶名稱')

用法:

print(b'\xe5\xb0\x8f\xe7\x9f\xb3\xe5\xa4\xb4'.decode('UTF-8')) # 小石頭

::: warning 注意 你要解碼的內容得跟編碼時用的編碼錶一致。不然會報錯。 :::

也就是說,UTF-8編碼的字節就一定要用UTF-8的規則解碼,其他編碼同理,否則就會出現亂碼或者報錯的情況,

print(b'\xe5\xb0\x8f\xe7\x9f\xb3\xe5\xa4\xb4'.decode('GBK'))
# 把utf-8編碼的字符串用GBK來解碼,就報錯了。
# UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4 in position 8: incomplete multibyte sequence

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

圖解MySQL索引(二)—為什麼使用B+Tree_網頁設計

※推薦評價好的iphone維修中心

擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢

失蹤人口回歸,近期換工作一波三折,耽誤了不少時間,從今開始每周更新~

索引是一種支持快速查詢的數據結構,同時索引優化也是後端工程師的必會知識點。各個公司都有所謂的MySQL”軍規“,其實這些所謂的優化和規定,並不是什麼高深的技術,只是要求大家正確建立和使用索引而已。工欲善其事必先利其器,想要正確運用索引,需要了解其底層實現原理,本文將探索關於索引的“是什麼”以及”為什麼“。

MySQL中關於索引的概念有很多,為了避免混淆,在上一篇文章中關於索引在不同維度分類設計到的一些名詞進行了解釋,如輔助索引,唯一索引,覆蓋索引,B+Tree索引…., 牆裂建議不明白的小夥伴可以先去看看圖解MySQL索引(上)—聊聊索引的分類,本文中關於索引類型的各種定義不再複述。

一,磁盤IO問題

1.1 磁盤IO

所謂磁盤IO,簡單來講就是就是將磁盤中的數據讀取到內存或者是從內存寫入磁盤。在系統開發與設計過程中,磁盤IO的瓶頸往往不可忽略,因為這是一個相對比較耗時的操作。

上圖是一個机械硬盤,雖然速度不如SSD,但是由於價格低廉,目前仍是主流的存儲介質。它的IO操作通常需要尋道,旋轉和傳輸三個步驟。

尋道,是指將讀寫磁頭移動到正確的磁道,尋道時間越短,IO操作越快,目前磁盤的平均尋道時間一般在3-15ms左右。

旋轉,是指將盤片旋轉到請求數據所在的扇區,這部分所需要的時間由硬盤的配置所決定。旋轉延遲由磁盤轉速所決定,也就是常說的7200轉和5400轉等。

例如,7200轉是指每分鐘可以旋轉7200圈,那麼旋轉一圈所需要的時間就是60*1000/7200 ≈ 8.33ms,而旋轉延遲通常取旋轉一周時間的1/2,也就是大約4.17ms。

傳輸,磁盤傳輸的速度通常在幾十到上百M每秒,假設速度為20M/s,要傳輸的數據為64kb,則傳輸時間則是 64 / 1024 / 20 * 1000 = 3.125ms。不過目前流行的SSD傳輸速度大幅度提升,SATA Ⅱ可以達到300M/s,傳輸速度往往遠小於前兩步操作所以傳輸時間往往可以忽略不記。

机械硬盤的連續讀寫性能很好,但隨機讀寫性能很差,這主要是因為磁頭移動到正確的磁道上需要時間,隨機讀寫時,磁頭需要不停的移動,時間都浪費在了磁頭尋址上,所以性能不高。

上述過程是對傳統机械磁盤IO延遲的粗略介紹,目的是告訴大家磁盤IO過程是個耗時的過程,內存操作往往與之速度不在同一個數量級。即使是目前比較流行的SSD,想必內存中數據讀取性能也差之千里。

1.2 局部性原理

由於磁盤IO是一個比較耗時的操作,而操作系統在設計時則定義一個空間局部性原則,局部性原理是指CPU訪問存儲器時,無論是存取指令還是存取數據,所訪問的存儲單元都趨於聚集在一個較小的連續區域中

在操作系統的文件系統中,數據也是按照page劃分的,一般為4k或8k。當計算機訪問一個地址數據時,不僅會加載當前數據所在的數據頁,還會將當前數據頁相鄰的數據頁一同加載到內存。而這個過程實際上只發生了1次磁盤IO,這個理論對於索引的數據結構設計非常有幫助。

二,索引數據結構演進

索引是一種支持快速查找的數據結構,在運用中往往還要求能夠支持順序查詢,而常見的數據結構有很多,比如數組,鏈表,二叉樹,散列表,二叉搜索樹,平衡搜索二叉樹,紅黑樹,跳錶等。僅僅從數據結構那麼為什麼選擇B+Tree呢?

首先對於數組,鏈表這種線性表來說,適合存儲數據,而不是查找數據,同樣,對於普通二叉樹來說,數據存儲沒有特定規律,所以也不適合。

2.1 哈希索引不能滿足業務需求

哈希(Hash)是一種非常快的查找方法,在一般情況下這種查找的時間複雜度為O(1),即一般僅需要一次查找就能定位到數據。在各種編程語言和數據庫中應用廣泛,如Java,Python,Redis中都有使用。

哈希結構在單條數據的等值查詢是性能非常優秀,但是只能用來搜索等值的查詢, 對於範圍查詢,模糊查詢(最左前綴原則)都不支持,所以不能很好的支持業務需求;所以MySQL並沒有顯式支持Hash索引,而是根據數據的訪問頻次和模式自動的為熱點數據頁建立哈希索引,稱之為自適應哈希索引。

並且由於哈希函數的隨機性,Hash索引通常都是隨機的內存訪問,對於緩存不友好,會造成頻繁的磁盤IO。

2.2 二叉搜索樹退化成鏈表

二叉搜索樹,如果左子樹不為空,則左子樹上所有節點均小於根節點,右子樹節點均大於根節點;由其屬性不難看出,這種樹非常適合數據查找。不過有個致命的缺點是二叉搜索樹的樹型取決於數據的輸入順序,極端情況下會退化成鏈表。

2.3 平衡二叉搜索樹過於嚴格

為了解決上述問題,平衡二叉搜索樹就誕生了。在保證數據順序的基礎上,又能維持樹型,保證每個節點的左右子樹高度相差不超過1。

網頁設計最專業,超強功能平台可客製化

窩窩以「數位行銷」「品牌經營」「網站與應用程式」「印刷品設計」等四大主軸,為每一位客戶客製建立行銷脈絡及洞燭市場先機。

不過由於要維持樹的平衡,在插入數據時可能要進行大量的數據移動。平衡搜索二叉樹過於嚴格的平衡要求,導致幾乎每次插入和刪除節點都會破壞樹的平衡性,使得樹的性能大打折扣。

2.4 紅黑樹高度過高,磁盤IO次數頻繁

有沒有一種數據結構,即能夠快速查找數據,又不需要頻繁的調整以維持平衡呢?這時紅黑樹就閃亮登場了。

紅黑樹和其他二叉搜索樹類似, 都是在進行插入和刪除操作時通過特定操作保持二叉查找樹的性質,從而獲得較高的查找性能。與之不同的是,紅黑樹的平衡性並不像平衡搜索二叉樹一樣嚴格的同時,又能保證在, O(log n) 時間複雜度內做查找和刪除。

紅黑樹通過改變節點的顏色,可以有效減少節點的移動次數,由於紅黑樹的實現比較複雜,本文不再展開,感興趣的小夥伴可以去深入學習。

看似紅黑樹是一種完美的數據結構,能夠勝任索引的工作。但MySQL並未使用其作為索引的實現,主要原因在於紅黑樹的深度過大,數據檢索時造成磁盤IO頻繁,假設一個每個節點存儲在一個page中,樹的高度為10,則每次檢索可能就需要進行10次磁盤IO。

2.5 B-Tree不支持順序查詢

B-Tree是一種自平衡的多叉搜索樹,一個節點可以擁有兩個以上的子節點。適合讀寫相對大的數據塊的存儲系統,例如磁盤。

由於MySQL索引一般都存儲在內存中,如果使用B-Tree作為索引的話,索引和數據存儲在一塊,分佈在各個節點中;而內存資源往往比較寶貴,一定內存的情況下可以存儲的索引數量相對有限,畢竟每條數據的大小一般遠大於索引列的大小,導致內存使用率不高。

數據查詢過程中往往會有順序查詢,而B-Tree和紅黑樹對於順序查詢並不友好

2.6 為什麼選B+Tree

B+Tree是在B-Tree基礎上演進而來的。與之不同的是B+Tree的數據頁只存儲在恭弘=叶 恭弘子節點中,並且恭弘=叶 恭弘子節點之間通過指針相連,為雙向鏈表結構。

B+Tree的優點可以分為以四個:

  1. 充分利用空間局部性原理,適合磁盤存儲。

  2. 樹的高度很低,能夠在存儲大量數據情況下,進行較少的磁盤IO【見下文介紹】。

  3. 能夠很好支持單值,範圍查詢,有序性查詢。

  4. 索引和數據分開存儲,讓更多的索引存儲在內存中。

三,MySQL中索引實現

3.1 巧妙利用B+Tree

MySQL中的數據存儲通常以Page為單位,俗稱數據頁,每個Page對應B+Tree的一個節點。頁是InnoDB磁盤管理的最小單位,默認每個數據頁的大小為16kb,也可以通過參數innodb_page_size將頁的大小設置成其他值。

數據庫的頁大小和操作系統類似,是指存放數據時,每一塊連續區域數據的大小。比如一個1M的數據存放在數據庫中時, 需要大概64個頁來存放(1024=64*16)。如果是在操作系統上安裝的數據庫,最好將數據庫頁大小設置為操作系統頁大小的倍數,才是最佳設置。

3.2 樹的高度-有效減少磁盤IO次數

通常情況下,一張MySQL表中有成千上萬條數據,而磁盤IO次數往往與數的高度成正比。默認情況下一個Page的大小為16kb,由於每個Page中數據通過指針相連,且每個指針大小為6字節。

在工作中,我們通常使用長度為8個字節的bigint類型作為主鍵id的類型。已知,每一條數據都會包含一個6字節的指針(數據頁中每條記錄都有指向下一條記錄的指針,但是沒有指向上一條記錄的指針);所以一條索引數據大約佔用8+6=14個字節,一個Page中能存儲16 * 1024 / 14 ≈ 1170條索引數據。高度為2的B+Tree大約能存儲1170*16 = 18720條這樣的記錄。同理,高度為3的B+Tree的B+Tree大約能存儲1170 * 1170 * 16 = 21902400,大約兩千萬條數據。 (每個節點大約能存儲1170條記錄,可以理解為此時B+Tree為1170叉樹)

例如,要檢索id=008的數據,則需要進行三次磁盤IO找到對應的數據頁(最多三次,因為Page可能在緩存中),然後在數據頁中進行二分查找,定位到對應的記錄。

四,總結

大家耳熟能詳的B+Tree索引是一種非常優秀的數據結構,也是面試熱點問題。本文從數據結構和磁盤IO兩個方面分析了為什麼使用B+Tree,以及MySQL的InnoDB存儲引擎的索引實現。在筆者面試過程中,被問到MySQL索引時通常也是從底層數據結構特點以及結合磁盤IO兩個角度去分析,屢試不爽。

學習一門技術時,我們不僅要知道其優點更要了解其缺點和瓶頸。在分析MySQL索引的實現時,不妨試試從其他數據結構的缺點入手!在Redis中使用跳錶實現了有序集合Zset,同樣支持高效的順序查詢,對比MySQL索引實現,跳錶能否替換B+Tree?如果不行,是因為什麼呢?

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

台北網頁設計公司這麼多該如何選擇?

網動是一群專業、熱情、向前行的工作團隊,我們擁有靈活的組織與溝通的能力,能傾聽客戶聲音,激發創意的火花,呈現完美的作品

圖解大頂堆的構建、排序過程_貨運

※回頭車貨運收費標準

宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念

這两天在複習大頂堆和小頂堆,比起兩年前的懵懵懂懂,這次理解起來就容易了一些。又翻看了一下自己之前的筆記數據結構與算法之PHP排序算法(堆排序),發現自己這次查閱資料,和之前的思路不太一樣,遂寫下這篇筆記,算是和以前的筆記做一個對照。

一、什麼是堆

堆是一種非線性結構,可以把堆看作一棵二叉樹,也可以看作一個數組,即:堆就是利用完全二叉樹的結構來維護的一維數組

堆可以分為大頂堆和小頂堆。
大頂堆:每個結點的值都大於或等於其左右孩子結點的值。
小頂堆:每個結點的值都小於或等於其左右孩子結點的值。

如果是排序,求升序用大頂堆,求降序用小頂堆。

一般我們說 topK 問題,就可以用大頂堆或小頂堆來實現,
最大的 K 個:小頂堆
最小的 K 個:大頂堆

二、大頂堆的構建過程

大頂堆的構建過程就是從最後一個非恭弘=叶 恭弘子結點開始從下往上調整。

※評比南投搬家公司費用收費行情懶人包大公開

搬家價格與搬家費用透明合理,不亂收費。本公司提供下列三種搬家計費方案,由資深專業組長到府估價,替客戶量身規劃選擇最經濟節省的計費方式

最後一個非恭弘=叶 恭弘子節點怎麼找?這裏我們用數組表示待排序序列,則最後一個非恭弘=叶 恭弘子結點的位置是:數組長度/2-1。假如數組長度為9,則最後一個非恭弘=叶 恭弘子結點位置是 9/2-1=3。

比較當前結點的值和左子樹的值,如果當前節點小於左子樹的值,就交換當前節點和左子樹;
交換完后要檢查左子樹是否滿足大頂堆的性質,不滿足則重新調整子樹結構;

再比較當前結點的值和右子樹的值,如果當前節點小於右子樹的值,就交換當前節點和右子樹;
交換完后要檢查右子樹是否滿足大頂堆的性質,不滿足則重新調整子樹結構;

無需交換調整的時候,則大頂堆構建完成。

畫個圖理解下,以 [3, 7, 16, 10, 21, 23] 為例:

代碼如下:

<?php
/**
 * 構建大頂堆
 * 大頂堆的性質:每個結點的值都大於或等於其左右子結點的值。
 */
function buildBigHeap(&$arr, $len) {
    for ($i = floor($len/2) - 1; $i >= 0; $i--) {
        //根節點小於左子樹
        if (2 * $i + 1 < $len && $arr[$i] < $arr[2 * $i + 1]) {
            //交換根節點和左子樹的值
            swap($arr, $i, 2 * $i + 1);
            // $temp = $arr[$i];
            // $arr[$i] = $arr[2 * $i + 1];
            // $arr[2 * $i + 1] = $temp;
            //檢查左子樹是否滿足大頂堆的性質,如果不滿足,則重新調整
            if ((2 * (2 * $i + 1) + 1 < $len && $arr[2 * $i + 1] < $arr[2 * (2 * $i + 1) + 1])
            || (2 * (2 * $i + 1) + 2 < $len && $arr[2 * $i + 1] < $arr[2 * (2 * $i + 1) + 2])) {
                buildBigHeap($arr, $len);
            }
        }
        //根節點小於右子樹
        if (2 * $i + 2 < $len && $arr[$i] < $arr[2 * $i + 2]) {
            //交換根節點和右子樹的值
            swap($arr, $i, 2 * $i + 2);
            // $temp = $arr[$i];
            // $arr[$i] = $arr[2 * $i + 2];
            // $arr[2 * $i + 2] = $temp;
            //檢查右子樹是否滿足大頂堆的性質,如果不滿足,則重新調整
            if ((2 * (2 * $i + 2) + 1 < $len && $arr[2 * $i + 2] < $arr[2 * (2 * $i + 2) + 1])
            || (2 * (2 * $i + 2) + 2 < $len && $arr[2 * $i + 2] < $arr[2 * (2 * $i + 2) + 2])) {
                buildBigHeap($arr, $len);
            }
        }
    }
}

/**
 * 交換兩個值
 * m n 為數組的下標
 */
function swap(&$arr, $m, $n) {
    $temp = $arr[$m];
    $arr[$m] = $arr[$n];
    $arr[$n] = $temp;
}

三、大頂堆的排序過程

將待排序序列構造成一個大頂堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n-1個元素重新構造成一個堆,這樣會得到n個元素的次小值,如此反覆執行,便能得到一個有序序列了。

是不是對上面這一大段文字很頭疼?其實排序過程用下面 4 步就能概括:
第 1 步:先 n 個元素的無序序列,構建成大頂堆
第 2 步:將根節點與最後一個元素交換位置,(將最大元素”沉”到數組末端)
第 3 步:交換過後可能不再滿足大頂堆的條件,所以需要將剩下的 n-1 個元素重新構建成大頂堆
第 4 步:重複第 2 步、第 3 步直到整個數組排序完成。

/**
 * 交換交換根節點和數組末尾元素的值
 */
function adjustHeap(&$heap, $len) {
    $temp = $heap[0];
    $heap[0] = $heap[$len - 1];
    $heap[$len - 1] = $temp;
}
/**
 * 堆排序
 */
function heapSort(&$arr) {
    $len = count($arr);
    for ($i = $len; $i > 0; $i--) {
        buildBigHeap($arr, $i);
        adjustHeap($arr, $i);
    }
}

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※智慧手機時代的來臨,RWD網頁設計為架站首選

網動結合了許多網際網路業界的菁英共同研發簡單易操作的架站工具,及時性的更新,為客戶創造出更多的網路商機。

品讀迭部_網頁設計公司

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

初到迭部,就被這優美的景緻深深地迷住了。

這是一片被自然格外眷顧的土地,森林密布,群峰逶迤高聳,有的雄奇峻偉,有的博大秀美,河谷深切幽長。這裏像是一塊世外桃源,偶爾遇見幾個村民,遠遠地露出燦爛的笑容,熱情地沖我們招手。

在蜿蜒卻平坦的山路上行駛,一路山環路轉,天高雲清,蒼莽的大山如屏似劍,層層疊疊,間或有幾處村落,如珠落玉盤般點綴其間。在一處叫日爾那的村莊,我們發現這村子的每一道門、每一扇窗都蘊藉着厚重的傳統,同時又不乏現代文明的對接。這個村支部書記的弟媳竟是英國人,兒媳是著名的歌唱家,他們的家庭布置,保留着藏民的一切傳統,而家用電器也樣樣齊備。

多年來,各地的古街道、古建築不斷快速消失,幸好,迭部還保留着這些古老的農家小院。曾經看到一篇文章,提到西方不少的現代化富國,卻把“落後”村鎮的歷史文化遺產保護得極好,使之成為他們炫耀於世人的國寶。一個國家的現代與文明和歷史文化遺產有着千絲萬縷的聯繫,誰懂得這一點,誰就擁有了古今互動的輝煌。想必迭部已滲透了這些道理,所以才有如此和諧的景緻。

1935年9月13日-15日,中國工農紅軍長征途經現旺藏鄉政府駐地東南側茨日那村,毛澤東曾居住在該村一幢木樓上,並在這裏向紅四團下達了“以三天的行程奪取臘子口”的命令。在這個與中國革命歷史密切相關的小村莊的河邊,有兩棵大樹,據說紅四團曾在樹底下召開會議。如今,其中一棵經不起歲月的風霜轟然倒地,橫跨在河上,形成一座自然的“獨木橋”,另一顆仍筆直地矗立,見證歷史。

臘子口系藏語之轉音,意為“險絕的山道峽口”,是迭部通往漢族地區的門戶和重要交通孔道。臘子口周圍群山聳立,峽口如刀劈斧削,臘子口河從峽口奔涌而出。沿着盤山公路一路前行,迷濛的細雨不知何時悄然灑落,雨林里的生命籠罩着一層層神秘的面紗。動物都悄無聲息,大多數生物躲藏在豐盛茂密而又綠意盎然的植物簾幕後面,隱秘而又安靜地生活着。

漫步於臘子口的山谷棧道,山崖的石壁上鋪滿苔蘚,一股山泉從茂密的森林深處湧出,經過這石壁時,像不忍攪擾這寂靜的山林,輕輕地放慢了腳步,柔緩地漫過來,在山腳下匯成溪流,又流向山底。空山不見人,我們卻在密林深處看到了一個裝滿了野菜的竹筐,同行的一個人上前背起竹筐,不想試了幾回,這個壯年小伙卻被壓得站不起來。山民天天如此負重,讓我們不由地對他們的隱忍與堅強心生敬意。

“天險臘子口”是舉世聞名的臘子口戰役紀念地。1935年9月,毛澤東、周恩來率領中國工農紅軍第一方面軍,越過雪山草地后,全面攻克臘子口天險,使國民黨企圖阻擋紅軍北上抗日的陰謀徹底破產。1980年,甘肅省人民政府在臘子口戰役紀念地修建了紀念碑,紀念碑南、西兩面鐫刻着楊成武將軍親筆題字“臘子口戰役紀念碑”;北面鐫刻着省人民政府對臘子口戰役的簡介和對革命烈士仰慕緬懷之碑文:“臘子口戰役的輝煌勝利將永遠彪炳我國革命史冊;在臘子口戰役中光榮犧牲的革命烈士永垂不朽!”

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

山腳下,一座座小木屋在雨幕中安靜地佇立着,周圍茂盛的植物以及盛開的花朵毫無保留地張揚着她們的美麗。歷史成為永久的過去,卻可以激勵我們珍惜今天的所有。

迭部的美是一種整體性的空間美,一種生活意境美,一種文化山水美。它與我們的心靈如此貼近,以至於所有的偶遇都彷彿是早有默契。山、水、森林、動物和轉經的風車,此時此地都成為這風景的一部分。時常會經過一片片草場,悠閑的馬和牛點綴在林木蓊鬱、堆翠疊綠之中,如此和諧美妙。

一路上,叫貢保的小伙子陪伴我們,他笑聲爽朗,為我們的行程增添了不少樂趣。貢保的解說下了功夫,他的解說是根據自己的體驗和理解對迭部做出的解讀。這樣的解說,是獨一份的帶着鮮活體驗的、獨屬於貢保的解說。

言談中貢保不經意透露出憂慮,他提醒說,過去植被比現在茂密得多,現在我們看到的已經是被破壞過的植被,我不知道將來會有怎樣的後果。

一個導遊能有如此的悲憫情懷,“先天下之憂而憂”,我不由地對他的經歷產生好奇。他很爽快地告訴我,在蘭州上了幾年大學,畢業后又當導遊。但是父母希望他回到家鄉,他便依依不舍地告別蘭州,回到迭部,當上了小學語文老師。這幾天當導遊,是縣裡通知他得“重操舊業”幾天。他有一個美好的願望,希望能開辦一個旅遊公司,通過旅遊去保護迭部的生態環境。

正是因為這些可敬可愛的迭部人,才使我們深切地感受到自然的眷顧以及人文的關懷,他們以各自不同的表達方式對土地、自然、家園做最高形式的致敬,使我們回歸一種悠久的傳統中。

據說“迭部”藏語意為“大拇指”。傳說在古代,有一位名叫涅甘達娃的神仙路過此地,被密密匝匝的山石擋住了去路。他伸出大拇指輕輕一摁,頓時,山石開裂,驚天動地,顯露出一條長長的通道來。這個美麗的神話傳說,聽起來卻是如此貼切,因為不論是這裏的景緻還是勤勞善良的人民,都一樣令我們由衷地豎起“大拇指”。

本版圖片除署名外均來自網絡

本站聲明:網站內容來http://www.societynews.cn/html/wh/fq/,如有侵權,請聯繫我們,我們將及時處理

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

文化澳門 風景正好_網頁設計公司

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

演員在澳門大三巴牌坊前進行澳門國際青年舞蹈節巡遊表演。
  新華社記者 張金加攝

澳門是一座文化城市,歷史和文化是澳門的財富。幾百年來,中西文化的交流與嬗變,賦予澳門獨特的文化魅力。

回歸祖國后,得益於“一國兩制”安排,澳門多元文化碰撞融合,交相輝映,來自世界各地的人在此和諧共處。在中央的支持下,澳門充分發揮自身優勢,助力國際人文交流,促進世界文明互鑒。

中西世界的萬花筒

“我們常說澳門有3張名片:一是2005年,澳門歷史城區被列入《世界遺產名錄》,成為中國第31個世界文化遺產;二是2017年,聯合國教科文組織授予澳門‘創意城市·美食之都’稱號;三是澳門多彩的非物質文化遺產,澳門的文化便蘊含在這些珍貴的文化遺產中。” 澳門特區政府文化局局長穆欣欣介紹,澳門是中西文化交融之地,擁有得天獨厚的歷史文化優勢。

“漫步在澳門的大街小巷,原汁原味的中西建築隨處可見,許多擁有幾百年歷史。穿梭其中,滄桑的歷史和鮮活的生命力共存,這種感覺很奇妙。”在北京工作的閆先生告訴記者,他去過澳門4次,最大的感受是,澳門城市雖小卻包羅萬象,古今中外各種元素在這小小的萬花筒里,組合出了各種風景。

媽閣廟、觀音堂、蓮峰廟等中式廟宇飽含古老中華神韻,給人以歷史的厚重感;澳門市政廳廣場等西式建築則色彩明快,熱情洋溢,風情萬種,讓人彷彿置身南歐小城。來自印度、巴基斯坦、葡萄牙、莫桑比克等世界各地的人生活於此,多元開放的文化讓他們過得愜意自然。

“你可以在澳門的超市買到葡萄牙各式各樣的食物,我常去的那家超市的老闆還會講葡語。”澳門大學的葡萄牙語教授萊昂諾爾·塞亞布拉已經在澳門待了32個年頭,她的兒子在澳門出生長大,畢業后也選擇了在澳門工作生活。

澳門藝術節、音樂節、國際龍舟賽、格蘭披治大賽車……這些承載着澳門歷史文化的活動,每年吸引數不勝數的遊客到訪並參与其中,向世界展示着澳門的獨特魅力。

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

既要傳承也要創新

雖說是中西文化交融,但中華文化一直是澳門的主流。“西方文化影響主要體現在建築風格、多元飲食、習俗外貌等表層,澳門人思維、觀念的中庸尚和、忠孝禮義,依然來自中華文化,它才是支撐澳門文化的基石與主流。”全國政協委員、澳門地產業總商會會長鍾小健這樣定義澳門的文化特性。

澳門有“澳門神像雕刻”“澳門哪吒信俗項目”“澳門道教科儀音樂”“澳門媽祖信俗項目”“粵劇”“南音說唱”“魚行醉龍節”和“涼茶製作技藝”等8項非物質文化遺產入選國家級名錄,它們是澳門對中華民族傳統文化傳承與弘揚的重要見證。“保護好它們是我們的使命。在保護的前提下,我們做文化推廣,促進文化的傳承和創新。”穆欣欣說,近年來,澳門不僅每年舉行文化遺產嘉年華,而且從2010年開始,着手將一些文物建築活化,如恭弘=叶 恭弘挺將軍故居、孫中山在澳門行醫的中西藥局舊址、冼星海紀念館等。這些展館連同林則徐紀念館、鄭家大屋等,一同訴說著澳門與中華歷史文化的血脈連接。

回歸祖國后,澳門與內地的頻繁交流,為文化澳門注入更新元素。澳門藝術博物館和故宮博物院連續20年合辦的故宮專題文物特展,成為澳門人文化生活的重要部分。據文化和旅遊部副部長張旭介紹,黨的十八大以來,內地與澳門互派優秀藝術團體和藝術家,積极參加各自舉辦的區域性、國際性文化活動,項目年均交流量達180項,交流人數近3000人次,2018年較2012年交流項目增長10%,交流人數增長30%,不僅豐富當地民眾文化生活,更為自身文化發展注入活力。

着力建設“人文灣區”

炫目的色彩、特色的服裝、精彩的表演、多元的文化,這是日前剛剛結束的2019澳門國際幻彩大巡遊帶給觀眾的感受。澳門開埠400多年,文化開放而包容。在這裏,你可以聽到教堂的鐘聲與寺廟的鐘鼓聲此起彼伏,也可以看到耶穌聖像出遊活動與媽祖誕辰的祭拜活動同時進行。春節、中秋節等中國的傳統節日,慶祝活動十分隆重;聖誕節、復活節等西方節日,活動氛圍也頗有聲勢。

因此,澳門注重利用其文化特色來推動東西方文化交流。“澳門的藝文活動都着重突出多元融合的文化特徵,推動不同民族、不同國家之間的互動互鑒,溝通心靈,融合情感。” 澳門婦女聯合總會會長賀定一表示。

正是得益於多元文化的共融,今年出台的《粵港澳大灣區發展規劃綱要》明確將“建設以中華文化為主流、多元文化共存的交流合作基地”作為澳門的發展定位之一。這讓澳門文化界人士備感振奮,既是對澳門歷史上文化功能的肯定,更賦予澳門文化發展新的使命和機遇,讓更多人有機會一睹“文化澳門”風采。

“一直以來,澳門文化局致力於粵港澳共同推進中華優秀傳統文化傳承與發展,發揮三地地域相近、文脈相親的優勢,合作舉辦各類文化遺產展覽、展演活動,大力支持弘揚以粵劇、龍舟、武術、醒獅等為代表的嶺南文化,彰顯獨特文化魅力。”穆欣欣表示,此外,文化局還致力於推進澳門與葡語國家的文化合作,已經連續兩年成功舉辦“相約澳門——中葡文化藝術節”。隨着粵港澳大灣區建設的不斷深化和加強,澳門正逐漸把中葡文化交流成果帶進“人文灣區”的建設之中,進行融合和互補。

本站聲明:網站內容來http://www.societynews.cn/html/wh/fq/,如有侵權,請聯繫我們,我們將及時處理

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌