Tầm quan trọng của chuỗi trống


7

Theo nghĩa của một chuỗi khác với một chuỗi tham chiếu null, tầm quan trọng của một chuỗi rỗng trong CS (và đặc biệt trong các ngôn ngữ chính thức) là gì?

Tại sao bạn cần một khái niệm riêng, đó là 'chuỗi rỗng', thậm chí còn có chữ Hy Lạp (ε)?

Không thể chỉ là một nhân vật EOL thay thế nó?


1
Điều gì khiến bạn nghĩ rằng chỉ có một định nghĩa "chính xác" cho khái niệm này?
Raphael

1
@Raphael: điều gì khiến bạn nghĩ rằng tôi nghĩ vậy?
Quora Feans

1
Tôi đã đọc giữa dòng. Một nhận xét tốt hơn có thể là: bạn đã thử xác định ngôn ngữ chính thức theo cách đó và chứng minh một số định lý cơ bản chưa?
Raphael

1
"Chuỗi tham chiếu null" nghĩa là gì? Đó có phải là một khái niệm ngôn ngữ lập trình? Bạn có ý nghĩa gì bởi một "khái niệm riêng biệt"? Tách biệt với cái gì? Bạn có sự khác biệt nào giữa nhân vật Hy Lạp và nhân vật EOL, ngoại trừ thực tế là chúng có cách sử dụng khác nhau trong việc thể hiện các văn bản? Cuối cùng, ý của bạn là "cần", như chúng ta thường có thể làm mà không cần các khái niệm hay ký hiệu cụ thể và hoàn thành công việc? Chúng ta có cần ngôn ngữ lập trình cấp cao không? Chà, họ làm cho việc lập trình dễ dàng hơn bằng nhiều cách, nhưng không phải là không thể thiếu. Bạn cũng có vẻ nhầm lẫn cú pháp và ngữ nghĩa.
babou

Chuỗi tham chiếu Null: sẽ là một biến chuỗi trỏ đến null (có nghĩa là giá trị không tồn tại). Khái niệm riêng biệt: bạn không có một thuật ngữ cho một chuỗi có độ dài 44, nhưng bạn bận tâm đưa ra một chuỗi có độ dài 0 tên. Theo cùng một dòng suy nghĩ, nó phải rất quan trọng, nếu không bạn sẽ không cho nó một thuật ngữ, cũng không phải là một chữ cái Hy Lạp, trừ khi bạn có kế hoạch sử dụng nó nhiều lần. Về EOL: nếu EOL có thể bao gồm tất cả các chức năng mà có, thì chức năng sau sẽ là dự phòng.
Quora Feans

Câu trả lời:


12

Có một ý nghĩa toán học cho chuỗi rỗng. Thật vậy, sản phẩm nối của các từ là một hoạt động kết hợp. Nhưng hoạt động này cũng có một yếu tố trung tính , cụ thể là từ trống. Vì lý do này, từ trống cũng thường được ký hiệu là1, cho phép một người viết, cho mỗi từ u,

1u=u=u1

Tất nhiên, nếu bảng chữ cái là {0,1}, nó không phải là một ý tưởng tốt để biểu thị từ trống 1 và đây có lẽ là lý do tại sao ký hiệu ε (Hoặc đôi khi λ) đã được giới thiệu. Nhưng như Yuval Filmus đã chỉ ra, từ trống là một từ có độ dài0, đó là, nó không chứa thư.

Nó chắc chắn là đáng lo ngại để biểu thị từ trống 1 (hoặc bằng một lá thư Hy Lạp ε hoặc là λ), nhưng bạn phải coi nó như một ký hiệu thông thường, giống như cách bạn biểu thị tập hợp trống bằng .


1
Cần lưu ý rằng (Σ,)là một đơn chất. Điều tra các thuộc tính đại số của các ngôn ngữ chính thức có thể mang lại kết quả thú vị, ví dụ như phân tích cú pháp.
Raphael

8

Chuỗi rỗng giống như số không. Nó đại diện cho "không có gì" nhưng là một khái niệm cơ bản. Một ví dụ rất đơn giản, một từa là tiền tố của một từ b nếu b=aw cho một số từ w. Nếu bạn không cho phép chuỗi trống, một từ sẽ không phải là tiền tố của chính nó.

Nhân vật EOL là một nhân vật trong một bộ ký tự cụ thể. Nếu chúng ta quan tâm đến chuỗi trên{0,1}, chúng tôi không có EOL. Ngoài ra, EOL là một ký tự, do đó, một chuỗi bao gồm EOL không trống.


Cho dù một từ là tiền tố của chính nó là một vấn đề định nghĩa. Nếu bạn quyết định không xem xét chuỗi trống, bạn phải thay đổi một số định nghĩa cho phù hợp để cho phép một biến thể nhất quán của lý thuyết về chuỗi. - - EOL ký tự thực sự có thể đại diện cho chuỗi trống. Các đại diện có thể sử dụng bất kỳ thiết bị có cấu trúc phù hợp. Tôi có thể sử dụng các ký tự z, e, r, o và n để biểu diễn các chuỗi trên{0,1}, ví dụ với "onezeroone" để thể hiện những gì thường được ghi chú "101" và "none" cho chuỗi trống. Không phải là tôi giới thiệu và nó.
babou

Bạn có thể làm bất cứ điều gì bạn muốn, nhưng một số định nghĩa là "tốt hơn" so với những định nghĩa khác. Và có những lý do. Tôi đang đưa ra một lý do như vậy.
Yuval Filmus

Không chắc chắn điểm mà bạn đang trả lời. Nó dường như chỉ là người đầu tiên. Nếu bạn không cho phép chuỗi trống, định nghĩa tiền tố của bạn rất có thể không đầy đủ. Hoặc bạn có thể đưa ra một lý do tại sao nó nên tốt hơn? Lý do thực sự bạn nên đưa ra để biện minh rằng chuỗi rỗng là cơ bản là vì nó khó hơn (nhưng rất có thể) để phát triển lý thuyết mà không có nó. Ví dụ, bạn phải đưa ra một định nghĩa phức tạp hơn về ý nghĩa của một chuỗi là tiền tố của chuỗi khác. Đó là một điểm tinh tế hơn. Hãy nghĩ về người Hy Lạp làm mỹ phẩm mà không có.
babou

Bạn cũng có thể biện minh cho định nghĩa thông thường của tiền tố so với tiền tố của bạn, thường được gọi là tiền tố thích hợp. Nhưng ví dụ của bạn về số không mang lại cho tất cả - cuộc sống dễ dàng hơn nhiều với nó.
Yuval Filmus

Nếu chuỗi trống không được phép , định nghĩa của tôi về tiền tố thích hợp là định nghĩa thông thường của tiền tố (khi chuỗi trống được cho phép) và định nghĩa tiền tố của tôi là u là tiền tố của v iff u là tiền tố thích hợp của v hoặc bằng đến v. Vấn đề là duy trì phù hợp về mặt ngữ nghĩa với lý thuyết cho phép chuỗi rỗng . Vâng, cuộc sống dễ dàng hơn với chuỗi rỗng ... nhưng mọi thứ không khác biệt nếu không có cách bạn dường như ngụ ý trong nhận xét của bạn về một từ không còn là tiền tố của chính nó. Tôi nghĩ đó là một điểm quan trọng.
babou

6

Sử dụng ký tự kết thúc (EOL) tương đương về sức mạnh biểu cảm - bất cứ điều gì bạn có thể làm với từ trống ε, bạn có thể xác định lại để làm với EOL thay vào đó - nhưng sử dụng nó sẽ là một cơn đau lớn ở mông. Các định nghĩa thông thường là:

Một bảng chữ cái là một tập hợp hữu hạnΣcủa các biểu tượng. Một chuỗi s trên bảng chữ cái Σ là một chuỗi hữu hạn s1s, nơi mỗi siΣ. Chúng tôi viết|s|cho chiều dài củas, với |s1s|=; từ duy nhất có độ dài bằng 0 được ký hiệu ε. Một chuỗi con củas1s là bất kỳ chuỗi sisj, Ở đâu 1ij. Sự kết hợp của các chuỗis1st1tm là chuỗi s1st1tm chiều dài +m.

So sánh điều này với:

Để cho là một kết thúc phân biệt của biểu tượng dòng . Một bảng chữ cái là một tập hợp hữu hạn Σ các ký hiệu sao cho Σ. Một chuỗi s trên bảng chữ cái Σ là một chuỗi hữu hạn s1s Ở đâu siΣ{} cho i<s=. Chúng tôi viết|s|cho chiều dài củas, với |s1s|=1. Một chuỗi con củas1s là bất kỳ chuỗi sisj, Ở đâu 1ij<. Sự kết hợp của các chuỗis1st1tm là chuỗi s1s1t1tm chiều dài +m2.

Lưu ý tính trung thực bổ sung và khả năng xảy ra lỗi do lỗi một, đặc biệt là trong định nghĩa của phép nối. Ngoài ra, hãy xem xét việc xác định automata trên các chuỗi kết thúc này. Ngoài việc kiểm tra xem liệu đầu vào của nó có bất kỳ thuộc tính nào mà ngôn ngữ yêu cầu hay không, bất kỳ thiết bị tự động nào bây giờ cũng phải kiểm tra xem ký tự cuối cùng của đầu vào là, mà tôi (tôi nghĩ) sẽ thêm hai trạng thái cho mỗi automaton.

Chuỗi rỗng εcó vai trò tương tự như số 0 trong các số tự nhiên. Đó là bản sắc cho hoạt động cơ bản nhất (nối cho chuỗi, bổ sung cho tự nhiên). Điều này rất quan trọng nếu bạn muốn xây dựng bất kỳ loại cấu trúc đại số nào, chẳng hạn như các nhóm hoặc đơn sắc , cho phép truy cập vào một khu vực rộng lớn các kết quả toán học có thể hữu ích. Nói một cách đơn giản hơn, nó tạo ra một trường hợp cơ sở tuyệt vời cho các cảm ứng, vì giả thuyết này thường không quan trọng đối với chuỗi rỗng. Thật vậy, khi bạn thực hiện quy nạp trên chuỗi, bạn hoàn toàn sử dụng định nghĩa quy nạp sau đây vềΣ-dây:

  • ε là một Σ-chuỗi;
  • nếu s là một Σdây và σΣ, sau đó sσ là một Σ-chuỗi.

Điều đó cũng trở nên khó khăn hơn với các chuỗi kết thúc:

  • là một Σ-chuỗi;
  • nếu s là một Σdây và σΣ{}, sau đó sσ là một Σ-chuỗi.

Tất nhiên, bạn có thể làm điều đó theo cách khác và nói rằng nếu s là một chuỗi, sau đó là σs. Tại thời điểm đó, có rất ít lựa chọn giữa các chuỗi kết thúc và kết thúc nhưng cảm ứng của bạn có thể phù hợp hơn với việc thêm các ký tự ở cuối so với đầu.

Các chuỗi kết thúc là tốt để lập trình với nhưng chúng không phù hợp với toán học. Khi bạn lập trình, bạn cần một số cách để biết khi nào chuỗis1skết thúc; Khi bạn đang làm toán, rõ ràng làs là ký tự cuối cùng từ cách viết chuỗi.


Tôi vừa nhận thấy rằng bạn hỏi về sự khác biệt giữa một tham chiếu null và chuỗi rỗng. Một tham chiếu null là không có chuỗi nào cả; chuỗi rỗng là một chuỗi nhưng nó không có ký tự trên đó. Nếu bạn thích, đó là sự khác biệt giữa việc có một mảnh giấy trắng (chuỗi trống) và hoàn toàn không có giấy (tham chiếu null).


IMO, phần đầu tiên trong câu trả lời của bạn là sai. Định nghĩa thông thường nhằm xác định một cách trừu tượng chuỗi là gì, độc lập với cách nó được biểu diễn. Định nghĩa thứ hai là một cách chính thức để xác định một ký hiệu có thể có cho nó, nhưng không có gì bạn muốn cho lý do về chuỗi. Bạn đang củng cố một sự nhầm lẫn giữa cú pháp và ngữ nghĩa được đề xuất bởi câu hỏi hơi khó xử của OP. Phần còn lại của câu trả lời của bạn chịu cùng một vấn đề.
babou

Trong đoạn cuối cùng của bạn, bạn lặp lại sự nhầm lẫn giữa cú pháp và ngữ nghĩa. Chuỗi rỗng là một khái niệm trừu tượng và nó cũng có thể được biểu diễn trong conputer bằng một tham chiếu null, trong khi chuỗi không rỗng được biểu thị bằng bất cứ thứ gì được coi là thuận tiện. Yêu cầu duy nhất là các hàm thao tác chuỗi được viết tương ứng sao cho ngữ nghĩa toán học của chuỗi được tuân thủ đầy đủ. Lưu ý rằng giấy cũng chỉ để đại diện cho chuỗi. Các thực thể toán học trừu tượng không phải của thế giới này.
babou

@babou Như tôi đã nói ("bất cứ điều gì bạn có thể làm với từ trống ε, bạn có thể làm với EOL thay vào đó "), hai tùy chọn tương đương về mặt ngữ nghĩa và tôi thảo luận về vai trò ngữ nghĩa này là gì (ví dụ: danh tính cho toán tử ghép). Cú pháp khó hiểu với ngữ nghĩa?
David Richerby

Định nghĩa đầu tiên là một tiêu chuẩn cho khái niệm trừu tượng. Nó không (phải) nói bất cứ điều gì về cách chuỗi thực sự được biểu diễn. OP có liên quan đến đại diện, và trong định nghĩa thứ hai, bạn đang bắt chước một đại diện được đề xuất như thể đó là định nghĩa trừu tượng của khái niệm, điều này tất nhiên là khó xử hơn. Biểu tượng không nên ở Σ, nhưng chỉ là một thiết bị công chứng được sử dụng để chấm dứt các biểu diễn chuỗi (có thể là một bất tiện rất nhỏ) để ký hiệu được thống nhất cho chuỗi trống. Bạn đã nhầm lẫn cú pháp và ngữ nghĩa.
babou

Như tôi đã nói, tuyên bố của bạn về sự bất tiện cú pháp của EOL là không có cơ sở. Bạn đã tạo ra các vấn đề bằng cách sử dụng một định nghĩa không đầy đủ (định nghĩa thứ hai của bạn cho các chuỗi). Trong câu trả lời (viết lại) của tôi, đến cuối cùng, tôi đưa ra định nghĩa mà bạn nên sử dụng, điều này cho thấy những vấn đề này không tồn tại. Phải là một phần của ký hiệu, không phải là ký hiệu trong chuỗi đại diện.
babou

5

Câu trả lời ngắn: tập hợp trống (tức là tập hợp chuỗi không chứa chuỗi) giống như số không, nhưng chuỗi trống (tức là tập hợp chuỗi có chứa một chuỗi có độ dài bằng 0) giống như một chuỗi.

Một cách để axiomatise ngôn ngữ chính thức là như một sem semotentent. Một nửa là một cấu trúc với hai hoạt động nhị phân+và hai yếu tố phân biệt 01và tuân theo các tiên đề sau. Trước hết,+ là một monoid giao hoán với bản sắc 0:

(A+B)+C=A+(B+C)
0+A=A+0=A
A+B=B+A

Thứ hai, là một monoid với bản sắc 1:

(AB)C=A(BC)
1A=A1=A
Phép nhân trái và phải phân phối bổ sung:
A(B+C)=(AB)+(AC)
(A+B)C=(AC)+(BC)
Nhân với 0 hủy.
0A=A0=0
và cuối cùng, bổ sung là idempotent:
A+A=A

"Bổ sung" có thể được hiểu là tập hợp và "phép nhân" có thể được hiểu là nối chuỗi.

Oh, và các liên kết đi rất sâu. Toán tử đóng Kleene, được định nghĩa bằng trực giác là:

A=1+A+A2+A3+

hành xử như lũy thừa. Hãy nghĩ về loạt sức mạnh củaex, cộng với thực tế là sự bổ sung là bình thường.

Các ký tự đầu cuối hoạt động như các biến. Cụ thể, chúng ta có thể định nghĩa đánh giá ở mức 0:

a(0)=0
(AB)(0)=A(0)B(0)
(A+B)(0)=A(0)+B(0)
A(0)=1

Đưa ra một biểu thức chính quy E, E(0) là một trong hai 0 hoặc là 1. Nó là1 nếu chuỗi rỗng là thành viên của E0 nếu không thì.

Chúng ta cũng có thể định nghĩa một đạo hàm, được gọi là đạo hàm Brzozowski:

aa=1
ba=0
(A+B)a=Aa+Ba
ABa=A(0)Ba+AaB
Aa=AaA

Quy tắc kỳ lạ duy nhất ở đây là quy tắc nhân. Nó gần giống như quy tắc sản phẩm quen thuộc; sự khác biệt là do thực tế là nối là không giao hoán.

Những gì phái sinh có nghĩa là trực giác là Ea là tập hợp các chuỗi trong E bắt đầu bằng ký hiệu a, nhưng với điều đó aloại bỏ. Vì thếaEa là tập hợp các chuỗi trong E bắt đầu bằng a.

Suy nghĩ về nó một lát, nếu az là bảng chữ cái, sau đó:

E=E(0)+aEa+bEb++zEz

Đây là định lý của Taylor, chỉ dành cho các ngôn ngữ thông thường. Hơn nữa, đó cũng là một quy tắc để tạo DFA trực tiếp từ các biểu thức thông thường!E(0)1 nếu và chỉ khi trạng thái ban đầu là trạng thái cuối cùng và các điều khoản khác là chuyển tiếp.

Một điều đáng chú ý về điều này là các toán tử biểu thức chính quy quen thuộc (cộng với một số toán tử ít quen thuộc hơn, chẳng hạn như giao điểm đặt và chênh lệch tập hợp) hoàn toàn được xác định bởi các đạo hàm của chúng, cộng với đánh giá của chúng bằng 0. Đây là những gì chúng ta mong đợi từ định lý cơ bản của tính toán, nhưng thật thú vị khi thấy nó ở đây.

Ngẫu nhiên, lý thuyết này cũng mở rộng ra các ngôn ngữ đệ quy và không có ngữ cảnh, nhưng bạn cần thêm một chút máy móc cho những thứ mà tôi sẽ không đi vào đây.


4

Một câu hỏi cơ bản về toán học

Câu trả lời này đã được tổ chức lại sau khi OP đưa ra nhiều biện pháp hơn về ý nghĩa và ý định của câu hỏi của anh ấy. Tôi cũng bình luận các câu trả lời khác ở đây, vì thật khó xử khi làm như vậy trong định dạng bình luận thông thường. Bình luận họ cũng cung cấp cái nhìn sâu sắc thêm về các vấn đề có liên quan.

Tóm lại

Trực giác của bạn khá chính xác rằng chuỗi trống đóng vai trò đặc biệt trong nghiên cứu về chuỗi và ngôn ngữ chính thức, và đó là lý do tại sao nó thường được đặt một tên hoặc ký hiệu đặc biệt. Các chuỗi trên một tập hợp các ký hiệu nhất định tạo thành một cấu trúc đại số gọi là đơn hình, với phép toán nối có một phần tử trung tính: chuỗi rỗng. Xem câu trả lời của J.-E. Pin .

Bạn cũng đúng rằng có thể có nhiều ký hiệu hoặc đại diện khác cho nó. Sự lựa chọn của đại diện được quyết định bởi sự thuận tiện, tính thuyết phục và đơn giản hóa diễn ngôn, lý luận và tính toán.

Một sự tiện lợi như vậy, như bạn tự hỏi chính xác, là có một ký hiệu thống nhất cho tất cả các chuỗi, bao gồm cả chuỗi trống. Điều này có thể đạt được bằng nhiều cách, cho dù trên giấy hay trong máy tính. Chấm dứt chuỗi bằng một biểu tượng đặc biệt được cho là không thuộc về tập hợp các biểu tượng có trong chuỗi là một cách thực hiện. Tôi đoán đây là những gì bạn đề xuất với EOL. Điều này đã được thực hiện khoảng 45 năm trước bởi Denis Ritchie cho ngôn ngữ lập trình C, ngoại trừ việc anh ta sử dụng byte 0, cũng lưu ý NUL hoặc ^ @, thay vì EOL.

Trong văn bản, nó có thể được thực hiện với các trích dẫn xung quanh hoặc với một kiểu dáng cuối cùng . Tuy nhiên, lưu ý rằng trong khimột mình sẽ biểu thị chuỗi rỗng, nó chấm dứt sau đó tất cả các chuỗi, đó không phải là trường hợp sử dụng chữ. Họ không đóng chính xác vai trò cú pháp.

Về nguyên tắc, ký hiệu chấm dứt như EOL, ^ @ hoặc cũng không thể là một biểu tượng thuộc về một chuỗi, trừ khi bạn thêm các cơ chế biểu diễn phức tạp hơn.

Trong máy tính, chuỗi tham chiếu null có thể được sử dụng để biểu diễn chuỗi rỗng. Mặt khác, nó chỉ là một khái niệm lập trình không liên quan gì đến khái niệm trừu tượng của chuỗi.

Tuy nhiên, câu hỏi của bạn hơi khó hiểu và không được nêu quá rõ. Nói về một " khái niệm riêng biệt " gợi ý về các vấn đề ngữ nghĩa thay vì đọc lại cú pháp. Và bạn đã trộn các văn bản đại diện được in, sử dụng ε nhưng không phải EOL, với biểu diễn máy tính làm ngược lại.

Với nhiều chi tiết hơn

Đây là một câu hỏi kỳ lạ. Theo cách của nó, nó cũng đặt ra một hoặc hai vấn đề cơ bản về toán học.

Hiểu những vấn đề như vậy là không rõ ràng, như được chứng kiến ​​bởi sự bất cập của một số câu trả lời được đưa ra bởi người dùng rõ ràng có thẩm quyền, và sự bất cập của chính câu hỏi. Đây là những gì thu hút tôi cho câu hỏi này.

Hai vấn đề liên quan đến:

  • hiểu đúng về vai trò tương ứng và cách sử dụng cú pháp và ngữ nghĩa trong toán học và lập trình;

  • hiểu đúng về tác dụng của việc "loại bỏ một khái niệm khỏi một lý thuyết hiện có" .

Vấn đề thứ hai, liên quan đến ngữ nghĩa học, có lẽ đã được các nhà logic học giải quyết, và có thể bởi các nhà sử học về khoa học. Nhưng tôi không nhớ là đã thấy nó chính thức được giải quyết (hoặc có thể tôi đã không nhận ra nó).

Một sự nhầm lẫn giữa cú pháp và ngữ nghĩa có lẽ xuất phát từ việc OP nói về một " khái niệm riêng biệt " trong đó anh ta nên nói về một " ký hiệu riêng biệt ". Một sai lầm như vậy có lẽ là công bằng trong trường hợp của anh ấy khi anh ấy đang cố gắng hiểu vấn đề. Nhưng nó càng làm cho một số người dùng đã trả lời, rõ ràng là Yuval Filmus và tôi, khi chúng tôi lấy từ "khái niệm" cho ý nghĩa của nó.

Về ngữ nghĩa

Bây giờ tôi nhận ra rằng đoạn tiếp theo không phải là về câu hỏi bạn dự định; nhưng đó là câu hỏi bạn đã viết và được hiểu là ngữ nghĩa và được nhiều người sử dụng, trong khi bạn có nghĩa là cú pháp (sẽ được giải quyết trong phần cú pháp bên dưới).

Hãy bắt đầu với câu hỏi của bạn " Tại sao bạn cần một khái niệm riêng biệt, đó là 'chuỗi rỗng'? ", Mà tôi hiểu là: "chúng ta có thể sử dụng chuỗi, trong lý thuyết và lập trình, mà không bao giờ xem xét chuỗi trống không?" , như Yuval Filmus đã làm.

Thực tế là, chúng ta thường không cần chuỗi rỗng , nhưng nói chung sẽ thuận tiện hơn khi có nó. Hầu hết các lý thuyết có thể có thể được phát triển mà không bao giờ xem xét các chuỗi trống. Rốt cuộc, rất nhiều đã được người Hy Lạp phát triển mà không coi số 0 là số. Zero được giới thiệu về mặt cú pháp và ngữ nghĩa chỉ một vài thế kỷ sau đó ở Ấn Độ. Mở rộng hệ thống số không chỉ là giới thiệu các khái niệm mới, mà còn là cách đơn giản hóa việc hiểu và sử dụng các khái niệm cũ. Giới thiệu số 0 và số âm giúp dễ hiểu các tính chất của số dương tự nhiên, v.v. Một số tính chất của các hàm trên các số thực (chẳng hạn như sự hội tụ của chuỗi) dễ dàng hơn để phân tích và hiểu khi bạn xem xét phần mở rộng cho các số phức.

Vì vậy, giới thiệu các khái niệm và phần mở rộng mới trong toán học thường là một cách tốt để làm cho lý thuyết đơn giản hơn (và thường mạnh mẽ hơn để diễn đạt các vấn đề).

Giới thiệu chuỗi rỗng cùng với "chuỗi tự nhiên" sẽ đơn giản hóa các lý thuyết được xây dựng trên chuỗi và đó là một lý do đủ tốt. Thông thường, như đã nêu trong các câu trả lời khác, việc có chuỗi trống cho phép chúng ta coi chuỗi là đại diện (mô hình) của các cấu trúc đại số nổi tiếng (đơn sắc) và áp dụng trực tiếp tất cả các kết quả đã biết về các cấu trúc đó. Thật vậy, như ghi nhận của J.-E. Ghim, chuỗi trống có liên quan trực tiếp đến hoạt động nối trên chuỗi (và tôi sẽ thêm vào, giống như cách số 0 có liên quan đến việc thêm số nguyên).

Chúng ta không hoặc có thể không cần chuỗi rỗng, nhưng sẽ thuận tiện hơn rất nhiều khi làm toán với nó hơn là không có nó. Và điều này cũng đúng với lập trình (là một dạng toán học nhằm tạo ra các bằng chứng mang tính xây dựng).

Một vấn đề nhất quán

Tuy nhiên, tôi không đồng ý với câu trả lời của Yuval Filmus về hiệu ứng không cho phép khái niệm chuỗi rỗng, giống như cách người Hy Lạp sẽ không coi số không. Giới thiệu số 0 là số mới sẽ không được chấp nhận nếu nó thay đổi kết quả đã biết của mỹ phẩm. Tốt nhất, nó sẽ được coi là một lý thuyết khác nhau, với mục đích riêng của nó.

Tương tự, một lý thuyết về chuỗi sẽ cho kết quả nhất quán cho dù nó có cho phép chuỗi trống hay không. Nhưng cả hai cách tiếp cận nên sử dụng các định nghĩa nhất quán để điều đó trở nên rõ ràng và có ý nghĩa, và Yuval Filmus đã không làm điều đó.

Khi chuỗi trống được cho phép , định nghĩa thông thường của tiền tố là:

Chuỗi u là tiền tố của chuỗi v iff có chuỗi w sao cho uw = v

trong đó dấu chấm biểu thị sự nối chuỗi. Điều này cho phép một chuỗi là tiền tố của chính nó bằng cách lấy w = (chuỗi trống). Sau đó, bạn có thể xác định:

Chuỗi u là tiền tố thích hợp của chuỗi v iff, nó là tiền tố của v và không bằng v.

Tuy nhiên, khi chuỗi trống không được phép , bạn phải nêu các định nghĩa này một cách nhất quán, nhưng khác nhau. Ví dụ:

Chuỗi u là tiền tố thích hợp của chuỗi v iff có chuỗi w sao cho uw = v

Lưu ý rằng w phải có ít nhất một ký hiệu. Sau đó, bạn có thể xác định:

Chuỗi u là tiền tố của chuỗi v iff u là tiền tố thích hợp của v hoặc u = v.

Với các định nghĩa nhất quán như vậy, một từ vẫn là tiền tố của chính nó, ngay cả khi chuỗi trống không được phép trong lý thuyết.

Vì vậy, điểm cần làm là không cho phép chuỗi rỗng thay đổi các thuộc tính của chuỗi (ít nhất là không theo cách tầm thường như vậy) như Yuval Filmus đã khẳng định. Vấn đề là nhiều hơn nữa, nó làm cho việc nghiên cứu các chuỗi phức tạp hơn, theo cùng cách mà arithologists phức tạp hơn khi bạn không thể nói về số không.

Về cú pháp

Vấn đề thứ hai là cú pháp. Làm thế nào các chuỗi nên được trình bày, trên giấy hoặc trong máy tính. Cụ thể, giả sử chúng tôi đồng ý rằng thật hữu ích khi có khái niệm về một chuỗi rỗng, làm thế nào nó được biểu diễn theo cú pháp để chúng ta có thể nói hoặc viết về nó.

Câu hỏi thực sự đặt ra cho tất cả các khái niệm toán học: chúng nên được trình bày như thế nào để chúng ta có thể nói hoặc viết về chúng, và làm như vậy một cách thuận tiện nhất có thể. Phần lớn sự tiến hóa của toán học cũng liên quan đến việc cải thiện cú pháp, biểu diễn các khái niệm. Một ví dụ tầm thường là sự lúng túng khi làm mỹ phẩm với đại diện La Mã cổ đại của các số nguyên.

Câu trả lời đầu tiên liên quan đến chuỗi trống là bạn có thể muốn điều đó phù hợp với biểu diễn của các chuỗi khác. Thông thường, việc biểu diễn một chuỗi sẽ bao gồm chuỗi các ký hiệu trong chuỗi cộng với một số ký hiệu bổ sung, chẳng hạn như dấu ngoặc kép: " gattaca " chẳng hạn. Sau đó, nó trở nên khá tự nhiên để biểu diễn chuỗi rỗng là "".

Nếu bạn đại diện cho ví dụ trên là gattaca, sau đó biểu diễn tự nhiên cho chuỗi rỗng là (như đã lưu ý ngầm bởi David Richerby).

Vì vậy, câu hỏi về sự cần thiết phải giới thiệu một ký hiệu riêng (chứ không phải là một khái niệm riêng biệt , như thực sự được viết) có một câu trả lời tiêu cực. Không, nó không cần thiết. Ký hiệu thống nhất, đại diện thống nhất, có thể cho tất cả các chuỗi, bao gồm cả chuỗi trống.

Tuy nhiên, nếu bạn chỉ đơn giản biểu diễn chuỗi bằng chuỗi các ký hiệu được bao gồm, chẳng hạn như gattaca , không có ký tự nào khác, thì chuỗi trống sẽ trở nên vô hình về mặt cú pháp, điều này khá bất tiện. Sau đó, cần phải giới thiệu một số ký hiệu cụ thể, chẳng hạn như chữ Hy Lạp ε hoặc một số tên khác.

Tương tự như vậy, khi nghiên cứu các chuỗi một cách trừu tượng, sẽ hơi khó sử dụng "" để biểu diễn chuỗi trống, nếu chỉ vì nó không tạo ra các câu hay và rõ ràng trong lời nói, khi các nhà khoa học nói với nhau, điều được cho là xảy ra nhân dịp. Do đó, nó là đẹp hơn để đặt tên cho nó. Nói chuỗi trống có thể làm, nhưng viết lúng túng. Do đó, thói quen sử dụng một ký hiệu chữ cái thường được thực hiện trong toán học để biểu thị các thực thể có liên quan cụ thể,

Đề xuất đại diện cho từ trống bằng EOL về cơ bản giống như đại diện cho từ đó bằng . Nó chỉ đơn giản là một đại diện của các chuỗi với một ký tự kết thúc đặc biệt. EOL chỉ là một ký tự đặc biệt "bằng cách nào đó có sẵn trong máy tính".

Như đã lưu ý ở trên đối với các số nguyên học La Mã, việc lựa chọn một đại diện nên được quyết định bởi sự thuận tiện, đặc biệt là trong một môi trường thuật toán. Có nhiều cách để biểu diễn các chuỗi nói chung và chuỗi trống nói riêng trong máy tính. Từ quan điểm lý thuyết, bạn chọn gì không quan trọng. Từ quan điểm thực tế, điều cần thiết là chọn một thứ sẽ làm cho các hoạt động và thao tác chuỗi hiệu quả hơn. Đây là một vấn đề cơ bản trong bất kỳ lớp nào về thuật toán và cấu trúc dữ liệu.

Về sự nhầm lẫn của cú pháp và ngữ nghĩa

Câu trả lời của David Richerby rất thú vị vì sự nhầm lẫn của cú pháp và ngữ nghĩa.

Anh ta cố gắng giới thiệu cách sử dụng cú pháp của EOL được đề xuất trong câu hỏi, mà anh ta thay thế bằng biểu tượng , nhưng anh ta trộn lẫn nó một cách kỳ lạ với định nghĩa về miền ngữ nghĩa của các chuỗi, làm cho những gì được cho là chỉ là một phần ký hiệu của miền ngữ nghĩa đó.

Định nghĩa thứ hai của anh ta thực sự nên có như sau:

Một bảng chữ cái là một tập hợp hữu hạnΣcủa các biểu tượng. Một chuỗi s trên bảng chữ cái Σ là một chuỗi hữu hạn của biểu tượng si, Ở đâu 0, 1isiΣ cho tất cả các giá trị của i. Nó được ghi nhậns1s Ở đâu là một ký tự đặc biệt không biểu thị một biểu tượng trong Σ. Chúng tôi viết|s|cho chiều dài của s, Được định nghĩa bởi |s1s|=. Một chuỗi con củas1s là bất kỳ chuỗi sisj, Ở đâu 1ij. Sự kết hợp của các chuỗis1st1tm là chuỗi s1st1tm chiều dài +m.
Lưu ý rằng do đó, chuỗi duy nhất có độ dài bằng 0 được ký hiệu  .

Định nghĩa này chỉ là một biến thể công chứng của định nghĩa thông thường được đưa ra bởi David Richerby. Nó không giới thiệu bất kỳ sự phức tạp hay " tính trung thực thêm " và không thay đổi gì đối với lý thuyết automata, vì lý do đơn giản làlà một phần của ký hiệu, không phải là ký hiệu trong chuỗi. Và nó đưa ra một ký hiệu thống nhất cho tất cả các chuỗi, bao gồm cả chuỗi trống.

Yuval Filmus mắc một lỗi tương tự trong nhận xét thứ hai của mình , vì EOL được dự định là một thiết bị công chứng cú pháp để biểu diễn các chuỗi, không phải là một biểu tượng trong chuỗi, trong khi{0,1} liên quan đến danh sách các ký hiệu có thể tạo thành chuỗi, về mặt ngữ nghĩa.

Để tóm tắt câu trả lời

J.-E. Câu trả lời của Pin khá chính xác, nhưng nó chỉ giải quyết một phần của câu hỏi, liên quan đến tầm quan trọng của chuỗi trống. Nó không giải quyết khả năng của một ký hiệu thống nhất.

Câu trả lời của Yuval FilmusDavid Richerby gây nhầm lẫn cú pháp và ngữ nghĩa, do đó từ chối một cách sai lầm đề xuất của câu hỏi OPś để sử dụng EOL. Ngoài ra Yuval Filmus'argument để khẳng định tầm quan trọng về ngữ nghĩa của chuỗi trống là rất đáng tranh cãi. Mặc dù nó có ý nghĩa gì đó, nhận xét của David Richerby về việc sử dụng tham chiếu null cũng có phần không chính đáng: nó cũng có thể được sử dụng để biểu diễn chuỗi rỗng, miễn là mã được viết phù hợp.

Câu trả lời bằng bút danh là quá mức lý thuyết liên quan đến tầm quan trọng của chuỗi trống trong ngôn ngữ chính thức, nhưng không thực sự thảo luận về các vấn đề được nêu ra bởi câu hỏi.

Đối với câu trả lời của riêng tôi , tôi chỉ có thể hy vọng nó giải quyết thỏa đáng các vấn đề và không có lỗi, nhưng nó còn quá dài.


Tình cờ, tôi đã đi sâu vào chi tiết như tôi đã làm vì tôi muốn tranh luận với tuyên bố của Yuval Filmus rằng chuỗi trống là "giống như số không", bởi vì nó không phải vậy. Bạn nói đúng rằng tôi đã không chạm vào câu hỏi cuối cùng. Trong phòng thủ của tôi, đây là CS, không phải stackoverflow.
Bút danh

@Pseud Tôi nghĩ Yuval Filmus có nghĩa là theo cách yếu hơn. Ở bất kỳ giá nào, số 0 là gì hay không (nói một cách lỏng lẻo) phụ thuộc vào loại cấu trúc toán học mà bạn nhìn vào, và điều tương tự cũng đúng với chuỗi rỗng. Câu trả lời của anh ấy rất công bằng ở khía cạnh đó, imho. Quan điểm của bạn là thú vị, mặc dù, nhưng có thể hơi nặng nề cho OP. BTW, tôi cố gắng không để lại câu hỏi với câu trả lời sai hoặc gây tranh cãi mà không lưu ý nó ở đâu đó cho độc giả ngây thơ hơn, hoặc sửa nó nếu câu trả lời là của tôi. Tôi biết câu trả lời của tôi quá dài, nhưng bạn có tìm thấy những phát biểu sai lầm hoặc gây tranh cãi trong những gì bạn đọc về nó không.
babou
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.