Bây giờ chúng tôi đang suy nghĩ trong n chiều!


9

Câu hỏi đặt ra: Cho một số n≥ 2, có bao nhiêu khác biệt cặp điểm trên một nchiều n x n x n x n x n x n ... x nlưới, nơi tọa độ dao động từ 0để n - 1, là một khoảng cách ít nhất là n ngoài? Các cặp {(2,1,3,1), (3,2,1,3)}{(3,2,1,3), (2,1,3,1)}không được coi là khác biệt với nhau, vì chúng bao gồm hai điểm giống nhau theo thứ tự ngược lại. Lưu ý rằng tổng số cặp phát triển rất nhanh. Số lượng tổng cặp đi 6, 351, 32 640, 4 881 250, 1 088 367 840,, vv

Các trường hợp thử nghiệm:

2 -> 0 (all pairs are at most a distance of sqrt(2) < 2 apart)
3 -> 28 (They must either be (2,2,1) or a permutation apart, or (2,2,2) apart. Each corner
has three non-corner (2,2,1) points corresponding to it. And each corner is associated 
with a corner pair that is a (2,2,2). Thus. 3.5 * 8 = 28.
4 -> 4,888
5 -> 1,501,948
6 -> 486,039,360 (I would like someone to verify this if possible)

Mã của bạn sẽ hoạt động cho n <= 5, ít nhất là trên lý thuyết. Đừng mã hóa nó, đó là một lỗ hổng tiêu chuẩn.



^ một chương trình có thể tạo ra kết quả n=15dễ dàng
Leaky Nun

tinyurl.com/ya2kmb24 <- được chuyển sang C có thể tính toán lên đến n=20nhưng bị ảnh hưởng nặng nề do tràn
Leaky Nun

Làm thế nào bạn đo khoảng cách? Số liệu Euclide? Hoặc cho rằng đó là một mạng bạn đang sử dụng L_1?
Peter Taylor

@PeterTaylor từ các trường hợp thử nghiệm, rõ ràng là chúng tôi đang sử dụng khoảng cách Euclide all pairs are at most a distance of sqrt(2) apartnhưng điều đó cần được chỉ định rõ ràng hơn.
Giuseppe

Câu trả lời:


3

MATL , 12 byte

tt:Z^tZPR>~z

Hãy thử trực tuyến!

Giải trình

tt   % Implicit input n. Duplicate twice
     % STACK: n, n, n
:    % Range [1 2 ... n]
     % STACK: n, n, [1 2 ... n]
Z^   % Cartesian power. Gives an n^n × n matrix C where each row is a Cartesian tuple
     % STACK: n, C
t    % Duplicate
     % STACK: n, C, C
ZP   % Euclidean distance. Gives an n^n × n^n matrix D of pairwise distances
     % STACK: n, D
R    % Upper triangular part: sets elements below the main diagonal to 0. Call that U
     % STACK: n, U
>~   % Less than or equal? Element-wise. Gives a true-false matrix B
     % STACK: n, B
z    % Number of nonzeros. Implicitly display
     % STACK: number of entries in B that equal true

2

Thạch , 14 13 byte

1 byte nhờ Dennis.

ṗ⁸Œc_/€ÆḊ€<ċ0

Hãy thử trực tuyến!

Phiên bản nhanh chóng

ŒgL€!P:@L!$×P
²S<
ḶœċçÐḟ²ð>0S’2*×⁸ạ⁹$Ѥð€S

Hãy thử trực tuyến!


Thông dịch viên nào bạn sử dụng để chạy này? Tôi muốn dùng thử nhưng TIO quá chậm với n = 5 (hết thời gian sau 1 phút) prntscr.com/hqbcph
lận

@ bushdid911 nếu bạn cố gắng phá vỡ giới hạn, phá vỡ giới hạn sẽ là
Leaky Nun

Bạn có thể thay thế æ.`½bằng ÆḊ€.
dyl Nam

@ bushdid911 Nó có thể chạy n=5, chỉ trong một phút. (có thể mất nhiều hơn tuổi của vũ trụ, hãy cẩn thận) Đây không phải là mã nhanh nhất, vậy tại sao phải làm cho mã của bạn chạy nhanh?
dùng202729

1
@ bushdid911 Tôi đã tạo một phiên bản nhanh (er).
Leaky Nun


2

J , 40 byte

2%~[:+/^:_]<:[:+/&.:*:"1[:-"1/~#~#:i.@^~

Hãy thử trực tuyến!

Sẽ hết thời gian trên TIO cho 5 nếu bạn sử dụng độ chính xác mở rộng ( 5xthay vì 5). Tôi sẽ không bận tâm đến việc thử với 6 trên máy tính của mình vì điều đó chắc chắn sẽ làm hỏng trình thông dịch.

Tìm kiếm lời khuyên về việc chơi golf, đặc biệt là phần qua thế hệ tọa độ. Tôi cảm thấy như phải có một cách để loại bỏ một số mũ.

]<:[:+/&.:*:"1có thể được thay thế tương đương bởi *:<:[:+/"1[:*:.

Giải trình

Giải thích này được thực hiện trên REPL (ba khoảng trắng chỉ ra một lệnh, không có khoảng trắng nào chỉ ra một đầu ra). Tôi sẽ được xây dựng để trả lời.

Tạo tọa độ

#~ #: i.@^~ đưa ra tất cả các tọa độ mà chúng ta quan tâm trên mạng.

^~là một số được nâng lên chính nó và i.đưa ra phạm vi [0, n) trong đó n là đầu vào của nó. @tổng hợp các chức năng đó.

   i.@^~ 2
0 1 2 3

#~ sao chép một số của chính nó, ví dụ

   #~ 3
3 3 3

#:chuyển đổi đối số bên phải của nó thành cơ sở được chỉ định bởi mảng được cung cấp làm đối số bên trái của nó. Số chữ số trong mảng tương ứng với số chữ số trong đầu ra cơ sở đó (và bạn có thể có một cơ sở hỗn hợp) Ví dụ:

   3 3 3 #: 0
0 0 0
   5 5 #: 120
4 0
NB. If you want 120 base 5 use #.inv
   #.inv 120
4 4 0

Vì vậy, tất cả cùng nhau, điều này nói liệt kê thông qua tất cả các giá trị cơ sở n (trong đó n là đầu vào) cho đến n ^ n, mang lại hiệu quả cho chúng ta tọa độ của chúng ta.

   (#~ #: i.@^~) 2
0 0
0 1
1 0
1 1

Lấy khoảng cách giữa mỗi cặp

Đầu tiên, chúng tôi lấy sự khác biệt của từng tọa độ với tất cả các tọa độ khác bằng cách sử dụng dyad /-table và ~-reflexive. Lưu ý rằng điều này không giải thích cho thực tế là thứ tự không quan trọng đối với các cặp: điều này tạo ra khoảng cách trùng lặp.

  NB. 2 {. takes the first two elements (I'm omitting the rest).
  2 {. -"1/~ (#~ #: i.@^~) 2
 0  0
 0 _1
_1  0
_1 _1

 0  1
 0  0
_1  1
_1  0

Sau đó, chúng tôi sử dụng động từ này +/&.:*:trên mỗi tọa độ (at "1, aka xếp hạng một). Động từ này là sum ( +/) dưới ( &.:) vuông ( *:). Theo áp dụng động từ bên phải (hình vuông) sau đó thu thập kết quả của nó và đưa nó làm đối số cho động từ bên trái (tổng hợp). Sau đó, nó áp dụng nghịch đảo của động từ bên phải (sẽ là căn bậc hai).

   +/&.:*: 3 4
5
   +/&.:*:"1 ([: -"1/~ #~ #: i.@^~) 2
      0       1       1 1.41421
      1       0 1.41421       1
      1 1.41421       0       1
1.41421       1       1       0

Không có gì đáng ngạc nhiên, nhiều khoảng cách là như nhau.

Đếm khoảng cách lớn hơn hoặc bằng đầu vào

Phần cuối cùng là xem khoảng cách lớn hơn hoặc bằng đầu vào sử dụng ]<:. Sau đó, tất cả các kết quả được tính tổng bằng cách sử dụng +/^:_(tổng cho đến khi hội tụ), đếm số lượng giá trị trung thực. Sau đó, giá trị này được chia cho 2 ( 2%~, ở đây ~có nghĩa là hoán đổi thứ tự của các đối số được cung cấp cho %). Lý do tại sao chúng ta có thể chia cho 2 là vì với mỗi cặp ghép trung thực, sẽ có một số khác cho thứ tự lật ngoại trừ các cặp được phối hợp với chính nó. Tuy nhiên, điều đó cũng ổn, vì những thứ đó sẽ dẫn đến khoảng cách bằng 0.


1
35 byte với+/@,@(-:@<:+/&.:*:@:-"1/~)#~#:i.@^~
dặm
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.