Cách thức so sánh một cặp 3 biến


14

Tôi được giao nhiệm vụ so sánh một cặp 3 biến kép tích cực, trong khi bỏ qua thứ tự của chúng, trong Java. Tôi đã làm như sau:

if ((a1 == a2 && b1 == b2 && c1 == c2) ||
    (a1 == a2 && b1 == c2 && c1 == b2) ||
    (a1 == b2 && b1 == a2 && c1 == c2) ||
    (a1 == b2 && b1 == c2 && c1 == a2) ||
    (a1 == c2 && b1 == a2 && c1 == b2) ||
    (a1 == c2 && b1 == b2 && c1 == a2))
    // if true

Tôi đã nghe từ giáo viên rằng có một cách toán học để so sánh cặp 3 số này.

Cho đến nay, tôi đã cố gắng so sánh phép cộng, phép trừ của chúng, tổng công suất của chúng bằng 2 nhưng tôi luôn tìm thấy một trường hợp cặp khác nhau và tuyên bố là đúng.

Có ý kiến ​​gì không?

BIÊN TẬP:

Tôi đã gửi bài tập và giáo viên nói rằng câu trả lời của tôi là đúng. Tôi tò mò hỏi.


Tôi đang bỏ phiếu để đóng câu hỏi này Tôi nghĩ rằng việc trả lời câu hỏi này là giúp người đăng quảng cáo gian lận. Nếu giáo viên nói có câu trả lời, chắc chắn anh ấy hoặc cô ấy sẽ tiết lộ kịp thời. Đây không phải là nơi để can thiệp
ControlAltDel

@ControlAltDel Không phải là gian lận vì tôi đã gửi bài tập ... Tôi đang tò mò
AceVentuRa

2
Từ khi nào chúng ta không giúp đỡ mọi người với bài tập về nhà của họ?
WJS

Bạn có thể thêm những trường hợp mà cặp khác nhau và tuyên bố là đúng không?
Eritrea

2
@ControlAltDel Nó không lạc đề vì OP chỉ rõ mã họ đã thử và khó khăn của họ là gì khi giải quyết nó. Không có lệnh cấm phân loại đối với các câu hỏi về bài tập về nhà. Xem điểm # 3 trong hướng dẫn về chủ đề .
EJoshuaS - Phục hồi Monica

Câu trả lời:


12

TL; DR

So sánh tổng của từng bộ ba, sản phẩm của mỗi bộ ba và tổng các sản phẩm của tất cả các kết hợp có thể có của mỗi bộ ba.

Gritty Nitty

Theo Định lý cơ bản của Đại số , đối với đa thức bậc N, chúng ta phải có N gốc.

Sử dụng thực tế này, chúng tôi để cho số không của chúng tôi được a1, a2, and a3. Bây giờ, chúng tôi tìm thấy các hệ số của đa thức này.

(x - a1) * (x - a2) * (x - a3)
(x^2 - (a1 + a2) * x + a1a2) * (x - a3) 
x^3 - (a1 + a2) * x^2 + (a1a2) * x - a3 * x^2 + (a1a3 + a2a3) * x - a1a2a3

x^3 + (-1 * (a1 + a2 + a3)) * x^2 + (a1a2 + a1a3 + a2a3) * x + (-1 * a1a2a3)

Nếu hai đa thức là tương đương, chúng phải có cùng một gốc (một lần nữa bởi FTA). Do đó, tất cả những gì chúng ta cần làm là so sánh các hệ số của đa thức được tạo.

Vì vậy nếu,

(-1 * (a1 + a2 + a3) == (-1 * (b1 + b2 + b3))
      ---equivalently---
a1 + a2 + a3 == b1 + b2 + b3

(a1a2 + a1a3 + a2a3) == (b1b2 + b1b3 + b2b3)

-1 * a1a2a3 == -1 * b1b2b3
      ---equivalently---
a1a2a3 == b1b2b3

Sau đó, chúng ta có thể kết luận các bộ ba a1, a2, a3b1, b2, b3là tương đương.

Nó có đáng không?

Từ quan điểm thực tế, hãy xem liệu điều này có thực sự hiệu quả hơn việc kiểm tra lực lượng vũ phu như được minh họa bởi OP.

Kiểm tra đầu tiên: Tổng và So sánh. Điều này đòi hỏi 4 tổng cộng và 1 kiểm tra cho sự bình đẳng.

Kiểm tra tổng = 5; Tổng cộng chạy = 5

Kiểm tra thứ hai: Sản phẩm, Tổng và So sánh. Điều này đòi hỏi 6 tổng số nhân, 4 tổng cộng và 1 kiểm tra sự bằng nhau.

Kiểm tra tổng = 11; Tổng cộng chạy = 16

Kiểm tra thứ ba: Sản phẩm và So sánh. Điều này đòi hỏi 4 tổng số nhân và 1 kiểm tra cho đẳng thức.

Kiểm tra tổng = 5; Tổng cộng chạy = 21

Thêm hai phép toán AND logic, tổng số phép toán nhị phân cho "các hệ số của cách tiếp cận đa thức được tạo" chỉ yêu cầu:

23 hoạt động nhị phân

Kiểm tra lực lượng vũ phu yêu cầu 18 kiểm tra tổng đẳng thức, 12 so sánh logic VÀ so sánh và 5 so sánh logic HOẶC cho tổng số:

35 hoạt động nhị phân

Vì vậy, nói đúng ra , câu trả lời là có, "các hệ số của phương pháp đa thức được tạo ra" thực sự hiệu quả hơn. Tuy nhiên, như @WJS chỉ ra, cách tiếp cận lực lượng vũ phu có nhiều cơ hội hơn cho ngắn mạch và do đó thực hiện như / hiệu quả hơn so với phương pháp toán học.

Để hoàn toàn triệt để

Chúng ta không thể bỏ qua việc kiểm tra tổng số sản phẩm của tất cả các kết hợp có thể có của mỗi bộ ba. Nếu chúng ta bỏ qua điều này, có vô số ví dụ về việc này thất bại. Xem xét (23, 32, 45)(24, 30, 46)* :

23 + 32 + 45 = 100
24 + 30 + 46 = 100

23 * 32 * 45 = 33120
24 * 30 * 46 = 33120

Chúng không tương đương nhưng cho cùng một số tiền và sản phẩm. Tuy nhiên, họ không đưa ra cùng một tổng số sản phẩm của tất cả các kết hợp có thể:

23 * 32 + 23 * 45 + 32 * 45 = 3211
24 * 30 + 24 * 46 + 30 * 46 = 3204

* Trong trường hợp người ta tò mò làm thế nào để lấy được một ví dụ tương tự như ở trên, trước tiên hãy tạo tất cả các phân vùng nguyên có số nguyên M có độ dài 3, lấy sản phẩm của họ, tìm các bản sao và chọn một cặp.


1
Tôi ước chúng ta có thể sử dụng LaTeX
Joseph Wood

1
Nhưng trong phương pháp FTA của bạn, tất cả các bài kiểm tra phải được thực hiện. Trong phương pháp vũ phu, một số so sánh sẽ được ngắn gọn. Vì vậy, nó không tệ như nó có vẻ.
WJS

2
@WJS, đồng ý. Bạn có thể nói điều tương tự về phương pháp này không chỉ ở mức độ bạn có thể với phương pháp vũ phu. Trên thực tế, tôi cá rằng cách tiếp cận vũ phu đối với phần lớn các trường hợp sẽ nhanh hoặc nhanh hơn do chập điện. TBH, nếu tôi viết mã này, có lẽ tôi sẽ sử dụng phương pháp vũ phu vì nó dễ hiểu hơn nhiều lần.
Joseph Wood

-1

Nếu bạn được phép sắp xếp (a1 <= b1 <= c1 và a2 <= b2 <= c2) thì hãy thử so sánh 2 ^ a1 * 3 ^ b1 * 5 ^ c1 với 2 ^ a2 * 3 ^ b2 * 5 ^ c2 (sử dụng số nguyên tố 2, 3, 5 làm cơ sở)


bạn có thể giải thích câu trả lời này không?
AceVentuRa

1
Nếu việc sắp xếp được cho phép, thì tất cả những gì bạn cần làm là so sánh nếu a1 == b1 và a2 = b2 và a3 == b3.
JB Nizet

Tôi hiểu rằng nó đã được yêu cầu một cách toán học ...
Bruno

@Bruno Tôi chắc chắn rằng những gì giáo viên của tôi muốn nói là có một iftuyên bố và trong đó ifviết ra cách so sánh toán học mà không cần sắp xếp.
AceVentuRa

Làm thế nào để bạn sử dụng các số nguyên tố có giá trị gấp đôi có thể có một phần.
WJS
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.