กลับไปหน้าบทความ

อ่าน 9 นาที

การดำเนินการสตริง

ใน วิทยาการคอมพิวเตอร์ ในสาขา ทฤษฎีภาษาเชิงรูปธรรม มีการใช้ ฟังก์ชันสตริง หลากหลายประเภทอย่างแพร่หลายอย่างไรก็ตาม สัญลักษณ์ที่ใช้แตกต่างจากที่ใช้ใน การเขียนโปรแกรมคอมพิวเตอร์...

การดำเนินการสตริง

ในวิทยาการคอมพิวเตอร์ในสาขาทฤษฎีภาษาเชิงรูปธรรม มีการใช้ ฟังก์ชันสตริงหลากหลายประเภทอย่างแพร่หลายอย่างไรก็ตาม สัญลักษณ์ที่ใช้แตกต่างจากที่ใช้ในการเขียนโปรแกรมคอมพิวเตอร์และฟังก์ชันบางอย่างที่ใช้กันทั่วไปในเชิงทฤษฎีนั้นแทบจะไม่ถูกนำมาใช้ในการเขียนโปรแกรม บทความนี้จะอธิบายความหมายของคำศัพท์พื้นฐานเหล่านี้

สตริงและภาษา

สตริงคือลำดับของอักขระที่จำกัดสตริงว่างใช้สัญลักษณ์`null` แทน การต่อสตริงสองสตริงเข้า ด้วยกัน ใช้สัญลักษณ์`concatenation` หรือแบบย่อคือ`concatenation` การต่อสตริงกับสตริงว่างไม่มีผลแตกต่างกัน: `concatenation` การต่อสตริงมีคุณสมบัติการสลับที่ได้ : ` concatenation`

ตัวอย่างเช่น, .

ภาษาคือเซตของสตริงที่มีจำนวนจำกัดหรืออนันต์ นอกเหนือจากการดำเนินการเซตทั่วไป เช่น การรวม การตัดกัน ฯลฯ แล้ว การต่อสตริงยังสามารถนำไปใช้กับภาษาได้: ถ้าทั้งและเป็นภาษา การต่อสตริงของทั้งสองภาษาจะถูกกำหนดให้เป็นเซตของการต่อสตริงใดๆ จากและสตริงใดๆ จากในรูปแบบที่เป็นทางการคือโดยที่จุดแสดงการต่อสตริงมักจะถูกละเว้นเพื่อความกระชับ

ภาษาที่ประกอบด้วยสตริงว่างเปล่าเพียงอย่างเดียวจะแตกต่างจากภาษาว่างเปล่าการนำภาษาใดๆ มาต่อกับภาษาแรกจะไม่ทำให้เกิดการเปลี่ยนแปลงใดๆในขณะที่การต่อกับภาษาหลังจะให้ผลลัพธ์เป็นภาษาว่างเปล่าเสมอการต่อภาษาต่างๆ มีคุณสมบัติการสลับที่ได้

ตัวอย่างเช่น การย่อ จะได้เซตของจำนวนทศนิยมสามหลักทั้งหมดเป็นเซตของจำนวนทศนิยมทั้งหมดที่มีความยาวไม่จำกัดเป็นตัวอย่างหนึ่งของภาษาอนันต์

ตัวอักษรของสตริง

ตัวอักษรของสตริงคือเซตของอักขระทั้งหมดที่ปรากฏในสตริงนั้นๆ ถ้าsเป็นสตริงตัวอักษร ของสตริงนั้น จะถูกแทนด้วย

อักษรของภาษา คือเซตของอักขระทั้งหมดที่ปรากฏในสตริงใดๆ ก็ตาม โดยมีรูปแบบอย่างเป็นทางการคือ :

ตัวอย่างเช่น เซตนี้คือตัวอักษรของสตริงและข้างต้นคือตัวอักษรของภาษาข้างต้นรวมถึงตัวอักษรของภาษาของจำนวนทศนิยมทั้งหมดด้วย

การแทนที่สตริง

ให้Lเป็นภาษาและให้ Σ เป็นตัวอักษรของภาษานั้นการแทนที่สตริงหรือเรียกง่ายๆ ว่าการแทนที่คือฟังก์ชันfที่แปลงอักขระใน Σ ไปยังภาษาต่างๆ (ซึ่งอาจมีตัวอักษรที่แตกต่างกัน) ตัวอย่างเช่น เมื่อกำหนดอักขระa ∈ Σ จะได้f ( a ) = L <sub>a</sub>โดยที่L <sub>a </sub> ⊆ Δ *คือภาษาที่มีตัวอักษรเป็น Δ ฟังก์ชันนี้สามารถขยายไปยังสตริงได้ดังนี้

f (ε)=ε

สำหรับสตริงว่าง ε และ

f ( sa )= f ( s ) f ( a )

สำหรับสตริงsLและอักขระa ∈ Σ การแทนที่สตริงอาจขยายไปยังภาษาทั้งหมดได้ดัง[ 1 ]

ภาษาปกติปิดภายใต้การแทนที่สตริง กล่าวคือ หากอักขระแต่ละตัวในอักษรของภาษาปกติถูกแทนที่ด้วยภาษาปกติอื่น ผลลัพธ์ก็ยังคงเป็นภาษาปกติ[ 2 ] ในทำนองเดียวกันภาษาไร้บริบทก็ปิดภายใต้การแทนที่สตริง[ 3 ] [หมายเหตุ 1 ]

ตัวอย่างง่ายๆ คือการแปลงf uc (.) เป็นตัวพิมพ์ใหญ่ ซึ่งอาจกำหนดได้ดังนี้:

อักขระเชื่อมโยงกับภาษาหมายเหตุ
xf uc ( x )
a{ ‹ A › }แปลงตัวอักษรพิมพ์เล็กเป็นตัวอักษรพิมพ์ใหญ่ที่สอดคล้องกัน
A{ ‹ A › }แมปอักขระตัวพิมพ์ใหญ่กับตัวมันเอง
ß{ ‹ SS › }ไม่มีตัวอักษรพิมพ์ใหญ่ ให้แปลงเป็นสตริงสองตัวอักษร
‹0›{ ε }แปลงตัวเลขเป็นสตริงว่าง
‹!›{ }ห้ามใช้เครื่องหมายวรรคตอน แปลงเป็นภาษาว่างเปล่า
...เช่นเดียวกันสำหรับตัวอักษรอื่นๆ

สำหรับการขยายฟังก์ชันf ucไปยังสตริง เรามีตัวอย่างเช่น

  • f uc (‹Straße›) = {‹S›} ⋅ {‹T›} ⋅ {‹R›} ⋅ {‹A›} ⋅ {‹SS›} ⋅ {‹E›} = {‹STRASSE›},
  • f uc (‹u2›) = {‹U›} ⋅ {ε} = {‹U›} และ
  • f uc (‹Go!›) = {‹G›} ⋅ {‹O›} ⋅ {} = {}.

สำหรับการขยายf ucไปสู่ภาษาต่างๆ เรามีตัวอย่างเช่น

  • f uc ({ ‹Straße›, ‹u2›, ‹Go!› }) = { ‹STRASSE› } ∪ { ‹U› } ∪ { } = { ‹STRASSE›, ‹U› }

โฮโมมอร์ฟิซึมของสตริง

โฮโมมอร์ฟิซึมของสตริง (มักเรียกง่ายๆ ว่าโฮโมมอร์ฟิซึมในทฤษฎีภาษาเชิงรูปธรรม ) คือการแทนที่สตริงโดยที่อักขระแต่ละตัวจะถูกแทนที่ด้วยสตริงเดียว นั่นคือโดยที่เป็นสตริง สำหรับแต่ละอักขระ[ หมายเหตุ2 ] [ 4 ]

โฮโมมอร์ฟิซึมของสตริงคือมอร์ฟิซึมของโมโนอิดบนโมโนอิดอิสระซึ่งรักษาคุณสมบัติของสตริงว่างและการดำเนินการทวิภาคของการต่อสตริงไว้ เมื่อกำหนดภาษาเซตเรียกว่าภาพโฮโมมอร์ฟิกของภาพโฮโมมอร์ฟิกผกผันของสตริงถูกกำหนดเป็น

ในขณะที่ภาพโฮโมมอร์ฟิกผกผันของภาษาถูกนิยามว่า

โดยทั่วไปแล้วในขณะที่คนหนึ่งมี

และ

สำหรับทุกภาษา

กลุ่มภาษาปกติปิดภายใต้โฮโมมอร์ฟิซึมและโฮโมมอร์ฟิซึมผกผัน[ 5 ] ในทำนองเดียวกัน ภาษาอิสระบริบทปิดภายใต้โฮโมมอร์ฟิซึม[หมายเหตุ 3 ]และโฮโมมอร์ฟิซึมผกผัน[ 6 ]

กล่าวได้ว่าโฮโมมอร์ฟิซึมของสตริงนั้นปราศจาก ε (หรือปราศจาก e) ถ้าสำหรับทุกaในตัวอักษรตัวอย่างของโฮโมมอร์ฟิซึมของสตริงที่ปราศจาก ε คือ การเข้ารหัสแบบแทนที่ตัวอักษรเดี่ยวอย่างง่าย

ตัวอย่างโฮโมมอร์ฟิซึมของสตริงg ucสามารถหาได้โดยการกำหนดคล้ายกับ การแทนที่ ข้างต้น : g uc (‹a›) = ‹A›, ..., g uc (‹0›) = ε แต่ให้g ucไม่ถูกกำหนดบนอักขระเครื่องหมายวรรคตอน ตัวอย่างของภาพโฮโมมอร์ฟิกผกผันมีดังนี้

  • g uc −1 ({ ‹SSS› }) = { ‹sss›, ‹sß›, ‹ßs› } เนื่องจากg uc (‹sss›) = g uc (‹sß›) = g uc (‹ßs›) = ‹SSS› และ
  • g uc −1 ({ ‹A›, ‹bb› }) = { ‹a› } เนื่องจากg uc (‹a›) = ‹A› ในขณะที่ ‹bb› ไม่สามารถเข้าถึงได้โดยg uc

สำหรับภาษาหลังg uc ( g uc −1 ({ ‹A›, ‹bb› })) = g uc ({ ‹a› }) = { ‹A› } ≠ { ‹A›, ‹bb› } โฮโมมอร์ฟิซึมg ucไม่ใช่ ε-free เนื่องจากมันแมป eg ‹0› ไปยัง ε

ตัวอย่างง่ายๆ ของการแปลงสตริงแบบโฮโมมอร์ฟิซึม ซึ่งแมปแต่ละอักขระไปยังอักขระอีกตัวหนึ่ง คือ การแปลงสตริง ที่เข้ารหัสแบบ EBCDICไปเป็นASCII

การฉายภาพสตริง

ถ้าsเป็นสตริง และเป็นตัวอักษรการฉายภาพสตริงของsคือสตริงที่ได้จากการลบตัวอักษรทั้งหมดที่ไม่อยู่ใน ออกไปเขียนได้เป็น โดยนิยามอย่างเป็นทางการคือการลบตัวอักษร ออกจากด้านขวามือ:

ในที่นี้หมายถึงสตริงว่างการฉายภาพของสตริงนั้นโดยพื้นฐานแล้วเหมือนกับการฉายภาพในพีชคณิตเชิงสัมพันธ์

การฉายภาพของสตริงอาจถูกยกระดับเป็นการฉายภาพของภาษาเมื่อกำหนดภาษาเชิงรูปธรรมLการฉายภาพของภาษานั้นจะกำหนดโดย

ผลหารซ้ายขวา

ผลหารทางขวาของอักขระaจากสตริงsคือการตัดอักขระaในสตริงsจากด้านขวา โดยใช้สัญลักษณ์ถ้าสตริงไม่มีอักขระ aอยู่ทางด้านขวา ผลลัพธ์จะเป็นสตริงว่าง ดังนั้น:

สามารถหาผลหารของสตริงว่างได้ดังนี้:

ในทำนองเดียวกัน เมื่อกำหนดเซตย่อยของโมโนอิดแล้ว เราสามารถกำหนดเซตย่อยผลหารได้ดังนี้

สามารถนิยาม ผลหารทางซ้ายได้ในลักษณะเดียวกัน โดยการดำเนินการจะเกิดขึ้นทางด้านซ้ายของสตริง

Hopcroft และ Ullman (1979) กำหนดผลหารL 1 / L 2ของภาษาL 1และL 2บนตัวอักษรเดียวกันเป็นL 1 / L 2 = { s | ∃ tL 2 . stL 1 } [ 7 ]นี่ ไม่ใช่การสรุปทั่วไปของคำจำกัดความข้างต้น เนื่องจากสำหรับสตริงsและอักขระที่แตกต่างกันa , bคำจำกัดความของ Hopcroft และ Ullman บ่งชี้ว่าส่งผลให้ได้ {} แทนที่จะเป็น { ε }

ผลหารด้านซ้าย (เมื่อกำหนดคล้ายกับ Hopcroft และ Ullman 1979) ของภาษาซิงเกิลตันL 1และภาษาL 2 ใดๆ เรียกว่าอนุพันธ์ BrzozowskiหากL 2ถูกแทนด้วยนิพจน์ปกติผลหารด้านซ้ายก็จะเป็นเช่นกัน[ 8 ]

ความสัมพันธ์ทางไวยากรณ์

ผลหารด้านขวาของเซตย่อยของโมโนอิดจะกำหนดความสัมพันธ์สมมูลซึ่งเรียกว่าความสัมพันธ์ทางไวยากรณ์ด้านขวาของSโดยกำหนดโดย

ความสัมพันธ์ดังกล่าวมีดัชนีจำกัดอย่างชัดเจน (มีจำนวนชั้นสมมูลจำกัด) ก็ต่อเมื่อตระกูลของผลหารด้านขวามีจำนวนจำกัด กล่าวคือ ถ้า

มีจำนวนจำกัด ในกรณีที่Mเป็นโมโนอิดของคำบนตัวอักษรบางตัวSก็จะเป็นภาษาปกตินั่นคือ ภาษาที่สามารถรับรู้ได้โดยออโตมาตาที่มีสถานะจำกัดเรื่องนี้จะกล่าวถึงในรายละเอียดเพิ่มเติมในบทความเกี่ยวกับโมโนอิดเชิงไวยากรณ์

สิทธิ์ในการยกเลิก

การ ตัด ตัวอักษรaออกจากสตริงs ทาง ด้านขวาคือการลบตัวอักษรa ตัวแรกที่ปรากฏ ในสตริงsโดยเริ่มจากด้านขวา ใช้สัญลักษณ์และนิยามแบบเวียนเกิดว่า

สตริงว่างสามารถยกเลิกได้เสมอ:

ชัดเจน การยกเลิกที่ถูกต้องและการเดินทาง แบบคาดการณ์ล่วงหน้า :

คำนำหน้า

คำนำหน้าของสตริงคือ เซตของคำนำหน้า ทั้งหมด ของสตริง โดยสัมพันธ์กับภาษาที่กำหนด:

ที่ไหน.

การปิดคำนำหน้าของภาษาคือ

ตัวอย่าง:

ภาษาหนึ่งเรียกว่าภาษาปิดคำนำหน้าถ้า.

ตัวดำเนินการปิดคำนำหน้ามีคุณสมบัติไม่เปลี่ยนแปลงผลลัพธ์ :

ความสัมพันธ์แบบพรีฟิกคือความสัมพันธ์ทวิภาค ที่มีลักษณะว่าถ้าและเฉพาะเมื่อความสัมพันธ์นี้เป็นตัวอย่างเฉพาะของลำดับแบบพรีฟิก

ดูเพิ่มเติม

หมายเหตุ

  1. ^แม้ว่าภาษาปกติทุกภาษาก็เป็นภาษาไร้บริบทเช่นกัน แต่ทฤษฎีบทก่อนหน้านี้ไม่ได้เป็นผลมาจากทฤษฎีบทปัจจุบัน เนื่องจากทฤษฎีบทก่อนหน้านี้ให้ผลลัพธ์ที่ชัดเจนกว่าสำหรับภาษาปกติ
  2. ^ตามหลักการอย่างเคร่งครัด โฮโมมอร์ฟิซึมจะให้ภาษาที่ประกอบด้วยสตริงเพียงสตริงเดียว นั่นคือ
  3. ^ข้อนี้เป็นผลมาจากการปิดภายใต้การแทนที่โดยพลการที่กล่าวถึงข้างต้น
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=String_operations&oldid=1333211715#String_substitution "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การดำเนินการสตริง

ใน วิทยาการคอมพิวเตอร์ ในสาขา ทฤษฎีภาษาเชิงรูปธรรม มีการใช้ ฟังก์ชันสตริง หลากหลายประเภทอย่างแพร่หลายอย่างไรก็ตาม สัญลักษณ์ที่ใช้แตกต่างจากที่ใช้ใน การเขียนโปรแกรมคอมพิวเตอร์...

สตริงและภาษา

สตริงคือลำดับของอักขระที่จำกัด สตริงว่าง ใช้สัญลักษณ์`null` แทน การต่อสตริงสองสตริงเข้า ด้วยกัน ใช้สัญลักษณ์`concatenation` หรือแบบย่อคือ`concatenation` การต่อสตริงกับสตริงว่างไม่มีผลแตกต่างกัน: `concatenation` การต่อสตริงมีคุณสมบัติ การสลับที่ได้ : `...

ตัวอักษรของสตริง

ตัว อักษรของสตริง คือเซตของอักขระทั้งหมดที่ปรากฏในสตริงนั้นๆ ถ้า s เป็นสตริง ตัวอักษร ของสตริงนั้น จะถูกแทนด้วย

การแทนที่สตริง

ให้ L เป็น ภาษา และให้ Σ เป็นตัวอักษรของภาษานั้น การแทนที่สตริง หรือเรียกง่ายๆ ว่า การแทนที่ คือฟังก์ชัน f ที่แปลงอักขระใน Σ ไปยังภาษาต่างๆ (ซึ่งอาจมีตัวอักษรที่แตกต่างกัน) ตัวอย่างเช่น เมื่อกำหนดอักขระ a ∈ Σ จะได้ f ( a ) = L a โดยที่ L a ⊆ Δ *...