2018年9月29日 星期六

[Python] setup Python environment in Mac OSX


  • Environment setup
    • install Python (via MacPorts)
    • sudo port install python
    • version selection (e.g version: 3.6 or 2.7)
      • check installed version by
      • port installed | grep python
      sudo port select --set python python36 (or python27)
      
      Success message: "Selecting 'python36' for 'python' succeeded. 'python36' is now active."
      
    • install pip & select version (python package manager)
    • sudo port install py36-pip (or py27-pip)
      port select --set pip pip36
      
  • Reference

2018年9月19日 星期三

[Programming] Recursive


  • Programming problems 中重要的一個分類就是 recursive
    • e.g. 著名的 n 階算法
    • int factorial(int n) { if (1 == n) return 1; if (0 == n) return 1; return n * factorial(n-1); }
    • 但更重要的是應該要考慮 recursive 的限制
    • stack overflow
      • 解法: 
        • tail recursive
          • 連結內的解釋相當清楚, 主要是透過寫法不同, 讓 compiler 在 O2, O3的 optimization時, 不用 call function, 而是 jne (jump not equal)
          • int factorial_acc(int n, int acc = 1) 
            {    
                if (n == 1) 
                    return acc;
                else
                    return factorial_acc(n - 1, n * acc);
            }
            
        • iterative
          • int factorial_iterative(int n)
            {
                int acc = 1;
                if (n <= 1) return acc;
                while (n > 1)
                {
                    acc *= n;
                    n--;
                }
                return sum;
            }
    • 延伸閱讀

2018年9月10日 星期一

[Child] 相片書比較


  • 從網路上的資訊, 大概先整理如下表格, 等實際印了, 再來分享
    • 品牌價格相片用紙相片印刷裝訂軟體操作/樣板
      健豪便宜


      蝴蝶本
      點點印
      較亮/色彩較鮮艷
      Li Book



  • Referece:

  • 2018年9月9日 星期日

    [Algorithm] optimize complexity - BUD method


    • 可以從 BUD(Bottleneck, Unnecessary, Duplicate) 來思考.
      • Bottleneck
        • 先拆解演算法步驟
          • step 1. 先排序 O(N) 
          • step 2. 再搜尋 O(logN)
          • 則瓶頸在 step 1.
        • 針對瓶頸替換演算法或是移除此步驟
      • Unnecessary
        • 移除過強的 assumption
          • e.g. 排序後再..., 排序這動作是不是一定要?
      • Duplicate
        • 若某一步驟已經做了, 何必再多做一步? 或是可以 early break?
          • e.g. 找 a+b+c = 10 的 solution, 已經找出 (a, b) 的值, c = 10-a-b, 直接 O(1) 得到, 你是否還多做了一層 iteration?
    • Ref: Cracking the coding interview