• 数据结构和算法示例一


    程序等于数据架构加算法,一个好的算法可以有效的提高程序整体的性能体现。举一个最简单的例子:解析三元一次方程组,假设现在手上有一块的硬币,还有合计50个1分、2分、5分的硬币,现在要把1块钱的硬币全部换成以分为单位的硬币,大概有多少种换法?

    根据题意,假设最后换成的硬币组成包括i枚1分的硬币、j枚2分的硬币、k枚5分的硬币,则可列出三元一次方程组如下:i+j+k=50;i+2j+5k=100;

    方程组的解析用程序来实现有三种实现方式,分别对应的运算次数为n的立方、n的平方、n。

    1. 第一种计算方式是直接用三层嵌套循环来运算,这样能算出来结果,但算法复杂度为n的立方,如示例代码中的doMethod1方法。
    2. 第二种计算方式是用两层嵌套循环来运算,算法复杂度为n的平方,如示例代码中的doMethod2。
    3. 第三计算方式是只用一层循环来运算,但需要通过转换,将两个方程左右分别相减,最后得到一个二元一次方程,这样就只需要循环一次即可,如示例代码中的doMethod3。
      1. package dataStructure;
      2. import java.util.Arrays;
      3. /*
      4. * 通过分硬币问题,研究算法对性能的影响
      5. * 假设1块钱,还有一分、2分、5分的硬币共50枚,现在讲1块钱全部换成分的硬币,大概有多少分法
      6. * 假设1分、2分、五分分别为x、y、z枚,则
      7. * x+y+z=50
      8. * x+2y+5z=100
      9. */
      10. public class Demo1 {
      11. public static void main(String args[]) {
      12. doMethod1();//循环三次,算法时间复杂度为n的立方
      13. System.out.println("---------");
      14. doMethod2();//循环两次,算法时间复杂度为n的平方
      15. System.out.println("---------");
      16. doMethod3();//循环一次,算法时间复杂度为n
      17. }
      18. public static void doMethod1() {
      19. //分别定义x,y,z的个位数为i,j,k
      20. for(int i=0;i<51;i++) {
      21. for(int j=0;j<51;j++) {
      22. for(int k=0;k<51;k++) {
      23. if((i+j+k==50)&& (i+2*j+5*k == 100)) {
      24. int[] array = {i,j,k};
      25. System.out.println("个数分别为:"+Arrays.toString(array));
      26. }
      27. }
      28. }
      29. }
      30. }
      31. public static void doMethod2() {
      32. //分别定义x,y的个位数为i,j,则y的个数为50-i-j
      33. for(int i=0;i<51;i++) {
      34. for(int j=0;j<51;j++) {
      35. if(i+2*j+5*(50-i-j)== 100) {
      36. int[] array = {i,j,50-i-j};
      37. System.out.println("个数分别为:"+Arrays.toString(array));
      38. }
      39. }
      40. }
      41. }
      42. /*
      43. * 分别定义x,y,z的个位数为i,j,k,
      44. * i+2j+5k=100
      45. * i+j+k=50
      46. * 将两个方程分别左右相减,得到
      47. * j+4k=50;
      48. */
      49. public static void doMethod3() {
      50. for(int j=0;j<51;j++) {
      51. for(int k=0;k<13;k++) {
      52. if(j+4*k == 50) {
      53. int[] array = {50-j-k,j,k};
      54. System.out.println("个数分别为:"+Arrays.toString(array));
      55. }
      56. }
      57. }
      58. }
      59. }

  • 相关阅读:
    Spring进行时——Spring项目创建与Bean的存储与读取
    作为程序员的你,有什么给初入职场的程序员的忠告?
    正点原子嵌入式linux驱动开发——Linux SPI驱动
    one-model引擎:私域营销推荐自动化解决方案【转载】
    LeetCode 37天 | 738.单调递增的数字 贪心算法总结
    微服务-kubernetes安装
    用Rust打印hello world!
    Multi-Paxos不是一个算法,而是统称
    基于Android的学习生活交流APP计算机毕业设计源码
    IDEA 配置git及使用
  • 原文地址:https://blog.csdn.net/sunny_daily/article/details/126413619