如何按字典顺序枚举无序整数对

发布于 2024-12-03 01:26:38 字数 287 浏览 1 评论 0原文

对于每对整数 i 和 j(其中 j >= i),给出一个整数 k = k(i,j) 使得

  • k(0,0) = 0
  • k(i, j2) = k(i,j1)+1 对于 j2 = j1 + 1
  • k(i,0) = k(i-1,i-1) + 1 , i >= 1

成立吗?

换句话说,如果从左到右用自然数逐行填充矩阵的左下部分,从 0 开始,给定第 i 行和第 i 列的索引,如何计算单元格的值索引 j <= i?

非常感谢!

what is the algorithm (or rather formula) which, for each pair integers i and j with j >= i, gives an integer k = k(i,j) such that

  • k(0,0) = 0
  • k(i,j2) = k(i,j1)+1 for j2 = j1 + 1
  • k(i,0) = k(i-1,i-1) + 1 , i >= 1

holds?

In other words, if you fill up the left-lower part of matrix row by row from left to right with the natural numbers, starting at 0, how can you compute the value of a cell given the index of its row i and the column index j <= i?

Thank you very much!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

只为守护你 2024-12-10 01:26:38

Alleo 答案的证明:

首先写下从 j 到 1 的第二个公式,

k(i,j)= k(i,j-1) + 1
k(i,j-1) = k(i,j-2) + 1
...
k(i,1) = k(i,0) + 1

总结您得到的这些公式:

k(i,j) = k(i,0) + 1+1 ..+1 = k(i,0) + j  (1)

现在从您的第三个公式:

k(i,0) = k(i-1,i-1) + 1  

使用 (1) :

k(i-1,i-1) = k(i-1,0) + i-1 

然后

k(i,0) = k(i-1,0) + i

然后因为 k(0,0) = 0

k(i,0) = sum(p for p=0 to i) = i*(i+1)/2 (2)

那么

(1) & (2) => k(i,j) = i*(i+1)/2 + j

proof of Alleo answer:

first write your second formula from j to 1

k(i,j)= k(i,j-1) + 1
k(i,j-1) = k(i,j-2) + 1
...
k(i,1) = k(i,0) + 1

sum up these formulas you get :

k(i,j) = k(i,0) + 1+1 ..+1 = k(i,0) + j  (1)

now from your 3rd formula:

k(i,0) = k(i-1,i-1) + 1  

using (1) :

k(i-1,i-1) = k(i-1,0) + i-1 

then

k(i,0) = k(i-1,0) + i

then since k(0,0) = 0

k(i,0) = sum(p for p=0 to i) = i*(i+1)/2 (2)

then

(1) & (2) => k(i,j) = i*(i+1)/2 + j
懒猫 2024-12-10 01:26:38

这是 i*(i+1)/2 + j。欢迎您检查

This is i*(i+1)/2 + j. You are welcome to check

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文