cuốn sách gpt4 ai đã làm

Bảng chân lý với các ký tự đại diện(ish)

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 13:56:33 25 4
mua khóa gpt4 Nike

Trước hết, đây là cách đối sánh mẫu, vì vậy hãy ghi nhớ điều đó vì bạn có thể có một giải pháp hoàn toàn khác mà tôi muốn nghe.

Tôi có chuỗi dữ liệu này (bây giờ hãy gọi nó là mystring).

chuỗi a = get_starting_letters(mystring)
chuỗi b = get_ending_letters(mystring)
bool c = check_code_appears(mystring)
.
.
.
vân vân

Tôi muốn một bảng từ điển/sự thật hoạt động như thế này (* có nghĩa là ký tự đại diện).

giá trị khóa (a,b,c...)

"abc", *, True = "gõ một chuỗi"
"abc", "xyz", True = "chuỗi gõ b"
*, "xyz", True = "gõ m chuỗi"

Điều này được triển khai như thế nào trong C#? Tôi biết điều này không quan trọng đối với F#, nhưng mã này có thể được cập nhật trong tương lai bởi một người chỉ biết C#.

Tại sao tôi nên làm điều này? Bởi vì mã hiện tại ngày càng khó theo dõi và cập nhật (có quá nhiều if, else, else if lồng nhau) và cho đến nay chỉ có một số "loại" được mô tả (nó sẽ tăng gấp đôi sau vài tháng).

Các giải pháp khác mà tôi đang xem xét: một cây/cấu trúc mô tả các biến có thể khác nhau được kiểm tra theo một điều kiện:

                      b = "xyz"
a = "abc" <
chuỗi bí ẩn < b = "xxx"
a = "cda" <
b = *

Tuy nhiên, nó dường như có chi phí hoạt động đáng kể, tốc độ rất quan trọng đối với việc này, cộng với cây sẽ không có dạng nhị phân và cần phải xử lý các ký tự đại diện.

câu trả lời hay nhất

Nếu bạn chỉ cần kiểm tra xem một bộ dữ liệu nhất định có khớp với một loại nhất định hay không thì bạn chỉ cần sử dụng một từ điển thông thường, như

Từ điển> tra cứu = Từ điển mới>();

// thêm một số giá trị
tra cứu["gõ một chuỗi"] = new Tuple("abc", null, true);
lookup["type b string"] = new Tuple("abc", "xyz", true);
lookup["type m string"] = new Tuple(null, "xyz", true);

Sau đó, bạn chỉ cần tìm loại bạn muốn kiểm tra xem các giá trị có bằng nhau không (hoặc có giá trị null trong bộ dữ liệu hay không).

Nếu bạn cần có khả năng xác địnhCái màtype khớp với một chuỗi (và không muốn lặp lại các loại đã biết), thì rõ ràng cách tiếp cận này sẽ không hiệu quả. .nhưng bạn cũng cần thiết lập một số loại quy tắc ưu tiên...

Cập nhật: Một cách là sử dụng SQL và thêm một số chỉ mục (nếu bạn không muốn viết chỉ mục dựa trên cây B của riêng mình). Có, nó dựa trên đĩa, nhưng nếu bạn tham chiếu nó thường xuyên, bảng có thể được lưu vào bộ nhớ đệm và nếu không, thì không có lý do gì phải lo lắng về hiệu suất.

Một ý tưởng đơn giản hơn là sử dụng các tập hợp đã được sắp xếp. Không hiệu quả về bộ nhớ nhưng có thể đủ nhanh tùy thuộc vào cách thiết lập quy tắc của bạn. Bạn sẽ xây dựng một bộ sưu tập cho từng giá trị có thể có của từng trường, chứa chuỗi kiểu. Ví dụ: bạn có một tập hợp a="abc" có hai thành viên, "nhập một chuỗi" và "nhập chuỗi b" và một tập hợp a=* chỉ có một thành viên, "nhập m chuỗi".

Nếu bạn đang cố gắng tìm một giá trị khớp với chuỗi a="abc", b="xxx" và c=true, bạn sẽ lấy tập hợp giao điểm* của a="abc" và a= rồi kết hợp nó với b =" xxx" và b= Cắt liên của và sau đó kết hợp nó với c=true và c= Các công đoàn giao nhau. Khi đó bạn sẽ có một tập hợp các giá trị phù hợp với key của mình.

Nó sẽ ở dạng O([a="abc"] + [a=*] + [b="xxx"] + [b=*] + [c=true] + [c=*]) = O(n )

Tất nhiên, việc lặp lại tất cả các quy tắc để kiểm tra sự trùng khớp có độ phức tạp về thời gian là O(n), nhưng ở đây chúng tôi đã giảm đáng kể kích thước của n.

Về c# - bảng chân lý có ký tự đại diện (ish), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11977785/

25 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress